☰
蒙特卡洛投点法估算圆周率π
2026/10/10 6:59:06 网站建设 项目流程

简介:蒙特卡洛模拟实验,在正方形区域随机投放大量点,利用落在内切圆内的点数量估算圆周率π。测试N=1万、10万、100万,观察采样点数N和估算误差之间的关系。

实现思路

  1. 正方形范围x∈[-1,1],y∈[-1,1],正方形边长2,面积=4;内部内切圆半径为1,圆面积=π。

  2. 随机生成N个点, random.uniform(-1,1) 生成x、y坐标。

  3. 判断点是否落在圆内:x2+y2 \le1,统计圆内点数量M。

  4. 面积比例:圆面积/正方形面积 = π/4,所以 π≈4*M/N。

  5. 每组N重复运行5次,取平均值,降低随机波动带来的误差。

  6. 分别测试N=10000、100000、1000000,输出估算π值和与真实3.14159的误差。

踩坑点
循环嵌套层次混淆,重复次数写在最内层,统计逻辑出错。

完整代码
import random

def monte_carlo_pi(N, repeat=5):
total_pi =0
for _ in range(repeat):
m =0
for _ in range(N):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if xx + yy <= 1:
m +=1
pi_estimate = 4 * m / N
total_pi += pi_estimate
avg_pi = total_pi / repeat
error = abs(avg_pi - 3.14159)
return avg_pi, error

测试不同N

for n in [10000, 100000, 1000000]:
pi_val, err = monte_carlo_pi(n)
print(f"N={n:7d} 估算π={pi_val:.6f}, 误差={err:.6f}")

print(“\n思考题:N增大10倍,误差大约变为原来的 1/√10 ≈0.316(误差和√N成反比)”)

学习心得

蒙特卡洛是用随机采样去估算数值,核心是大数定律:采样数量越多,结果越接近真实值。我发现随机模拟有波动性,单次结果会有偏差,多次取平均可以减少波动。也理解了误差和采样数量的关系:采样扩大10倍,误差并不会直接缩小10倍,而是根号10倍。学会了用计算机模拟重复大量随机实验,这是很有意思的数值计算思想。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询