结合MATLAB中的匿名函数

时间:2012-06-27 18:01:34

标签: matlab anonymous-function cell-array

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

我有什么:

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

我想要的是什么:

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

3 个答案:

答案 0 :(得分:4)

另一种方式:

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

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

给出

>> h(4)

ans =
     4     5    16

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分:0)

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

f = ca{1};
g = ca{2};

h = @(X) [f(X), g(X)];

我觉得应该有一种更简单的方法来做到这一点。因为我正在处理未知数量的函数,所以我不得不使用eval()来创建变量,这是一个不好的标志。另一方面,调用new函数就像它应该的那样工作。