我正在使用符号工具箱来生成matlab函数。但是生成的函数的输入数量随着我需要的对象数量(例如,开关的数量)而变化。对于2和3个开关,生成的函数看起来像这样:
y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)
在使用此功能的脚本中,我建立了这些参数的向量:
a = [a1 a2 ...]
我想要的是直接调用生成的函数或创建包装函数,这样我在更改开关数时就不需要更改调用语句。为了使这个问题更加复杂,这些变量是ACADO变量。这意味着不允许矩阵和元素操作(即,所有数学运算必须使用标量完成,并且必须为标量编写符号工具箱中的公式。)
答案 0 :(得分:11)
您可能正在寻找单元格数组和{:}
运算符。它将单元格的内容更改为coma separated list。结果可以作为参数传递给函数。例如:
v2 = {a1, a2, b1, b2};
v3 = {a1, a2, a3, b1, b2, b3};
一个示例函数:
function fun(varargin)
display(['number of parameters: ' num2str(nargin)]);
您可以透明地调用不同数量参数的函数,如下所示
fun(v2{:})
number of parameters: 4
fun(v3{:})
number of parameters: 6
答案 1 :(得分:2)
您可以使用varargin
创建具有可变数量输入参数的函数。
function fun(varargin)
a = cell2mat(varargin); % works only if arguments indeed only consists of scalars.
% your code comes hereafter