更有效的方法在matlab中进行for循环?

时间:2014-12-28 08:51:32

标签: matlab for-loop vectorization

我有以下最小代码:

N=30;
P=200;
a = lpc(signal,N);
y = zeros(1, P);
y(1:N) = x(1:N);

for ii=(N+1):P      
     y(ii) = -sum(a(2:end) .* y((ii-1):-1:(ii-N)));
end

y中的for循环效率不高,是一种向量化的方法吗?也许是matlab相关的功能?

编辑: 问题的更多背景 - 我试图使用lpc有效地预测已知的周期性信号。对于a=lpc(signal,3)我在matlab文档中发现y=filter([0 -a(2:end)],1,x)会做什么,如何将其推广到lpc(signal,N)

2 个答案:

答案 0 :(得分:1)

我使用符号工具箱为任何后来的y值打印出公式。这些公式非常长,需要(ii-N)*N次乘法才能使ii步骤直接计算y。矢量化解决方案必须进行所有这些乘法,它会更慢。

优化循环是可以完成的一切:

b=a(end:-1:2);
for ii=(N+1):P      
     y(ii) = -sum(b .* y((ii-N):(ii-1)));
end

向后索引很慢。

答案 1 :(得分:0)

我没有看到一种轻松可行的方式,因为y中的每个位置都取决于它的先行者。所以他们必须一步一步地计算。