我在将值从 GUI 发送到 Simulink 模型中的嵌入式 MATLAB 函数 (EMF) 时遇到问题。我从 GUI 中的 slider 获取该值,并将其发送到模型中的 EMF block 。我可以确认该值已从 GUI 正确传输到 Simulink 模块,因为我可以在模型中使用显示模块显示该值,并在更改 GUI 中的 slider 位置时查看值的变化。但是,当我运行模型时,我不断收到此错误:
Could not determine the size of this expression.
Function 'Kastl' (#18.282.283), line 14, column 1:
"f"
这是我的 EMF block 代码的一部分:
function y = input_par(u,fstart)
...
f_end = 1000;
f = fstart:f_end;
...
最佳答案
我相信MikeT是正确的:您不能重新定义嵌入函数中变量的大小。如果你看这个Embedded MATLAB Function documentation page在定义局部变量小节下,它说:
Once you define a variable, you cannot redefine it to any other type or size in the function body.
您将必须重新设计您的嵌入式函数,以便您声明的变量的大小不会改变。由于我不知道您随后要使用变量 f
做什么,因此我无法为您提供更多具体帮助。
一般来说,如果您绝对需要使用改变大小的数据,一种解决方案是用“垃圾”值填充数据以保持恒定的大小。例如:
MAX_ELEMS = 1000; % Define the maximum number of elements in the vector
f = [fstart:MAX_ELEMS nan(1,fstart-1)]; % Create vector and pad with NaNs
在上面的示例中,变量 f
将始终有 1000 个元素(假设 fstart
的值是小于或等于 1000 的整数值)。值 NaN
用于将向量填充到适当的常量大小。任何后续代码都必须能够识别应忽略 NaN
值。根据嵌入函数中随后进行的计算,可能需要不同的填充值来代替 NaN(例如 0、负值等)。
关于matlab - 您能解释一下这个嵌入式 MATLAB 函数错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1259001/