2D Random Walk
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I am trying to simulate a 2D random walk.
But I keep getting errors
I dont know what I did wrong?

This is my code:
% Define the number of steps for two different runs
N1 = 1000;
N2 = 200;
% Initialize the position vectors for the first run
X1 = zeros(1, N1);
Y1 = zeros(1, N1);
% Perform the random walk for the first run
for i = 2:N1
% Generate a random direction
direction = rand(1, 2)*2*pi;
% Update the position
X1(i) = X1(i-1) + cos(direction);
Y1(i) = Y1(i-1) + sin(direction);
end
% Initialize the position vectors for the second run
X2 = zeros(1, N2);
Y2 = zeros(1, N2);
% Perform the random walk for the second run
for i = 2:N2
% Generate a random direction
direction = rand(1, 2)*2*pi;
% Update the position
X2(i) = X2(i-1) + cos(direction);
Y2(i) = Y2(i-1) + sin(direction);
end
% Plot the results for 1000 steps
figure;
subplot(2, 1, 1);
plot(X1, Y1, 'LineWidth', 2);
hold on;
plot(X2, Y2, 'LineWidth', 2);
title('2D Random Walk - Trajectories for 1000 Steps');
xlabel('X-axis');
ylabel('Y-axis');
legend('Run 1', 'Run 2');
grid on;
% Plot the histograms for 1000 steps
subplot(2, 1, 2);
histogram(X1, 'FaceColor', 'blue', 'EdgeColor', 'black', 'BinWidth', 0.5);
hold on;
histogram(Y1, 'FaceColor', 'red', 'EdgeColor', 'black', 'BinWidth', 0.5);
histogram(X2, 'FaceColor', 'cyan', 'EdgeColor', 'black', 'BinWidth', 0.5);
histogram(Y2, 'FaceColor', 'magenta', 'EdgeColor', 'black', 'BinWidth', 0.5);
title('Histograms for X and Y - 1000 Steps');
xlabel('Value');
ylabel('Frequency');
legend('X - Run 1', 'Y - Run 1', 'X - Run 2', 'Y - Run 2');
grid on;
% Repeat for 200 steps
% Initialize the position vectors for the third run
X3 = zeros(1, N2);
Y3 = zeros(1, N2);
% Perform the random walk for the third run
for i = 2:N2
% Generate a random direction
direction = rand(1, 2)*2*pi;
% Update the position
X3(i) = X3(i-1) + cos(direction);
Y3(i) = Y3(i-1) + sin(direction);
end
% Plot the results for 200 steps
figure;
subplot(2, 1, 1);
plot(X3, Y3, 'LineWidth', 2);
title('2D Random Walk - Trajectory for 200 Steps');
xlabel('X-axis');
ylabel('Y-axis');
grid on;
% Plot the histograms for 200 steps
subplot(2, 1, 2);
histogram(X3, 'FaceColor', 'blue', 'EdgeColor', 'black', 'BinWidth', 0.5);
hold on;
histogram(Y3, 'FaceColor', 'red', 'EdgeColor', 'black', 'BinWidth', 0.5);
title('Histograms for X and Y - 200 Steps');
xlabel('Value');
ylabel('Frequency');
legend('X', 'Y');
grid on;
1 Kommentar
Torsten
am 12 Dez. 2023
Bearbeitet: Torsten
am 12 Dez. 2023
What are the possible positions after one random step starting from (x,y) ?
Is it (x+1,y+1), (x+1,y-1), (x-1,y+1) and (x-1,y-1) ?
If this is the case, why do you use cos and sin functions to compute the next position ?
Or are you allowed to reach all points on the circle with radius 1 around (x,y) with equal probability ?
Antworten (2)
Voss
am 12 Dez. 2023
rand(1,2) produces a 1x2 vector:
rand(1, 2)
Seems like you want a scalar instead:
rand(1, 1) % or just rand()
Making that change allows the code to run:
% Define the number of steps for two different runs
N1 = 1000;
N2 = 200;
% Initialize the position vectors for the first run
X1 = zeros(1, N1);
Y1 = zeros(1, N1);
% Perform the random walk for the first run
for i = 2:N1
% Generate a random direction
direction = rand()*2*pi;
% Update the position
X1(i) = X1(i-1) + cos(direction);
Y1(i) = Y1(i-1) + sin(direction);
end
% Initialize the position vectors for the second run
X2 = zeros(1, N2);
Y2 = zeros(1, N2);
% Perform the random walk for the second run
for i = 2:N2
% Generate a random direction
direction = rand()*2*pi;
% Update the position
X2(i) = X2(i-1) + cos(direction);
Y2(i) = Y2(i-1) + sin(direction);
end
% Plot the results for 1000 steps
figure;
subplot(2, 1, 1);
plot(X1, Y1, 'LineWidth', 2);
hold on;
plot(X2, Y2, 'LineWidth', 2);
title('2D Random Walk - Trajectories for 1000 Steps');
xlabel('X-axis');
ylabel('Y-axis');
legend('Run 1', 'Run 2');
grid on;
% Plot the histograms for 1000 steps
subplot(2, 1, 2);
histogram(X1, 'FaceColor', 'blue', 'EdgeColor', 'black', 'BinWidth', 0.5);
hold on;
histogram(Y1, 'FaceColor', 'red', 'EdgeColor', 'black', 'BinWidth', 0.5);
histogram(X2, 'FaceColor', 'cyan', 'EdgeColor', 'black', 'BinWidth', 0.5);
histogram(Y2, 'FaceColor', 'magenta', 'EdgeColor', 'black', 'BinWidth', 0.5);
title('Histograms for X and Y - 1000 Steps');
xlabel('Value');
ylabel('Frequency');
legend('X - Run 1', 'Y - Run 1', 'X - Run 2', 'Y - Run 2');
grid on;
% Repeat for 200 steps
% Initialize the position vectors for the third run
X3 = zeros(1, N2);
Y3 = zeros(1, N2);
% Perform the random walk for the third run
for i = 2:N2
% Generate a random direction
direction = rand()*2*pi;
% Update the position
X3(i) = X3(i-1) + cos(direction);
Y3(i) = Y3(i-1) + sin(direction);
end
% Plot the results for 200 steps
figure;
subplot(2, 1, 1);
plot(X3, Y3, 'LineWidth', 2);
title('2D Random Walk - Trajectory for 200 Steps');
xlabel('X-axis');
ylabel('Y-axis');
grid on;
% Plot the histograms for 200 steps
subplot(2, 1, 2);
histogram(X3, 'FaceColor', 'blue', 'EdgeColor', 'black', 'BinWidth', 0.5);
hold on;
histogram(Y3, 'FaceColor', 'red', 'EdgeColor', 'black', 'BinWidth', 0.5);
title('Histograms for X and Y - 200 Steps');
xlabel('Value');
ylabel('Frequency');
legend('X', 'Y');
grid on;
0 Kommentare
Walter Roberson
am 12 Dez. 2023
for i = 2:N1
% Generate a random direction
direction = rand(1, 2)*2*pi;
% Update the position
X1(i) = X1(i-1) + cos(direction);
Y1(i) = Y1(i-1) + sin(direction);
end
This will fail for the reasons already identified by @Voss
I would like to suggest
for i = 2:N1
% Generate a random direction
direction = randi(4,1,1)/2
% Update the position
X1(i) = X1(i-1) + cospi(direction);
Y1(i) = Y1(i-1) + sinpi(direction);
end
This will have only select from 4 positions, rather than from infinite positions.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

