2012-06-27 44 views
2

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

我有什么:

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

我想要什么:

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

回答

4

的又一种方式是:

您可以使用cellfun到功能应用到每个单元阵列元素,它为您提供了各自结果的矢量。诀窍是应用一个函数,该函数将一些值插入存储在单元阵列中的函数句柄中。

ca = {@(X) X, @(X) X+1, @(X) X^2}; 
[email protected](x) cellfun(@(y) y(x), ca); 

>> h(4) 

ans = 
    4  5 16 
+0

以我的经验cellfun(或matfun)在遍历数组非常有效的。这可能是最快的方法。 – denahiro

0

我发现,命名每个功能,我可以让他们融入一个数组。我不太明白为什么这会起作用,但它确实如此。

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

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

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

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