蒙特卡罗算法是指导概率统计理论的非常数值计算法,是用随机数解决许多计算问题的方法。
应用1 :用蒙特卡罗算法求解圆周率
想法:在直角坐标系中选择x [-1,1 ],y [-1,1 ]的正方形区域,其内切圆是以原点为圆的中心,以1为半径的单位圆。 在该矩形区域随机产生多个点,通过判断这些点在圆内的比例来得到圆周率。
实现代码:
来自随机导入*
来自匹配导入*
times=100000
计数=0
forIinrange(times ) :
x=统一(-1,1 ) #生成介于(-1,1 )之间的随机浮点数
y=统一(-1,1 ) ) ) ) ) )。
if x*x y*y=1:#计数圆内的点
计数=1
pi=count * 4.0/times #此时圆的面积为的值,面积等于矩形的面积乘以比例值而得到的值
是打印(pi )
执行结果:
有关生成随机数的信息,请参见链接。
3358 blog.csdn.net/junli _ Chen/article/details/53666274
应用2 :蒙特卡罗算法计算自然常数e
求解自然常数e,必须找到求解e的模型; 求出e的方法如下所示。
积分:的结果为ln2,对应的图像大致如下。
用蒙特卡罗算法计算a的面积,假设总共有m个随机数,阴影部分的有n个,则a的面积为n/m*1。 如果实验数据量大,应该有n/m=ln2。 转换后可得到自然常数e=2^(m/n )。
因此,求解e的python实现代码如下所示:
来自随机导入*
来自匹配导入*
times=1000000
计数=0
forIinrange(times ) :
x=统一(1,2 )生成) 1,2 )之间的随机浮点数
y=统一(0,1 ) ) )。
if x*y1:
计数=1
(E1=pow(2,times/count ) # e=2^ (m/n ) ) ) ) ) ) ) )
打印(E1 )。
结果:
相关算法的参考可在以下链接中找到:
3358 blog.csdn.net/AC dreamers/article/details/44978591