Speed up nested for loop
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Francesco Lisi
el 28 de Mayo de 2021
Comentada: Jan
el 1 de Jun. de 2021
Hi,
I have to speed up the following code.
N is an integer of the order 10^4, l is of the order of (N)^(1/4), c and v are column complex vectors with N elements.
B = 0;
for m = 1:l
for n = m+1 : N
B = B + 2*real(c(n)*conj(v(n))* conj(c(n-m))*v(n-m));
end
end
Thank you for your help.
Francesco
1 comentario
Jan
el 28 de Mayo de 2021
Please provide some inputs values, maybe produced by rand(). It is hard to improve the code without running it. And inveting default inputs might be misleading, if we oversee an important detail.
Respuesta aceptada
Jan
el 28 de Mayo de 2021
Editada: Jan
el 28 de Mayo de 2021
Maybe:
% [UNTESTED CODE] Please provide inputs for testing
B = 0;
for m = 1:l
B = B + sum(2 * real(c(m+1 : N) .* conj(v(m+1 : N)) .* ...
conj(c(1 : N-m)) .* v(1 : N-m)));
end
Does this work? Then:
B = 0;
c_cv = c .* conj(v);
cc_v = conj(c_cv);
for m = 1:l
B = B + 2 * sum(real(c_cv(m+1 : N) .* cc_v(1 : N-m)));
end
2 comentarios
Jan
el 1 de Jun. de 2021
A further improvement:
c_cv = c .* conj(v);
cc_v = conj(c_cv);
B = 0; % sum(abs(y).^2) did not appear in the original question
for m = 1:l
B = B + real(c_cv(m+1 : N).' * cc_v(1 : N-m));
end
B = B * 2;
Letting the sum() be done by the dot product saves some time, because the optimized BLAS library is used.
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!