在函数matlab中评估多个值

Evaluate multiple values in a function matlab

我在matlab中定义了一个函数:

function1 = @(x,y,z)[x*y*z,y^2,x+z]

然后在我要编写的程序中,我想计算此函数的值 (1,2,3)。

在程序之外我可以使用 feval(function1,1,2,3) 和这个 returns

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.

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

非常感谢!

您需要 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{:))

或者您将 vec inside 函数的计算更改为 vec{:}

您正在创建 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