我有一个大小为(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
(例如)
答案 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