我已经将x和y方向的布朗运动建模为随机游动。我已经在二维绘图上绘制了数据,但是虽然从原点开始追踪模拟粒子的路径并不那么困难,但我希望能够看到图形上直观表示的粒子路径的时间演变,无论是通过随时间改变线条的颜色,还是在绘图中添加第三维来表示时间,或者使用某种动态图形类型。
我没有尝试实现任何东西,但是我尝试着看看有什么可用的选项。如果可能的话,我想避免使用3D图。话虽如此,但在这种情况下,我愿意使用除matplotlib之外的其他方式(例如pyqtgraph)。
这是我的代码:
import random
import numpy as np
import matplotlib.pyplot as plt
#n is how many trajectory evaluations
n = 1000
t= np.linspace(0,10000,num=n)
def brownianMotion(time):
B = [0]
for t in range(len(time)-1):
nrand = random.gauss(0,(time[t+1] - time[t])**.5)
B.append(B[t]+nrand)
return B
xpath = brownianMotion(t)
ypath = brownianMotion(t)
def plot(x,y):
plt.figure()
xplot = np.insert(x,0,0)
yplot = np.insert(y,0,0)
plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
#np.arange(0,n+1),'go-', lw=1, ms = .1)
plt.xlim([-150,150])
plt.ylim([-150,150])
plt.title('Brownian Motion')
plt.xlabel('xDisplacement')
plt.ylabel('yDisplacement')
plt.show()
plot(xpath,ypath)
总而言之,这只是出于娱乐,而我在工作中很无聊。欢迎所有建议!谢谢您的时间!
请让我知道我是否应该发布代码输出的图片。
编辑:此外,如果我想在同一张图中表示多个粒子,我该怎么做,以便区分多个路径?我为此修改了我的代码,如下所示,但是目前此代码输出的是绿色的混乱粒子混合物。
import random
import numpy as np
import matplotlib.pyplot as plt
nparticles = 20
#n is how many trajectory evaluations
n = 100
t= np.linspace(0,1000,num=n)
def brownianMotion(time):
B = [0]
for t in range(len(time)-1):
nrand = random.gauss(0,(time[t+1] - time[t])**.5)
B.append(B[t]+nrand)
return B
xs = []
ys = []
for i in range(nparticles):
xs.append(brownianMotion(t))
ys.append(brownianMotion(t))
#xpath = brownianMotion(t)
#ypath = brownianMotion(t)
def plot(x,y):
plt.figure()
for xpath, ypath in zip(x,y):
xplot = np.insert(xpath,0,0)
yplot = np.insert(ypath,0,0)
plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
#np.arange(0,n+1),'go-', lw=1, ms = .1)
plt.xlim([np.amin(x),np.amax(x)])
plt.ylim([np.amin(y),np.amax(y)])
plt.title('Brownian Motion')
plt.xlabel('xDisplacement')
plt.ylabel('yDisplacement')
plt.show()
plot(xs,ys)