指定 MATLAB Function 模块变量的大小
您可以使用符号窗格和属性检查器 (自 R2022a 起),或使用模型资源管理器来指定 MATLAB Function 模块中变量的大小。MATLAB Function 模块可以使用标量、向量或矩阵。有关创建、删除和设置变量属性的详细信息,请参阅Create and Define MATLAB Function Block Variables 和 定义和修改变量数据类型。您可以设置变量来继承大小或手动指定大小。
从 Simulink 继承大小
默认大小为 -1
,这意味着变量根据作用域属性的值继承其大小:
范围 | 描述 |
---|---|
输入 | 从连接到关联输入端口的 Simulink® 信号继承大小。 |
输出 | 从连接到关联输出端口的 Simulink 信号继承大小。 |
参数 | 从关联的 Simulink 或 MATLAB® 参数继承大小。请参阅配置 MATLAB Function 模块参数变量。 |
作用域属性设置为数据存储内存的变量始终继承其大小。
自定义可变大小
您也可以手动将变量大小设置为标量、向量或矩阵。要将大小指定为标量,请将大小设置为 1
或清除该参数。要将大小指定为向量或矩阵,请以 [row column]
格式输入具有正整数的行向量。例如,要定义大小为 6 的列向量,请将大小属性设置为 [6 1]
。要定义大小为 5 的行向量,请将大小属性设置为 [1 5]
。要定义数据大小为 3×3 的矩阵,请将大小属性设置为 [3 3]
。
在 R2021b 之前: MATLAB Function 模块将列向量输出为一维数据。
默认情况下,MATLAB Function 模块保留其维度。要保持旧行为,请在属性检查器或模型资源管理器中清除将输出列向量解释为一维数据属性。您可以使用大小中的单个整数来定义输出列向量的大小。请参阅Interpret output column vectors as one-dimensional data。 (自 R2021b 起)
如果您不知道所需的维度大小的上限,请使用 Inf
(自 R2023b 起) 指定无界维度。例如,如果您不知道列的上界,但您最多有两行,请将大小设置为 [2 Inf]
。要指定无界维度,请执行以下操作:
变量必须为可变大小的。请参阅声明可变大小的 MATLAB Function 模块变量。
将语言配置参数设置为 C++。打开“配置参数”窗口,在仿真目标窗格中,将语言设置为 C++。
有关详细信息,请参阅Unbounded Variable-Size Signals和Unbounded Variable-Size Signal Basic Operations。
您也可以使用表达式设置大小属性。表达式可以包括:
这些表达式必须输出一个正整数或 [row column]
格式的两个正整数。否则,指定的大小会在模型编译时产生错误。例如,假设一个 MATLAB Function 模块具有变量 k
、x
和 y
,这些数据的作用域属性都设置为参数。此处,k
是正整数,x
和 y
是矩阵。如果为该模块创建新变量,可以使用以下任一表达式定义大小属性:
k+1 size(x) min(size(y))
自定义大小属性示例
此示例使用一个具有输入变量的 MATLAB Function 模块,该输入变量根据基础工作区变量的值调整其大小。
MATLAB 函数接受一个输入信号,该输入信号根据基础工作区变量 k
的值更改大小。k
是您打开模型时由模型定义的一个数组。Gain 模块将输入信号乘以 k
,并将此信号输出到 MATLAB Function 模块。为了使输入变量的大小与输入信号的大小匹配,MATLAB Function 模块为输入变量 u
指定自定义大小。打开 MATLAB Function 模块可查看变量和代码。
function y = fcn(u)
y = 2*u;
查看变量属性。在函数选项卡中,点击编辑数据。在符号窗格中,选择 u
以在属性检查器中查看属性。为了匹配输入的大小,该模块定义 u
并将大小属性设置为 size(k)
。
如果您更改 k
的大小,u
将与 k
的新大小匹配。
仿真和大小匹配
编译模型后,模型资源管理器中的 CompiledSize 列显示仿真中使用的实际大小。如果大小属性的值不是 -1
并且与实际大小不匹配,则在模型编译期间会出现不匹配错误。