首先,我只是想说我不习惯使用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;
我关心的是如何打印,我甚至想要在每个打印件上稍微延迟一下,所以你真的可以看到作业发生了什么,这是否可以通过我的代码来实现现在写的还是应该改变什么?提前谢谢!
答案 0 :(得分:0)
以下是您的代码的一些基本问题,无论您尝试做什么:
size
作为变量名称。这样做会覆盖MATLAB的函数size
。zeros
创建一个由零初始化的数组,不需要循环。randn
200次,而是使用dxdy = randn(2,numParticles,200)
进行一次,然后只需在循环中引用dxdy(:,:,i)
。Part = cumsum(randn(2,numParticles,200),3);
之类的cumsum
,然后在循环内引用Part(:,:,i)
。现在你的任务。你说你想知道如何打印,但我相信你想绘图,因为你使用了axis
,clf
和hold
之类的命令图形对象。但是,你从来没有真正绘制任何东西
2D绘图的基本和一般功能是plot
,但还有许多其他更具体的功能。其中一个是scatter
,它有一个姐妹函数gscatter
,它需要x
,y
和group
三元组并绘制每个(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
这是你要找的吗?