评估函数matlab中的多个值

时间:2015-04-21 13:39:57

标签: matlab function numerical-methods evaluate

我在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.

当输入是向量而不是三个单独的数字时,有人能告诉我如何评估函数的值吗?

非常感谢!

2 个答案:

答案 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