有一个数组,其第n项是使用第(n-1)项计算的。如何有效地完成此操作(无需 for 循环)?
例如:
A(n) = B(n) + (A(n-1) - B(n)) * e^(-t(n))
A(n) = A(n-1) * e^(-t(n)) + B(n) * (1 - e^(-t(n)))
循环的示例:
t=[1:1000];
B=[1:1000].^2;
A=zeros(1,1000);
A(1)=0;
for n=[2:length(t)]
A(n) = B(n) + (A(n-1) - B(n)) * e^(-t(n));
endfor
plot(t, A)
编辑:我更喜欢八度解决方案,所以我删除了 matlab 标签。不过,如果有一个 matlab 函数可以做到这一点,我仍然感兴趣。
我的结论是,在 Octave/Matlab 中以“更高效”的方式消除这样的
for
循环目前是不可能的。
消除重复现象是可能的,但考虑到它的实现方式,它不会提供性能优势。
如果性能是一个问题,那么转向另一种语言是最好的方法。