matlab - 您能解释一下这个嵌入式 MATLAB 函数错误吗?

标签 matlab embedded simulink

我在将值从 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/

相关文章:

gcc - 用于 ubuntu 的 ARM 工具链编译时出错

matlab - 如何垂直翻转 Simulink 模块?

matlab - 使用 Matlab 导入另一个 .m 文件

matlab - 绘图标题中的变量

c - 我们必须使用 C "for performance reasons"

c - s(n)printf 打印比格式说明符指定的字符更多的字符

matlab - 在 Simulink 中获取多个选定 block 的句柄

java - 使用udp在java和simulink之间传输 double

java - matlab deploytool to java package javac报错

matlab - matlab中的三元运算符