蒙特卡罗方法手搓图形- import random
- import matplotlib.pyplot as plt
- def monte_carlo_circle(N):
- count = 0 # 记录落在圆内的点的数量
- x_in, y_in = [], [] # 存储圆内点的坐标
- x_out, y_out = [], [] # 存储圆外点的坐标
- for _ in range(N):
- x = random.uniform(-1, 1) # 在 [-1, 1] 范围内生成随机 x 坐标
- y = random.uniform(-1, 1) # 在 [-1, 1] 范围内生成随机 y 坐标
- if x ** 2 + y ** 2 <= 1: # 判断点是否在单位圆内(x² + y² ≤ 1)
- count += 1
- x_in.append(x)
- y_in.append(y)
- else:
- x_out.append(x)
- y_out.append(y)
- # 计算单位圆面积(正方形面积为 4,通过比例估算圆面积)
- estimated_area = 4 * count / N
- # 可视化投点分布
- plt.figure(figsize=(8, 8))
- plt.scatter(x_in, y_in, c='blue', s=5, label='Inside Circle')
- plt.scatter(x_out, y_out, c='red', s=5, label='Outside Circle')
- circle = plt.Circle((0, 0), 1, color='green', fill=False, label='Unit Circle')
- plt.gca().add_patch(circle)
- plt.title(f"Monte Carlo Method for Unit Circle (N = {N}, Estimated Area = {estimated_area:.4f})")
- plt.xlabel('X')
- plt.ylabel('Y')
- plt.legend()
- plt.axis('equal')
- plt.show()
- if __name__ == "__main__":
- N = 10000 # 投点数量,可根据需要调整,数量越大估算越精确
- monte_carlo_circle(N)
复制代码 运行结果:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |