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

时间:2012-10-05 07:47:42

标签: matlab parameter-passing cell-array

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

y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)

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

a = [a1 a2 ...]

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

2 个答案:

答案 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