python中实现蒙特卡洛算法

蒙特卡洛算法,是一种以概率统计理论为指导的一类非常的数值计算方法,是指使用随机数来解决很多计算问题的方法。

应用一:用蒙特卡洛算法求解圆周率

思路:在直角坐标系中选取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)

运行结果:

python中实现蒙特卡洛算法_第1张图片

对于更多产生随机数的方法可见链接:

http://blog.csdn.net/junli_chen/article/details/53666274

应用二:蒙特卡洛算法计算自然常数e

要求解自然常数e,就必须找到求解e的模型;下面提供一种求e的方法。

对于积分:的结果为ln2,其对应的图像大致如下:

python中实现蒙特卡洛算法_第2张图片

利用蒙特卡洛算法计算出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)

结果:

python中实现蒙特卡洛算法_第3张图片

相关算法的参考在如下链接中:

http://blog.csdn.net/ACdreamers/article/details/44978591

你可能感兴趣的:(算法)