python - 绘制二维随机游走的均方位移作为 δ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 的变化?
提前道歉是问题没有很好地表达,我对计算还很陌生。谢谢你。
解决方案
推荐阅读
- java - ArrivalEvent.java:6:错误:类 Event 中的构造函数事件不能应用于给定类型;
- java - Java15 fx15,使用 jpackage、maven、shaded 非模块化 .jar 运行良好!但安装运行 pkg - 应用程序说旧 JRE,java mongo 驱动程序异常
- windows-runtime - .NET 5、WinUI 3 和 WinRT API 可用于桌面应用程序
- python - Toggle tkinter window visibility
- google-cloud-platform - 使用 Google 网上论坛访问 BigQuery
- mysql - 如何在递归查询中按变量排序并返回正确的顺序?
- gcc - .scat 文件和 .ld 文件之间的区别
- java - 我怎样才能找到索引值,或者即使某个字符串存在于数组中
- sql - 包含不匹配记录的联接
- spring-boot - 持久化/Spring Boot 查找页面和条件组合