我们在这里介绍了如何利用蒲丰投针问题估计 π \pi π,我们再介绍另外一种方法,本质上都一样,都是利用Monte Carlo方法。
如图,随机向一个边长为
1
1
1的正方形里投
n
n
n个豆子,假设其中有
k
k
k个落在了
1
4
\frac{1}{4}
41单位圆中,即图中红色的点。那么根据几何概率,有
k
n
=
π
4
1
\frac{k}{n}=\frac{\frac{\pi}{4}}{1}
nk=14π,从而有
π
=
4
k
n
\pi=\frac{4k}{n}
π=n4k。
用Python实现:
import numpy as np
def get_pi(n):
"""
:param n: 实验次数
:return: π的估计值
"""
#获得n个服从均匀分布U(0, 1)的随机数X, Y
X = np.random.uniform(0, 1, n)
Y = np.random.uniform(0, 1, n)
#实验成功的次数,用向量形式实现,比用for循环要快的多,特别是n很大的时候
k = np.sum(X ** 2 + Y ** 2 <= 1)
#得到π的估计并返回
pi = 4 * k / n
return pi
print(get_pi(10000))
输出:3.1424
输出结果和我们熟知的3.1415926差的较多,是因为我们只模拟了10000次实验,可以增加实验次数来减少误差