【问题标题】:Combining Anonymous Functions in MATLAB在 MATLAB 中组合匿名函数
【发布时间】:2012-06-27 18:01:33
【问题描述】:

我有一个匿名函数句柄元胞数组,并想创建一个匿名函数,该函数返回包含每个函数输出的向量。

我有什么:

ca = {@(X) f(X), @(X)g(X), ...}

我想要什么:

h = @(X) [ca{1}(X), ca{2}(X), ...]

【问题讨论】:

    标签: matlab anonymous-function cell-array


    【解决方案1】:

    另一种方法:

    您可以使用cellfun 对每个元胞数组元素应用一个函数,从而为您提供一个包含相应结果的向量。诀窍是应用一个函数,将一些值插入存储在元胞数组中的函数句柄中。

    ca = {@(X) X, @(X) X+1, @(X) X^2};
    h=@(x) cellfun(@(y) y(x), ca);
    

    给予

    >> h(4)
    
    ans =
         4     5    16
    

    【讨论】:

    • 根据我的经验,cellfun(或 matfun)在遍历数组时非常有效。这可能是最快的方法。
    【解决方案2】:

    您可以使用str2func 来创建您的匿名函数,而无需求助于eval

    ca = {@sin,@cos,@tan}
    %# create a string, using sprintf for any number
    %# of functions in ca
    cc = str2func(['@(x)[',sprintf('ca{%i}(x) ',1:length(ca)),']'])
    
    cc = 
        @(x)[ca{1}(x),ca{2}(x),ca{3}(x)]
    
    cc(pi/4)
    
    ans =
        0.7071    0.7071    1.0000
    

    【讨论】:

      【解决方案3】:

      我发现通过命名每个函数,我可以让它们适合一个数组。我不太明白为什么会这样,但确实如此。

      f = ca{1};
      g = ca{2};
      
      h = @(X) [f(X), g(X)];
      

      我觉得应该有一种更简单的方法来做到这一点。因为我正在处理未知数量的函数,所以我不得不使用 eval() 来创建变量,这是一个不好的迹象。另一方面,调用新函数的工作方式与预期相同。

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多