函数句柄的单元格数组求和

时间:2018-12-10 19:56:07

标签: matlab

我有一个大小为(n,1)的单元格数组,其中包含一个函数句柄。每个单元必须包含特定的功能句柄以及先前单元中的功能句柄的总和。如何执行此操作?为了澄清这是一个例证。

A = cell(size(ones(n,1)));
for i = 1 : n
    A{i,1} = @(x) A{i-1,1} + i .* x;
end

如何在A{n,1}获得x = 2(例如)

2 个答案:

答案 0 :(得分:3)

您实际上已经很接近了,但是您需要为i = 1添加一个特例,并且需要调用该函数:

n = 10;
A = cell(size(ones(n,1)));

A{1,1} = @(x) 1 .* x;
for ii = 2 : n
    A{ii,1} = @(x) A{ii-1,1}(x) + ii .* x;
end

我将i替换为ii,以避免与复数混淆。对于n = 10

>> A{n}(2)

ans =

   110

答案 1 :(得分:2)

调用@gnovice comment时,您也可以只创建句柄的单元格数组,然后调用将它们累加到n的函数:

N = 10;
A = cell(N,1);
A{1} = @(x) 1.*x;
for k = 2:N
    A{k} = @(x) k.*x;
end

% the following function sums the output of A{1}(x) to A{n}(x):
f = @(n,x) sum(cellfun(@(c) c(x),A(1:n)));

结果:

>> f(5,2)
ans =
    30
>> f(N,2)
ans =
   110

这样,A中函数的每次更改都会在重新定义f时立即生效:

>> A{3} = @(x) -x;
>> f = @(n,x) sum(cellfun(@(c) c(x),A(1:n)));
>> f(N,2)
ans =
   102
>> f(5,2)
ans =
    22