如何在 MATLAB 中构造关于时间的两个粒子布朗轨迹?
How to construct two particle Brownian trajectory with respect to time in MATLAB?
正在研究一个构造二维布朗运动轨迹生成的MATLAB代码,from this link,给出为:
particle = struct();
particle.x = cumsum( randn(N, 1) );
particle.y = cumsum( randn(N, 1) );
plot(particle.x, particle.y);
ylabel('Y Position');
xlabel('X Position');
title('position versus time in 2D');
我想生成两个这样的布朗粒子,但有时间间隔,即假设一个粒子在“0”时间生成,而另一个粒子在时间 't' 生成。我不知道如何将其合并到此代码或其他代码中。有人可以帮忙吗?
以上脚本计算粒子在N
步后的位置。两个粒子之间的唯一区别是它们走了不同的步数。因此,您只需将 N
的不同值插入:
% First Particle
N1 = 100;
particle1 = struct();
particle1.x = cumsum( randn(N1, 1) );
particle1.y = cumsum( randn(N1, 1) );
% Second Particle
N2 = 200;
particle2 = struct();
particle2.x = cumsum( randn(N2, 1) );
particle2.y = cumsum( randn(N2, 1) );
% Plot
figure;
hold on
plot(particle1.x, particle1.y, 'r');
plot(particle2.x, particle2.y, 'b');
ylabel('Y Position');
xlabel('X Position');
title('position versus time in 2D');
这给了我以下信息:
只是为了突出@RPM 的回答;这是一些代码,显示了从 (0,0) 连续发射 10 次独立粒子的动画:
close all; clear; clc;
N = 1e3; % Number of steps overall
Np = 10; % Number of diffusing particles
delay = 100; % Delay (in steps) between the launches
% Initialise particles at (0,0)
for k = 1:Np
particle(k).x = nan(N,1); particle(k).x(1) = 0; %#ok<SAGROW>
particle(k).y = nan(N,1); particle(k).y(1) = 0; %#ok<SAGROW>
end
% Take N-1 random steps
figure(1); axes;
for j = 2:N
for k = 1:ceil((j-1)./delay)
particle(k).x(j) = particle(k).x(j-1) + randn;
particle(k).y(j) = particle(k).y(j-1) + randn;
end
for k = (ceil((j-1)./delay)+1):Np
particle(k).x(j) = particle(k).x(j-1);
particle(k).y(j) = particle(k).y(j-1);
end
% Plot the step
plot(particle(1).x, particle(1).y); hold on;
for k = 2:Np
plot(particle(k).x, particle(k).y);
end
hold off;
axis equal;
title(sprintf('#%d',j));
drawnow; pause(0.01);
end
这只是为了演示。请使用@RPM 的代码 - rand(N,1)
而不是 for 循环!
正在研究一个构造二维布朗运动轨迹生成的MATLAB代码,from this link,给出为:
particle = struct();
particle.x = cumsum( randn(N, 1) );
particle.y = cumsum( randn(N, 1) );
plot(particle.x, particle.y);
ylabel('Y Position');
xlabel('X Position');
title('position versus time in 2D');
我想生成两个这样的布朗粒子,但有时间间隔,即假设一个粒子在“0”时间生成,而另一个粒子在时间 't' 生成。我不知道如何将其合并到此代码或其他代码中。有人可以帮忙吗?
以上脚本计算粒子在N
步后的位置。两个粒子之间的唯一区别是它们走了不同的步数。因此,您只需将 N
的不同值插入:
% First Particle
N1 = 100;
particle1 = struct();
particle1.x = cumsum( randn(N1, 1) );
particle1.y = cumsum( randn(N1, 1) );
% Second Particle
N2 = 200;
particle2 = struct();
particle2.x = cumsum( randn(N2, 1) );
particle2.y = cumsum( randn(N2, 1) );
% Plot
figure;
hold on
plot(particle1.x, particle1.y, 'r');
plot(particle2.x, particle2.y, 'b');
ylabel('Y Position');
xlabel('X Position');
title('position versus time in 2D');
这给了我以下信息:
只是为了突出@RPM 的回答;这是一些代码,显示了从 (0,0) 连续发射 10 次独立粒子的动画:
close all; clear; clc;
N = 1e3; % Number of steps overall
Np = 10; % Number of diffusing particles
delay = 100; % Delay (in steps) between the launches
% Initialise particles at (0,0)
for k = 1:Np
particle(k).x = nan(N,1); particle(k).x(1) = 0; %#ok<SAGROW>
particle(k).y = nan(N,1); particle(k).y(1) = 0; %#ok<SAGROW>
end
% Take N-1 random steps
figure(1); axes;
for j = 2:N
for k = 1:ceil((j-1)./delay)
particle(k).x(j) = particle(k).x(j-1) + randn;
particle(k).y(j) = particle(k).y(j-1) + randn;
end
for k = (ceil((j-1)./delay)+1):Np
particle(k).x(j) = particle(k).x(j-1);
particle(k).y(j) = particle(k).y(j-1);
end
% Plot the step
plot(particle(1).x, particle(1).y); hold on;
for k = 2:Np
plot(particle(k).x, particle(k).y);
end
hold off;
axis equal;
title(sprintf('#%d',j));
drawnow; pause(0.01);
end
这只是为了演示。请使用@RPM 的代码 - rand(N,1)
而不是 for 循环!