绘制布朗运动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;
我关心的是如何打印,我什至希望每次打印都有一个小的延迟,这样你就可以真正看到作业发生了什么,这是否可以从我现在编写的代码中实现,或者应该改变什么吗?提前致谢!
无论您尝试做什么,您的代码都有一些基本问题:
- 您使用
size
作为变量名。这样做会覆盖 MATLAB 的函数 size
.
- 函数
zeros
创建一个由零初始化的数组,不需要循环。
- 不用在循环中计算
randn
200次,你可以用dxdy = randn(2,numParticles,200)
计算一次,然后在循环中简单地引用dxdy(:,:,i)
。
- 求和也一样。不要在循环内求和以获得累积和,而是使用
cumsum
像 Part = cumsum(randn(2,numParticles,200),3);
然后在循环内引用 Part(:,:,i)
。
现在开始你的任务。你说你想知道如何打印,但我相信你想 plot 因为你使用了一些命令,如 axis
、clf
和 hold
, 指的是图形对象。但是,您从来没有真正绘制任何东西。
在 2D 中绘图的基本和通用函数是 plot
, but there are many other more specific functions. One of them is scatter
, and it has a sister function 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
这是您要找的吗?
首先,我只想说我不太习惯使用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;
我关心的是如何打印,我什至希望每次打印都有一个小的延迟,这样你就可以真正看到作业发生了什么,这是否可以从我现在编写的代码中实现,或者应该改变什么吗?提前致谢!
无论您尝试做什么,您的代码都有一些基本问题:
- 您使用
size
作为变量名。这样做会覆盖 MATLAB 的函数size
. - 函数
zeros
创建一个由零初始化的数组,不需要循环。 - 不用在循环中计算
randn
200次,你可以用dxdy = randn(2,numParticles,200)
计算一次,然后在循环中简单地引用dxdy(:,:,i)
。 - 求和也一样。不要在循环内求和以获得累积和,而是使用
cumsum
像Part = cumsum(randn(2,numParticles,200),3);
然后在循环内引用Part(:,:,i)
。
现在开始你的任务。你说你想知道如何打印,但我相信你想 plot 因为你使用了一些命令,如 axis
、clf
和 hold
, 指的是图形对象。但是,您从来没有真正绘制任何东西。
在 2D 中绘图的基本和通用函数是 plot
, but there are many other more specific functions. One of them is scatter
, and it has a sister function 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
这是您要找的吗?