引言
在数学、物理和工程领域,我们常遇到无法用解析法求解的难题。高维积分、随机过程估计或是复杂系统模拟,传统数值方法往往力不从心。这时候,蒙特卡罗方法(Monte Carlo Methods)就登场了。它不追求精确的公式推导,而是通过大量的随机抽样来逼近问题的解。
核心原理
蒙特卡罗方法的核心思想其实很简单:利用随机性解决确定性或概率性问题。想象一下你要计算一个不规则图形的面积,直接算很难,但如果你往包含该图形的矩形里随机撒点,统计落在图形内的点的比例,就能估算出面积。这就是大数定律的应用——样本量足够大时,频率趋近于概率。
实战案例:估算圆周率 π
为了让大家更直观地理解,我们用经典的'投针'问题变体——估算圆周率 π 来写一段 Python 代码。
思路分析
我们在单位正方形内随机生成点,这些点落在四分之一圆内的概率等于圆的面积除以正方形面积,即 $\frac{\pi r^2}{(2r)^2} = \frac{\pi}{4}$。因此,$\pi \approx 4 \times \frac{\text{圆内点数}}{\text{总点数}}$。
代码实现
import random
import math
def estimate_pi(num_samples):
"""
使用蒙特卡罗方法估算圆周率
:param num_samples: 采样次数
:return: 估算值
"""
inside_circle = 0
for _ in range(num_samples):
# 生成 [0, 1] 之间的随机坐标
x = random.random()
y = random.random()
# 判断点是否在单位圆内 (x^2 + y^2 <= 1)
if x**2 + y**2 <= 1:
inside_circle += 1
return 4 * inside_circle / num_samples
if __name__ == "__main__":
samples = 1000000
result = estimate_pi(samples)
print(f"采样次数:{samples}")
print(f"估算结果:{result}")
print(f"真实值:{math.pi}")
print(f"误差:{(result - math.pi)}")

