python蒙特卡洛算法求积分_python中实现蒙特卡洛算法

本文介绍了如何使用Python的蒙特卡洛算法来求解圆周率和自然常数e。通过在直角坐标系中随机生成点并计算它们位于特定区域的比例,进而估算出π和e的值。具体实现包括从随机数生成到概率统计的过程,并提供了详细的代码示例。
摘要由CSDN通过智能技术生成

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值