2D random walk double for loop

1 回表示 (過去 30 日間)
ane4kina
ane4kina 2019 年 4 月 5 日
コメント済み: ane4kina 2019 年 4 月 15 日
Question: Consider a particle which starts from the origin, and it moves in a random direction in each timestep: (∆x,∆y) = (dcosθ,dsinθ) where d = 0.01 and θ is a random number between 0 and 2π. Plot the positions of Np = 2000 independent random particles at timestep 2000 in the x-y plane.
I have managed to plot the path of 1 particle walking for 2000 steps (it was the previous part of this question) but I don't seem to be able to create a double for loop correctly to plot the final position of 2000 particles. The program just keeps running and nothing happens.
Where did I make a mistake?
clear % clear variables and functions from memory
d=0.01 % initial condition
for j=1:2000 % Repeat for 2000 particles
for i=1:2000 % Time-evolution of a single particle
theta = 2*pi*rand(2000,1); % theta= random angle between 0 and 2pi
% for 2000 steps
x(1)=0 % initial condition x=0
y(1)=0 % initial condition y=0
x(i+1) = x(i)+d*cos(theta(i,1)); % define i-th element of x vector
y(i+1) = y(i)+d*sin(theta(i,1)); % define i-th element of y vector
end
xfinal(j)=x(2001); % the position of the j-th particle
yfinal(j)=y(2001);
rfinal(j)=sqrt(x(2001)^2+y(2001)^2); % the distance from the origin
end
plot(xfinal,yfinal,"bo") % plots final position
axis equal % sets the aspect ratio so that equal tick mark
% increments on the x and y axis are equal in size.
xlabel('X','FontSize',20) % X-axis label
ylabel('y','FontSize',20) % Y-axis label
grid on % adds grid
grid minor % adds finer grid

採用された回答

Agnish Dutta
Agnish Dutta 2019 年 4 月 11 日
I used the following method to generate the x and y coordinates od 2000 points moving randomly in 2D cartesian space. I was then able to use the "plot" function to track their movement.
pos_x = zeros(1, 2000);
pos_y = zeros(1, 2000);
d = 0.01;
for i = 1:2000
theta = 2*pi*rand(1, 2000);
pos_x(end + 1, :) = pos_x(end) + d.*cos(theta);
pos_y(end + 1, :) = pos_y(end) + d.*sin(theta);
end
% pos_x(i, j) = X-cooridnate of the jth particle at instance 'i'.
% pos_y(i, j) = Y-cooridnate of the jth particle at instance 'i'.
The next thing would be to plot the particle's movements in the cartesian plane.
for i = 1:2000
plot(pos_x(:, i), pos_y(:, i));
hold on;
end
Plotting all the 2000 points on the same figure can get messy though. I suggest plotting 3-5 of them at a time.
Here is some additional material I found related to visualizing random walks:
  1 件のコメント
ane4kina
ane4kina 2019 年 4 月 15 日
Thanks for your help!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeExploration and Visualization についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by