Speed up nested for loop

1 visualización (últimos 30 días)
Francesco Lisi
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
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.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
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
Francesco Lisi
Francesco Lisi el 1 de Jun. de 2021
Thank you Jan for your fast reply!
The code you provided is faster indeed. Here is the updated script
y=c.*conj(v);
yc=conj(y);
B_est = sum(abs(y).^2);
for m = 1:l
B_est = B_est + 2*sum(real(y(m+1:N) .* yc(1:N-m)));
end
Is there a way to speed up this one?
As input you can use complex arrays generated as randn(N,1)+1i*randn(N,1). I use this function in a Monte Carlo simulation with 10^3 iteration and this function is the slowest one.
Thank you again for your help.
Francesco
Jan
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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by