蒙特卡洛
蒙特卡洛可以用随机数的应用来解释,是通过随机采样来计算或模拟给定过程。
经典实例就是用蒙特卡洛估计 pi
- 在边长为 2R 的正方形内随机撒 N 点
- 在正方形内画一个半径为 R 的圆,计算在圆内的点的个数
- 得出的估计值
注意如果一个点满足下面条件,我们就认为点位于圆内
正方形的面积是,圆的面积是 因此两者的面积之比 而圆和正方形面积分别正比圆内点的个数和总的点数 N。
下面我们通过代码来实现蒙特卡洛计算值的过程,同时计算估计值和实际值之间的误差。
N = 10000
x,y = np.random.uniform(-1,1,size=(2,N))
inside = (x**2 + y**2) <=1
pi = inside.sum()*4/N
error = abs((pi - np.pi)/pi) * 100
outside = np.invert(inside)
plt.plot(x[inside],y[inside],'b.')
plt.plot(x[outside],y[outside],'r.')
plt.plot(0,0,label='$\hat \pi$ = {:4.3f} \n error={:4.3f}%'.format(pi,error),alpha=0)
plt.axis('square')
plt.legend(frameon=True, framealpha=0.9,fontsize=16)
图
网友评论