首页 > 解决方案 > 绘制二维随机游走的均方位移作为 δt 的函数

问题描述

我已经为 10000 步的随机游走创建了一个代码,然后重复了 12 次,并将每次运行存储在一个单独的文本文件中(这是问题所必需的)。然后我计算了它的均方位移(不确定它是否正确)。我现在需要“将我的均方位移绘制为 δt 的函数,包括误差线 σ = std(MSD)/√N,其中 std(MSD) 是不同运行之间的标准偏差,N 是运行次数。” 然后根据曲线计算扩散常数 D 并检查 D = 2 (Δ/dt),其中 dt = 1。

到目前为止,这是我的代码:

import numpy as np 
import matplotlib.pyplot as plt
import random as rd
import math

a = (np.zeros((10000, 2), dtype=np.float))  
     
def randwalk(x,y):
     theta= 2*math.pi*rd.random() 
     x+=math.cos(theta); # This uses the equation given, since we are told the spatial unit = 1
     y+=math.sin(theta); 
     return (x,y)
     
x, y = 0.,0.  
for i in range(10000): # Using for loop and range function to initialize the array
     x, y = randwalk(x,y)
     a[i,:] = x,y
     

fn_base = "random_walk_%i.txt" # Saves each run in a numbered text file, fn_base is a varaible to hold format

N = 12
for j in range(N): 
    rd.seed(j) # seed(j) explicitly sets the seed to random numbers
    x , y = 0., 0.
    for i in range(10000):
        x, y = randwalk(x,y)
        a[i,:] = x, y
    fn = fn_base % j
    np.savetxt(fn, a)

destinations = np.zeros((12, 2), dtype=np.float)
for j in range(12):
    x, y = 0., 0.
    for i in range(10000):
        x, y = randwalk(x, y)
    destinations[j] = x, y

square_distances = destinations[:,0] ** 2 + destinations[:,1] ** 2
m_s_d = np.mean(square_distances)

我认为要做到这一点,我只需要根据步数绘制 msd?但我不知道该怎么做。我在 stackoverflow 上看到了一个类似的问题,但它的代码与我的不同,我不明白如何将它用于我的代码。

我试着做下一步

plt.figure()
t = 10000
plt.plot(m_s_d, t) 
plt,show()

但这会产生错误,因为尺寸不相等。

编辑**我认为我的问题是我试图根据时间变化来绘制它的步数。但是我不知道如何计算时间 dt 的变化?

提前道歉是问题没有很好地表达,我对计算还很陌生。谢谢你。

标签: pythonnumpymatplotlibrandom-walk

解决方案


推荐阅读