简介蒙特卡洛模拟实验在正方形区域随机投放大量点利用落在内切圆内的点数量估算圆周率π。测试N1万、10万、100万观察采样点数N和估算误差之间的关系。实现思路正方形范围x∈[-1,1]y∈[-1,1]正方形边长2面积4内部内切圆半径为1圆面积π。随机生成N个点 random.uniform(-1,1) 生成x、y坐标。判断点是否落在圆内x2y2 \le1统计圆内点数量M。面积比例圆面积/正方形面积 π/4所以 π≈4*M/N。每组N重复运行5次取平均值降低随机波动带来的误差。分别测试N10000、100000、1000000输出估算π值和与真实3.14159的误差。踩坑点循环嵌套层次混淆重复次数写在最内层统计逻辑出错。完整代码import randomdef monte_carlo_pi(N, repeat5):total_pi 0for _ in range(repeat):m 0for _ in range(N):x random.uniform(-1,1)y random.uniform(-1,1)if xx yy 1:m 1pi_estimate 4 * m / Ntotal_pi pi_estimateavg_pi total_pi / repeaterror abs(avg_pi - 3.14159)return avg_pi, error测试不同Nfor n in [10000, 100000, 1000000]:pi_val, err monte_carlo_pi(n)print(fN{n:7d} 估算π{pi_val:.6f}, 误差{err:.6f})print(“\n思考题N增大10倍误差大约变为原来的 1/√10 ≈0.316误差和√N成反比”)学习心得蒙特卡洛是用随机采样去估算数值核心是大数定律采样数量越多结果越接近真实值。我发现随机模拟有波动性单次结果会有偏差多次取平均可以减少波动。也理解了误差和采样数量的关系采样扩大10倍误差并不会直接缩小10倍而是根号10倍。学会了用计算机模拟重复大量随机实验这是很有意思的数值计算思想。