How to avoid double for-loop

1 view (last 30 days)
Lucius
Lucius on 21 Apr 2015
Commented: Star Strider on 21 Apr 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.

Accepted Answer

Star Strider
Star Strider on 21 Apr 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 Comments
Lucius
Lucius on 21 Apr 2015
Edited: Lucius on 21 Apr 2015
you mean
...(rand(N)-0.5)*0.5*pi);
This works, thanks.
Star Strider
Star Strider on 21 Apr 2015
My pleasure.
You’re correct on ‘phase’, with 0.5 rather than 0.25 as the multiplier to produce ±0.25*pi.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!