如何在 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 循环!