向量作为输入如何在 Simulink 中解释的 matlab 函数块中工作?
How do vectors as inputs work in interpreted matlab function block in Simulink?
我在 matlab 中编写了这个函数:
function out = summa(in1,in2)
out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3)
我在simulink中实现如下:
在我编写的 matlab 函数块中
summ(u(1),u(2))
我收到以下错误:
如果我从控制台输入向量,该函数工作正常,如下所示:
summa([1 2 3 4 5 6],[1 2 3])
我得到 27 作为输出
我做错了什么?我感觉 mux 不能像我想要的那样工作,或者块的参数不正确。
你是对的 - mux 块没有按照你的想法行事。
Interpreted MATLAB
块的输入是一个包含 9 个元素的向量,u(1)
和 u(2)
是该向量的前两个元素。因此在函数中 in1
和 in2
都是标量,您只能访问它们的 first/only 元素。尝试访问 in1(2)
等会引发您看到的错误。
您应该使用包含以下代码的 MATLAB Function 块,
function y = fcn(in1,in2)
coder.extrinsic('summa'); % This allows you to call the external function
y = 0; % This tells Simulink that the output will be a double
y = summa(in1,in2);
您会看到该块有 2 个输入,您应该将常量块的输出分别输入它们。
或者更好,如果可能的话,根本不要使用外部函数。将所有代码放入 MATLAB Function
块中的函数,
function out = fcn(in1,in2)
out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3);
我在 matlab 中编写了这个函数:
function out = summa(in1,in2)
out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3)
我在simulink中实现如下:
在我编写的 matlab 函数块中
summ(u(1),u(2))
我收到以下错误:
如果我从控制台输入向量,该函数工作正常,如下所示:
summa([1 2 3 4 5 6],[1 2 3])
我得到 27 作为输出
我做错了什么?我感觉 mux 不能像我想要的那样工作,或者块的参数不正确。
你是对的 - mux 块没有按照你的想法行事。
Interpreted MATLAB
块的输入是一个包含 9 个元素的向量,u(1)
和 u(2)
是该向量的前两个元素。因此在函数中 in1
和 in2
都是标量,您只能访问它们的 first/only 元素。尝试访问 in1(2)
等会引发您看到的错误。
您应该使用包含以下代码的 MATLAB Function 块,
function y = fcn(in1,in2)
coder.extrinsic('summa'); % This allows you to call the external function
y = 0; % This tells Simulink that the output will be a double
y = summa(in1,in2);
您会看到该块有 2 个输入,您应该将常量块的输出分别输入它们。
或者更好,如果可能的话,根本不要使用外部函数。将所有代码放入 MATLAB Function
块中的函数,
function out = fcn(in1,in2)
out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3);