在函数matlab中计算多个值

在函数matlab中计算多个值,matlab,function,numerical-methods,evaluate,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

我在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.
有人能告诉我,当输入是一个向量而不是三个独立的数字时,如何计算函数的值吗

非常感谢

你需要一个新的方法。定义向量
vec
,如下所示:

vec = {1 2 3} 
或使用

vec = [1 2 3]
vec = num2cell{vec}
然后调用
feval

feval(fun,vec{:})
,以下为等效项:

function1(1,2,3)
function1(vec{:})

当您想将向量
vec
传递给您的程序时,您需要修改您的程序,使其能够通过
varargin
接受不同数量的输入:

program(fun, vec{:))
或者将函数内部的
vec
计算更改为正在创建的
vec{:}
,它们可以与以下语法一起使用:

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

,但是让我们假设myfun有10个未知数,然后向量也有10个长度。然后需要编写大量的工作:res2=myfun(vect(1)、vect(2)、vect(3)、vect(4)、vect(5)、vect(6)、vect(7)、vect(8)、vect(9)、vect(9));难道没有更简单的方法吗?你是对的,这很乏味。如果您遵循@thewaywewalk建议,您可以使用单元格数组获得它。