homework [复制链接]
发表于 2025-9-21 22:42:35 | 显示全部楼层 |阅读模式
蒙特卡罗方法手搓图形
  1. import random
  2. import matplotlib.pyplot as plt
  3. def monte_carlo_circle(N):
  4.     count = 0  # 记录落在圆内的点的数量
  5.     x_in, y_in = [], []  # 存储圆内点的坐标
  6.     x_out, y_out = [], []  # 存储圆外点的坐标
  7.     for _ in range(N):
  8.         x = random.uniform(-1, 1)  # 在 [-1, 1] 范围内生成随机 x 坐标
  9.         y = random.uniform(-1, 1)  # 在 [-1, 1] 范围内生成随机 y 坐标
  10.         if x ** 2 + y ** 2 <= 1:  # 判断点是否在单位圆内(x² + y² ≤ 1)
  11.             count += 1
  12.             x_in.append(x)
  13.             y_in.append(y)
  14.         else:
  15.             x_out.append(x)
  16.             y_out.append(y)
  17.     # 计算单位圆面积(正方形面积为 4,通过比例估算圆面积)
  18.     estimated_area = 4 * count / N
  19.     # 可视化投点分布
  20.     plt.figure(figsize=(8, 8))
  21.     plt.scatter(x_in, y_in, c='blue', s=5, label='Inside Circle')
  22.     plt.scatter(x_out, y_out, c='red', s=5, label='Outside Circle')
  23.     circle = plt.Circle((0, 0), 1, color='green', fill=False, label='Unit Circle')
  24.     plt.gca().add_patch(circle)
  25.     plt.title(f"Monte Carlo Method for Unit Circle (N = {N}, Estimated Area = {estimated_area:.4f})")
  26.     plt.xlabel('X')
  27.     plt.ylabel('Y')
  28.     plt.legend()
  29.     plt.axis('equal')
  30.     plt.show()
  31. if __name__ == "__main__":
  32.     N = 10000  # 投点数量,可根据需要调整,数量越大估算越精确
  33.     monte_carlo_circle(N)
复制代码
运行结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表