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

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山颠海涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值