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

xriantvc  于 2023-01-13  发布在  Matlab
关注(0)|答案(2)|浏览(269)

当我运行下面的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向量转换成一个n分量的列表,然后传递给函数?

blmhpbnm

blmhpbnm1#

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

一般来说,只要定义的函数能够处理这么多的输入/维度,就可以对任何维度向量执行此操作。

b91juud3

b91juud32#

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

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

相关问题