首页 > 编程知识 正文

python做蒙特卡洛模拟,python中实现蒙特卡洛算法

时间:2023-05-06 21:26:12 阅读:47890 作者:3266

蒙特卡罗算法是指导概率统计理论的非常数值计算法,是用随机数解决许多计算问题的方法。

应用1 :用蒙特卡罗算法求解圆周率

想法:在直角坐标系中选择x [-1,1 ],y [-1,1 ]的正方形区域,其内切圆是以原点为圆的中心,以1为半径的单位圆。 在该矩形区域随机产生多个点,通过判断这些点在圆内的比例来得到圆周率。

实现代码:

来自随机导入*

来自匹配导入*

times=100000

计数=0

forIinrange(times ) :

x=统一(-1,1 ) #生成介于(-1,1 )之间的随机浮点数

y=统一(-1,1 ) ) ) ) ) )。

if x*x y*y=1:#计数圆内的点

计数=1

pi=count * 4.0/times #此时圆的面积为的值,面积等于矩形的面积乘以比例值而得到的值

是打印(pi )

执行结果:

有关生成随机数的信息,请参见链接。

3358 blog.csdn.net/junli _ Chen/article/details/53666274

应用2 :蒙特卡罗算法计算自然常数e

求解自然常数e,必须找到求解e的模型; 求出e的方法如下所示。

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

用蒙特卡罗算法计算a的面积,假设总共有m个随机数,阴影部分的有n个,则a的面积为n/m*1。 如果实验数据量大,应该有n/m=ln2。 转换后可得到自然常数e=2^(m/n )。

因此,求解e的python实现代码如下所示:

来自随机导入*

来自匹配导入*

times=1000000

计数=0

forIinrange(times ) :

x=统一(1,2 )生成) 1,2 )之间的随机浮点数

y=统一(0,1 ) ) )。

if x*y1:

计数=1

(E1=pow(2,times/count ) # e=2^ (m/n ) ) ) ) ) ) ) )

打印(E1 )。

结果:

相关算法的参考可在以下链接中找到:

3358 blog.csdn.net/AC dreamers/article/details/44978591

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。