7

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

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

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

a = [a1 a2 ...]

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

4

2 回答 2

12

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

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
于 2012-10-05T08:59:23.893 回答
2

您可以使用可变数量的输入参数创建函数varargin

function fun(varargin)
a = cell2mat(varargin); % works only if arguments indeed only consists of scalars.

% your code comes hereafter
于 2012-10-05T08:10:02.303 回答