当我运行以下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个组件的列表?
答案 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)