【发布时间】: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
我有一个匿名函数句柄元胞数组,并想创建一个匿名函数,该函数返回包含每个函数输出的向量。
我有什么:
ca = {@(X) f(X), @(X)g(X), ...}
我想要什么:
h = @(X) [ca{1}(X), ca{2}(X), ...]
【问题讨论】:
标签: matlab anonymous-function cell-array
另一种方法:
您可以使用cellfun 对每个元胞数组元素应用一个函数,从而为您提供一个包含相应结果的向量。诀窍是应用一个函数,将一些值插入存储在元胞数组中的函数句柄中。
ca = {@(X) X, @(X) X+1, @(X) X^2};
h=@(x) cellfun(@(y) y(x), ca);
给予
>> h(4)
ans =
4 5 16
【讨论】:
您可以使用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
【讨论】:
我发现通过命名每个函数,我可以让它们适合一个数组。我不太明白为什么会这样,但确实如此。
f = ca{1};
g = ca{2};
h = @(X) [f(X), g(X)];
我觉得应该有一种更简单的方法来做到这一点。因为我正在处理未知数量的函数,所以我不得不使用 eval() 来创建变量,这是一个不好的迹象。另一方面,调用新函数的工作方式与预期相同。
【讨论】: