2

我在将值从 GUI 发送到 Simulink 模型中的嵌入式 MATLAB 函数 (EMF) 时遇到问题。我从 GUI 中的滑块获取此值并将其发送到模型中的 EMF 块。我可以确认该值已从我的 GUI 正确传输到我的 Simulink 模块,因为我可以在模型中使用显示模块显示该值,并在我更改 GUI 中的滑块位置时看到值的变化。但是,当我运行我的模型时,我不断收到此错误:

Could not determine the size of this expression.

Function 'Kastl' (#18.282.283), line 14, column 1:
"f"

这是我的 EMF 块代码的一部分:

function y = input_par(u,fstart)
  ...
  f_end = 1000;
  f = fstart:f_end; 
  ...
4

2 回答 2

3

我相信MikeT是正确的:您不能在嵌入式函数中重新定义变量的大小。如果您查看定义局部变量小节下的嵌入式 MATLAB 函数文档页面,它会显示:

一旦定义了变量,就不能在函数体中将其重新定义为任何其他类型或大小。

您将不得不重新设计您的嵌入式函数,以便您声明的变量不会改变大小。由于我不知道您随后对变量做了什么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、负值等)。

于 2009-08-12T14:48:12.793 回答
2

我相信您遇到的问题是您无法在模拟期间更改参数,这会导致信号的维度发生变化。在您的示例中,代码

f = fstart:f_end;

每当 fstart 改变时改变大小。我认为这就是 EMF 块所抱怨的。对于这个特定问题,我没有任何简单的解决方法,但也许有一种等效的方法可以做你想做的事情来避免这个问题。

于 2009-08-12T01:23:19.797 回答