绘制布朗运动matlab

时间:2016-09-22 07:05:43

标签: matlab matlab-figure scatter-plot

首先,我只是想说我不习惯使用matlab,但我需要一个任务,我应该创建一个"布朗运动" 。我的代码目前看起来像这样:

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 个答案:

答案 0 :(得分:0)

以下是您的代码的一些基本问题,无论您尝试做什么:

  1. 您使用size作为变量名称。这样做会覆盖MATLAB的函数size
  2. 函数zeros创建一个由零初始化的数组,不需要循环。
  3. 不是在循环中计算randn 200次,而是使用dxdy = randn(2,numParticles,200)进行一次,然后只需在循环中引用dxdy(:,:,i)
  4. 同样适用于求和。不要在循环中求和以获得累积总和,而是使用Part = cumsum(randn(2,numParticles,200),3);之类的cumsum,然后在循环内引用Part(:,:,i)
  5. 现在你的任务。你说你想知道如何打印,但我相信你想绘图,因为你使用了axisclfhold之类的命令图形对象。但是,你从来没有真正绘制任何东西 2D绘图的基本和一般功能是plot,但还有许多其他更具体的功能。其中一个是scatter,它有一个姐妹函数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
    

    这是你要找的吗?