1. 蒙特卡洛方法
蒙特卡洛是用“模拟”解决问题的方法。具体来说,需要解决的问题是估计参数,该参数是某一随机事件的某个统计值,通过“模拟”大量该随机事件的样本,根据样本估计待估参数。
举个例子帮助理解:
怎么利用蒙特卡洛方法估计$pi$?
如下图所示:
图中圆和正方形的面积比为:
\begin{equation*}
\frac{\pi r^2}{(2r)^2}=\frac{\pi}{4}
\end{equation*}
也就是说,只需要知道圆和它的外切正方形的面积比就可以求得 $\pi$。假设有这样的一个随机事件:
往正方形中撒入点,点落在正方形中的位置是均匀分布,随后计算有多少比例的点落入了圆中(根据距离圆心的距离判断),这个比例就是 $\frac{\pi}{4}$。
上述过程就是蒙特卡洛方法,有以下三方面的内容:
- 随机事件:正方形中撒入点;
- 根据随机事件的概率分布(均匀分布)模拟数据,生成样本;
- 根据样本的某统计值(在圆内的比例)估计待估参数 $pi$。
一般地,蒙特卡洛方法的三个步骤为:
- 构造概率过程:确定随机事件的概率分布,该随机事件的某统计量刚好是待估参数;
- 采样:根据随机事件的概率分布采样;
- 估计参数:根据采样的样本估算参数。
2. PYTHON实现
利用蒙特卡洛法估计 $pi$,代码如下:12345678import numpy as npn = 1000x = 2.0*np.random.random(size=n)-1.0y = 2.0*np.random.random(size=n)-1.0index = [i for i in range(n) if (x[i]**2+y[i]**2) <1]count = len(index)pi = 4.0*count/nprint("PI=%f" %pi)
随机模拟了1000个点,所得结果为:PI=3.164。
