You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重复随机游走模拟?修正代码并绘制多轨迹图表

随机游走代码修正与功能实现

你的代码主要存在两个核心问题:

  • 变量作用域错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:30:52