【发布时间】:2021-03-17 21:51:41
【问题描述】:
扩散行为的特征是步行者在 t 步后到原点的距离平方的平均值与步数成正比。
对几个步行者和步长重复该过程(文本建议 500 个步行者和最多 100 个步骤),并绘制一个类似于教科书中的图表来确认这一点。还要确认这样一个图的斜率是 1,正如预测的那样。
我在 Python 中实现了以下代码,每次运行时,我得到的渐变都是想要的值的一半,但我找不到错误。此外,这是所需的graph,也是我的graph。谁能发现代码有什么问题?
import numpy as np
import matplotlib.pyplot as plt
nwalks=500
nsteps=100
x=np.zeros(nsteps)
x2avg=np.zeros(nsteps)
array=np.zeros((nwalks,nsteps))
for j in range(nwalks):
x2=np.zeros(nsteps)
for i in range(1,nsteps):
rnd=np.random.random()
if rnd<0.5:
x[i]=x[i-1]+1
else:
x[i]=x[i-1]-1
x2[i]=x[i]**2
x2avg[i]=(np.sum(x2))/(i+1)
array[j,i]=x2avg[i]
y=np.mean(array, axis=0)
i=np.arange(nsteps)
coeffs,cov=np.polyfit(i,y,1,cov=True)
grad=coeffs[0]
intercept=coeffs[1]
dgrad=np.sqrt(cov[0][0])
dintercept=np.sqrt(cov[1][1])
print(grad,dgrad)
f1=plt.figure(1)
plt.scatter(i,y,color='black',marker='.')
#generating a function of the form y=mx + c
func = np.poly1d(coeffs)
# Getting the trendline(y values)
trendline = func(i)
plt.plot(i,trendline, 'k')
【问题讨论】:
标签: python random-walk