Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中变参数函数的调用_Matlab_Parameter Passing_Cell Array - Fatal编程技术网

Matlab中变参数函数的调用

Matlab中变参数函数的调用,matlab,parameter-passing,cell-array,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 ...] 我想要的是直接调用生成的函数,或者生成一个包装函数,这样在更改开关数量时就不需要更改call语句。更复杂的是,这些变量是ACADO变量。这意味着不允许进行矩阵和元素操作(即,

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

y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)
在使用此函数的脚本中,我建立了这些参数的向量:

a = [a1 a2 ...]

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

您可以创建具有可变数量输入参数的函数


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

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

我不认为这解决了我的问题,因为我不能用不同数量的参数生成函数,因为它是由symbol toolbox()生成的。我尝试使用vargin,但我无法使它工作:f=@(x,y)(x+y);vargin{1}=1;vargin{2}=2;f(vargin)@angainor提供的答案可能是你应该走的路。
fun(v2{:})
number of parameters: 4

fun(v3{:})
number of parameters: 6