蒙特卡洛算法,是一种以概率统计理论为指导的一类非常的数值计算方法,是指使用随机数来解决很多计算问题的方法。
应用一:用蒙特卡洛算法求解圆周率
思路:在直角座标系中选取x[-1,1],y[-1,1]的正方形区域,其内接圆是以原点为圆心,1为半径的单位圆。在这一矩形区域中随机产生大量的点,判断这些点在圆内的比例,以此来得到圆周率。
实现代码:
from random import *
from math import *
times = 100000
count = 0
for i in range(times):
x = uniform(-1,1) #产生(-1,1)之间的随机浮点数
y = uniform(-1,1)
if x*x + y*y <=1: #统计在圆内的点
count += 1
pi = count * 4.0 / times #此时圆的面积就是π的值,面积等于矩形面积乘于比例值
print(pi)
运行结果:
对于更多产生随机数的方法可见链接:
http://blog.csdn.net/junli_chen/article/details/53666274
应用二:蒙特卡洛算法计算自然常数e
要求解自然常数e,就必须找到求解e的模型;下面提供一种求e的方法。
对于积分:的结果为ln2,其对应的图像大致如下:
利用蒙特卡洛算法计算出A的面积,假设总共有m个随机数,在阴影部分的有n个,那么A的面积为n/m*1。在实验数据量很大时,应该有n/m=ln2. 经过转换可得到自然常数e = 2^(m/n).
所以求解e的python实现代码如下:
from random import *
from math import *
times = 1000000
count = 0
for i in range(times):
x = uniform(1,2) #产生(1,2)之间的随机浮点数
y = uniform(0,1)
if x*y<1:
count += 1
e1 = pow(2,times/count) # e = 2^(m/n)
print(e1)
结果:
相关算法的参考在如下链接中:
http://blog.csdn.net/ACdreamers/article/details/44978591