绘制布朗运动matlab

Plotting brownian motion matlab

首先,我只想说我不太习惯使用matlab,但我需要一个作业,我应该创建一个"brownian movement"。我的代码目前看起来像这样:

clf
hold on
prompt = 'Ge ett input';
size = input(prompt) ;
numParticles = input('Ange antal partiklar');
axis([-size size -size size]);
Part = [];
color = 'brkgmyco';
for i = drange(1:numParticles)
   Part = [Part [0;0]];
end
for i = drange(1:200)

    dxdy = randn(2,numParticles);
    k = Part
    Part = Part + dxdy;

我关心的是如何打印,我什至希望每次打印都有一个小的延迟,这样你就可以真正看到作业发生了什么,这是否可以从我现在编写的代码中实现,或者应该改变什么吗?提前致谢!

无论您尝试做什么,您的代码都有一些基本问题:

  1. 您使用 size 作为变量名。这样做会覆盖 MATLAB 的函数 size.
  2. 函数 zeros 创建一个由零初始化的数组,不需要循环。
  3. 不用在循环中计算randn 200次,你可以用dxdy = randn(2,numParticles,200)计算一次,然后在循环中简单地引用dxdy(:,:,i)
  4. 求和也一样。不要在循环内求和以获得累积和,而是使用 cumsumPart = cumsum(randn(2,numParticles,200),3); 然后在循环内引用 Part(:,:,i)

现在开始你的任务。你说你想知道如何打印,但我相信你想 plot 因为你使用了一些命令,如 axisclfhold , 指的是图形对象。但是,您从来没有真正绘制任何东西。
在 2D 中绘图的基本和通用函数是 plot, but there are many other more specific functions. One of them is scatter, and it has a sister function gscatter,它采用 xygroup 的三元组,并绘制每个 (x(k),y(k)) 并按其 group(k).

此代码在轴上绘制粒子,并为它们的运动设置动画:

prompt = 'Ge ett input';
scope = input(prompt) ;
numParticles = input('Ange antal partiklar');
N = 500;
Part = cumsum(randn(2,numParticles,N)*scope/100,3);
h = gscatter(Part(1,:,1),Part(2,:,1),1:numParticles);
axis([-scope scope -scope scope]);
legend off
for k = 2:N
    for p = 1:numParticles
        h(p).XData = Part(1,p,k);
        h(p).YData = Part(2,p,k);
    end
    drawnow
end

这是您要找的吗?