如何重复随机游走模拟?修正代码并绘制多轨迹图表
随机游走代码修正与功能实现
你的代码主要存在两个核心问题:
- 变量作用域错误:
randomwalk()函数内部的x、y是局部变量,外部无法直接访问,你调用函数时没有接收返回值,导致后续计算距离时报错 - 绘图逻辑问题:当前绘图函数重复调用
randomwalk(),且只绘制了单条轨迹,没有循环生成并绘制20条路径
修正后的完整代码
import matplotlib.pyplot as plt import numpy as np import math def randomwalk(): n = 1000 x = np.zeros(n) y = np.zeros(n) for i in range(1, n): theta = 2.0 * np.pi * np.random.rand() x[i] = x[i-1] + math.cos(theta) y[i] = y[i-1] + math.sin(theta) return x, y # 计算20次随机游走的平均终点距离 sum_distance = 0 num_walks = 20 # 初始化绘图 plt.title("20 Random Walk Trajectories") for _ in range(num_walks): # 接收函数返回的轨迹数据 x, y = randomwalk() # 计算当前轨迹的终点到原点的距离 distance = math.sqrt(x[-1]**2 + y[-1]**2) sum_distance += distance # 绘制当前轨迹(设置透明度避免重叠遮挡) plt.plot(x, y, alpha=0.6) # 计算并打印平均距离 average_distance = sum_distance / num_walks print(f"20次随机游走的平均终点距离: {average_distance:.2f}") # 显示所有轨迹 plt.show()
关键修正点说明
- 接收函数返回值:每次调用
randomwalk()时,用x, y = randomwalk()接收生成的轨迹数据,确保能在函数外部使用这些变量 - 平均距离计算逻辑:在循环中,每生成一条轨迹就计算其终点到原点的距离,累加到总和,最后求平均值
- 批量绘图实现:在同一个循环里完成轨迹生成、距离计算和绘图,用
alpha=0.6设置轨迹透明度,避免多条轨迹重叠时难以区分 - 变量命名优化:把
sum改成sum_distance,避免和Python内置函数sum()重名;num改成num_walks,让变量名更具可读性 - 简化索引:用
x[-1]和y[-1]代替x[n-1]和y[n-1],直接获取数组最后一个元素(即终点坐标),代码更简洁
内容的提问来源于stack exchange,提问作者stackmath
相关产品推荐
相关产品推荐

