speed up 'for' loops

1 次查看(过去 30 天)
Coo Boo
Coo Boo 2012-9-7
Hi,
How can I speed up following 'for' loops? Help me please.
P=200;
N=40000000;
y(1:P)=3;
% a: P X 1 matrix (vector)
% Z: P X 1 matrix (vector)
% x: N X 1 matrix (vector)
%%%%%Loops
y(P+1:N)=0;
for i=P+1:N
for j=1:P
y(i)=y(i)-a(j)*x(i-j);
end
end
for i=1:N
for j=1:P
f(i,j)=Z(j)^(i-1);
end
end
Thanks in advance.

采纳的回答

Jan
Jan 2012-9-7
编辑:Jan 2012-9-7
P = 200;
N = 40000000;
a = rand(P, 1);
Z = rand(P, 1);
x = rand(N, 1);
y(P+1:N) = 0; % This one at first! -> pre-allocation
y(1:P) = 3;
at = transpose(a);
for i=P+1:N
y(i) = y(i) - at * x(i-1:-1:i-P); % Dot-product of vectors => SUM
end
f = ones(P, N);
for i = 2:N
f(:, i) = f(:, i - 1) .* Z;
end
f = transpose(f);
  5 个评论
Jan
Jan 2012-9-7
编辑:Jan 2012-9-7
Thanks, Coo Boo, fixed now. Unfortunately I cannot test it, because I do not have a Matlab version installed on my current computer. But you are cordially invited to debug it.
Coo Boo
Coo Boo 2012-9-7
Thank you very much

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2012-9-7
for the second loop
c=repmat(Z',N,1)
f=bsxfun(@power,c,[0:N-1]')
  4 个评论
Coo Boo
Coo Boo 2012-9-7
Thank you very much
Matt Fig
Matt Fig 2012-9-7
No need for REPMAT or [].
f = bsxfun(@power,Z.',(0:N-1).');

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by