How to avoid double for-loop

7 vues (au cours des 30 derniers jours)
Lucius
Lucius le 21 Avr 2015
Commenté : Star Strider le 21 Avr 2015
I have the following code
for n = 1:N
for l = 1:N
phase = exp(1i * (rand*0.5*pi-0.25*pi));
Efield_x(n,l) = Efield_x(n,l) .* phase;
end
end
with N=2^10 . Each matrix element should be multiplied with a different random number from -0.25*pi to 0.25*pi . Although the computer is running ("busy") I am waiting for 15 minutes now. How can we avoid this slow double for-loop to fasten to process significantly? By the way, I have 8 GB Ram.

Réponse acceptée

Star Strider
Star Strider le 21 Avr 2015
This seems to work:
N = 2^10;
Efield_x = ones(N); % Create Data
phase = exp(1i * (rand(N)-0.5)*0.25*pi);
Efield_x = Efield_x .* phase;
  2 commentaires
Lucius
Lucius le 21 Avr 2015
Modifié(e) : Lucius le 21 Avr 2015
you mean
...(rand(N)-0.5)*0.5*pi);
This works, thanks.
Star Strider
Star Strider le 21 Avr 2015
My pleasure.
You’re correct on ‘phase’, with 0.5 rather than 0.25 as the multiplier to produce ±0.25*pi.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by