2D random walk double for loop

조회 수: 2 (최근 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 CenterFile Exchange에서 Exploration and Visualization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by