python蒙特卡洛算法求积分_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)

运行结果:

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

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

你可能感兴趣的:(python蒙特卡洛算法求积分)