向量作为输入如何在 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) 是该向量的前两个元素。因此在函数中 in1in2 都是标量,您只能访问它们的 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);