在Matlab中调用具有不同数量参数的函数

Tor*_* Bø 6 matlab parameter-passing cell-array

我正在使用符号工具箱来生成matlab函数.但是生成函数的输入数量随着我需要的对象数量(例如,开关数量)而变化.对于2和3个开关,生成的函数看起来像这样:

y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)
Run Code Online (Sandbox Code Playgroud)

在使用此函数的脚本中,我建立了这些参数的向量:

a = [a1 a2 ...]
Run Code Online (Sandbox Code Playgroud)

我想要的是直接调用生成的函数或者创建一个包装器函数,这样我在更改开关数时就不需要更改调用语句了.为了使这个问题更加复杂,这些变量是ACADO变量.这意味着不允许矩阵和元素操作(即,必须使用标量完成所有数学运算,并且必须为标量编写符号工具箱中的公式).

ang*_*nor 11

您可能正在寻找单元阵列和{:}运算符.它将单元格的内容更改为逗号分隔列表.结果可以作为参数传递给函数.例如:

v2 = {a1, a2, b1, b2};
v3 = {a1, a2, a3, b1, b2, b3};
Run Code Online (Sandbox Code Playgroud)

并举例说明:

function fun(varargin)
    display(['number of parameters: ' num2str(nargin)]);
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式"透明地"调用不同数量参数的函数

fun(v2{:})
number of parameters: 4

fun(v3{:})
number of parameters: 6
Run Code Online (Sandbox Code Playgroud)