我在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作为输出
我在做什么错?我感到多路复用器无法正常运行,或者该块的参数不正确。
答案 0 :(得分:3)
您是正确的-多路复用器模块没有按照您的想法进行操作。
Interpreted MATLAB
块的输入是一个9个元素的向量,其中u(1)
和u(2)
是该向量的前两个元素。因此,在函数in1
和in2
中都是标量,您只能访问它们的第一个/唯一元素。尝试访问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);