我在matlab中定义了一个函数:
function1 = @(x,y,z)[x*y*z,y^2,x+z]
然后在我要编写的程序中,我想为(1,2,3)计算此函数的值。
在程序之外我可以使用feval(function1,1,2,3)
并返回
6 4 4.
现在在我的程序中,我希望输入如下:output = program(fun, vec)
,其中vec
是像[1,2,3]
这样的向量。
如果我现在致电:feval(fun,vec)
我收到以下错误消息:
Error using @(x,y,z)[x*y*z,y^2,x+z]
Not enough input arguments.
当输入是向量而不是三个单独的数字时,有人能告诉我如何评估函数的值吗?
非常感谢!
答案 0 :(得分:2)
您需要comma-separated list。定义您的向量vec
,如下所示:
vec = {1 2 3}
或使用
vec = [1 2 3]
vec = num2cell{vec}
然后拨打feval
:
feval(fun,vec{:})
It is actually obsolete to evaluate functions with feval
,以下内容相同:
function1(1,2,3)
function1(vec{:})
如果您想将向量vec
传递到程序,则需要修改程序,以便使用varargin
接受各种输入:
program(fun, vec{:))
或者您将对{* 1}} 内部的vec
的评估更改为vec{:}
答案 1 :(得分:0)
您正在创建anonymous functions,并且可以使用以下语法:
myfun= @(x,y,z)([x*y*z,y^2,x+z])
res=myfun(1,2,3);
vect=[1 2 3]
res2=myfun(vect(1),vect(2),vect(3));
一般情况下,我会尽量避免使用feval
。