【问题标题】:Evaluate multiple values in a function matlab在函数matlab中评估多个值
【发布时间】:2015-04-21 13:39:56
【问题描述】:

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

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

非常感谢!

【问题讨论】:

    标签: matlab function numerical-methods evaluate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这行得通,但是让我们假设 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 的建议,您可以使用元胞数组获得它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多