如何使用matlabFunction生成的函数的向量参数

时间:2014-10-06 19:06:30

标签: matlab function arguments

当我运行以下Matlab代码时:

x=sym('x',[2 1])    
func=x.'*x    
f=matlabFunction(func)    
x=rand(2,1)    
f(x(1),x(2))     % this works    
f(x)             % but this gives an error

我收到错误:

Error using symengine>makeFhandle/@(x1,x2)x1.^2+x2.^2
Not enough input arguments.

我想让代码对于n向量更通用,在代码中确定n 因此,我无法列出所有n个变量,如f(x(1), x(2), ..., x(n))
有没有办法将n-vector转换为要传递给函数的n个组件的列表?

2 个答案:

答案 0 :(得分:3)

您可以使用num2cell进行操作。你要做的是将每个参数转换成它自己的单个单元格,然后使用:来处理参数。换句话说,你会这样做:

x = rand(2,1);
c = num2cell(x);
f(c{:})

重复上面的代码,并使用我已经定义的代码,这就是我得到的:

%// Your code
x=sym('x',[2 1]);    
func=x.'*x;    
f=matlabFunction(func);    
x=rand(2,1);

%// My code
c = num2cell(x);

%// Display what x is
x

%// Display what the output is
out = f(c{:})

我也在展示x是什么以及最终答案是什么。这就是我得到的:

x =

    0.1270
    0.9134

out =

    0.8504

这也与:

相同
out = f(x(1), x(2))

out =

    0.8504

一般情况下,只要您定义的函数可以处理许多输入/维度,您就可以使用任何所需的维度向量。

答案 1 :(得分:1)

要解决此问题,请使用vars参数:

f=matlabFunction(func,'vars',{x})
p=rand(2,1)
f(p)