使用Python函数模拟随机游走
随机游走是一个表示随机漫步的数学模型,通常用来描述不确定性的行为,例如粒子在气体中的移动、金融市场的波动、易感人群的疫情传播、基因序列的演化等。在这篇文章中,我们将使用Python函数模拟随机游走并进行可视化展示。
先来看一下随机游走的模型。假设一个粒子在一个无限大的网格中随机地在上下左右四个方向中选择一个方向并向该方向移动一个格子单位。可以将网格看作一个二维坐标系,那么该粒子在n步后一共有$4^n$种不同的行进可能性。但在我们Python模拟中,我们只考虑每步的概率是均等的,因此我们只关注粒子向上移动、向下移动、向左移动、向右移动的概率各为1/4。
为了记录粒子的位置,我们使用一个二元组(x, y)来表示粒子在网格中的位置,其中x和y分别表示水平、垂直方向上的位置,例如(0, 0)表示粒子初始的位置。下面是我们将使用的Python代码:
import random
def random_walk(n):
x, y = 0, 0
for i in range(n):
dx, dy = random.choice([(0, 1), (0, -1), (1, 0), (-1, 0)])
x += dx
y += dy
return (x, y)
这个随机游走模型中有一个很重要的点:每一步的方向都是随机的。在代码中,我们使用了Python标准库的random模块来进行随机选择。在每一步中,我们使用random.choice()函数从选项列表中随机取出一项作为粒子的方向。选项列表中的四个元素分别表示粒子向上、下、左、右移动的方向。例如,(0, 1)表示向上移动一个格子单位,(0, -1)表示向下移动一个格子单位,(1, 0)表示向右移动一个格子单位,(-1, 0)表示向左移动一个格子单位。
随机游走的结果是一个随机变量,因此我们可以做多次实验来观察其统计规律。下面是一个简单的蒙特卡罗模拟:
import matplotlib.pyplot as plt
def run_simulation(n, trials):
x_sum, y_sum = 0, 0
for i in range(trials):
x, y = random_walk(n)
x_sum += x
y_sum += y
x_avg = x_sum / trials
y_avg = y_sum / trials
plt.plot(x_avg, y_avg, "bo")
plt.xlim(-n, n)
plt.ylim(-n, n)
plt.title("Random Walk Simulation (%d steps)" % n)
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
run_simulation(1000, 1000)
在这个蒙特卡罗模拟中,我们运行了1000次步数为1000的随机游走,并取每次随机游走的终点的坐标求其平均值。运行结果如下图所示:

从图中可以看出,粒子的位置在(0, 0)周围随机地游走。无论从水平方向还是垂直方向看,粒子的位置变化都大致符合正态分布。这是因为在随机游走的过程中,粒子在所有可能的方向上行进的概率都是相等的,因此其最终的位置符合一个类似于正态分布的概率分布。
总的来说,我们使用Python函数模拟了随机游走,并且进行了可视化展示。通过多次实验的蒙特卡罗模拟,我们观察到了随机游走在二维平面上的随机性和规律性,并且展现了统计规律与概率分布的关系。除了随机游走,Python的模拟方法同样适用于其他的物理、生物和社会科学问题中的数学模型。
