首页 > 编程知识 正文

matlab计算结果带e,模拟退火算法python

时间:2023-05-06 02:22:31 阅读:126401 作者:4576

蒙特卡罗方法是用野蛮粗暴的蛮力对抗精细数学的计算思维,可以将复杂的数学问题转化为简单粗暴的重复步骤,在工程上有很多应用。 用蒙特卡罗方法还计算了圆周率。 请看另一个博客。

zgdxg同济大学

蒙特卡罗方法计算自然常数e

蒙特卡罗方法计算自然常数e

原理

四边形的面积是积分后的值

原理:采用蒙特卡罗方法随机在左图矩形方格撒点,统计y=1/x内外点的个数,

根据几何概形,估算曲线下曲面四边形的面积。

另外,根据定积分可以计算出该部分的面积为ln2,即e** (推定的面积)==2,从而可以求出e。

散布点越多,e的计算值也越接近2.71828的真实值。

源代码

# zgdxg 2019-3-14

导入随机

import matplotlib.pyplot as plt

import numpy as np

DARTS=1024*1024 #总散布点的个数

counts=0 #曲线下下降的点数

e=0 # e的计算值

xs=[ 0,0 ]

ys=[ 0,0 ]

#开始画左图:散布点估计曲线下的面积

PLT.subplot(121 ) )。

x=NP.arange(0.5、2.5、0.001 ) )。

PLT.ylim (0,1.25 ) y轴坐标范围

PLT.xlabel(x ) ) # x轴标签

PLT.ylabel(y ) ) # y轴标签

绘制PLT.plot(x,1/x ) #反比例函数曲线

PLT.legend(loc=1) #在右上角添加图例

PLT.legend(['y=1/x'] ) #图例的内容

绘制PLT.plot ([ 1,1,2,2 ],[ 0,1,1,0 ],' r ',linewidth=0.2 ) #散布范围框

forIinrange(darts ) :

x=random.uniform (1,2 ) ) ) ) ) ) )。

y=random.uniform () 0,1 ) ) ) ) ) ) )。

if y 1/x: #点位于曲线下方

计数=1

PLT.subplot(121 ) )。

PLT.plot(x,y,' g.' ) )。

else: #点在曲线上

PLT.subplot(121 ) )。

PLT.plot(x,y,' r.' ) )。

if counts0:

e=pow(2,i/counts ) )。

#开始画右图: e的计算值与投掷次数的关系

PLT.subplot(122 ) )。

xs[0]=xs[1] #上一个e值和下一个e值通过xs和ys列表中的两个元素两点连接

xs[1]=i

ys[0]=ys[1]

ys[1]=e

PLT.ylim (0,4.5 ) # y轴坐标范围

PLT.xlabel('numberoftry ' ) # x轴标签

PLT.ylabel(estimationofe ) ) y轴标签

PLT.y ticks (NP.arange (0,4.5,0.5 ) ) y轴刻度线

PLT.title(e: ) :10f(ncount: ) ).format图中的标题将动态更新

绘制PLT.axhline(NP.e,linewidth=0.05,color='r ' ) 2.71828参考线

画出e的计算值随PLT.plot(xs,ys,' B- ',linewidth=0.3 ) #散布次数而变化的曲线

PLT.ion(#使图像保持交互式更新

控制PLT.Pause(0.2 )散布速度

可视化

蒙特卡罗方法计算自然常数e

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