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

张子豪 同济大学

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

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

原理

曲面四边形面积即为积分之后的值

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

由几何概型,估算出曲线下曲面四边形的面积。

同时,由定积分可算出这部分面积为ln2,即e**(估算出的面积)== 2,即可求出e。

撒点越多,e的计算值也越来越趋近2.71828的真实值。

源代码

# 张子豪 2019-3-14

import random

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) # 绘制撒点范围框

for i in range(DARTS):

x = random.uniform(1,2)

y = random.uniform(0,1)

if y < 1/x: # 点落在曲线下方

counts += 1

plt.subplot(121)

plt.plot(x,y,'g.')

else: # 点落在曲线上方

plt.subplot(121)

plt.plot(x,y,'r.')

if counts>0:

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('Number of try') # x轴标签

plt.ylabel('Estimation of e') # y轴标签

plt.yticks(np.arange(0,4.5,0.5)) # y轴刻度线

plt.title('e:{:.10f}\ncount:{}'.format(e,i)) # 图的标题动态更新

plt.axhline(np.e,linewidth=0.05,color='r') # 绘制2.71828参考线

plt.plot(xs,ys,'b--',linewidth=0.3) # 绘制e的计算值随撒点次数变化的曲线

plt.ion() # 保持图像处于交互更新状态

plt.pause(0.2) # 控制撒点速度

可视化

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

python中e怎么计算_蒙特卡洛法计算自然常数e——python编程及可视化相关推荐

  1. python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用

    原标题:六招教你用Python分分钟构建好玩的深度学习应用 导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测 ...

  2. python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理

    一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...

  3. python中exception类的_面试题 | 列举几个Python中的标准异常类?

    [摘要]今天给大家解答一道Python常见的面试题,希望这个面试栏目,给那些准备面试的同学,提供一点点帮助!小编会从最基础的面试题开始,每天一题.如果参考答案不够好,或者有错误的话,麻烦大家可以在留言 ...

  4. python中ht表示什么_如何看待某国内大公司Python面试题,有关dict中初始化为固定值?...

    职业发展 Python 如何看待某国内大公司Python面试题,有关dict中初始化为固定值? 阅读下面的代码,写出A0,A1至A6的最终值. A0 = dict(zip(('a','b','c',' ...

  5. python中什么是异常_一文教你读懂 Python 中的异常信息

    在写 Python 代码的时候,当代码中出现错误,会在输出的时候打印 Traceback  错误信息,很多初学者看到那一堆错误信息,往往都会处于懵逼状态,脑中总会冒出一句,这都是些啥玩意.如果你是第一 ...

  6. python中 和 的区别_举例子让你明白python中is和==的区别

    在说 is 和 == 的区别之前,我们先理解下python的变量.python的变量和java的变量有很大的区别,因为一个是动态语言,另一个是静态语言. java的变量就像是个盒子,是把对象的地址装进 ...

  7. python中的标准输入设备_从MIDI设备获取输入(Python)

    PyGame包含一个内置的 midi module,可用于Linux,Windows和MacOS,并得到很好的支持. Input is used to get midi input from midi ...

  8. python中算法与数学_中国古代数学算法的Python实现

    看了这篇<没有定理的中国古代数学,如何站在世界之巅?>.虽然我觉得题目很标题党,不过里面的内容很有趣啊,讲解了中国古代数学里的几个算法.由于我正在学Python,所以自然就拿来练手了. 可 ...

  9. python中uss的用法_使用不同内存ussag管理Python多进程进程进程

    我认为试图捕捉并从OOM错误中恢复是非常困难的,如果不是不可能的话.你需要一个线程或进程来持续监控内存使用情况,当它检测到内存使用量太高时,会--确切地说是什么?终止正在处理任务的进程?尝试暂停它(如 ...

  10. python基础教程:Python中利用sqrt()方法进行平方根计算的教程

    这篇文章主要介绍了Python中利用sqrt()方法进行平方根计算的教程,是Python学习的基础知识,需要的朋友可以参考下 sqrt()方法返回x的平方根(x>0). 语法 以下是sqrt() ...

最新文章

  1. Element-ui表格选中回显
  2. Xara Designer Pro中文版
  3. 深度学习在搜索和推荐领域的应用
  4. python语言特性-------python2.7教程学习【廖雪峰版】(一)
  5. java c 客户端_java基于C/S模式实现聊天程序(客户端)
  6. Tomcat服务脚本
  7. 无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
  8. 16岁学计算机,16岁学生能学计算机吗
  9. 基于java的线上购物系统的设计与实现_基于javaweb的在线购物系统的设计与实现...
  10. 三级数据库考mysql_计算机三级MySQL数据库试题及答案
  11. android打开iso,安卓手机端如何运行iso镜像文件
  12. transition参数css,css3的transition属性详解
  13. 腾讯互娱开源分布式开发框架Pebble
  14. mtk处理器和骁龙对比_3500元以内手机的绝杀?首款MTK 天玑1000处理器手机IQOO Z发布...
  15. 面试被问离职原因,别乱说
  16. 当今十大备份应用软件
  17. #38 WARNING(SPCODD-38): ERROR(SPCODD-47):
  18. MD5单向散列算法详解
  19. 计算机教育学校排名,教育知识:2020全国最好的计算机专业学校排名
  20. Android性能优化之工具篇 — — 开发者选项

热门文章

  1. 我用数据分析,揭开了中国男篮最后的遮羞布
  2. 苹果也被撕下遮羞布,iPhone14后继乏力,靠十三香维持销量
  3. CImage::Loda 方法加载图片失败,因为vs2013中该方法不支持中文变量
  4. 世上只有妈妈好计算机怎么谈音乐,世上只有妈妈好的音乐教案
  5. 什么是数据科学家与数据科学
  6. 智慧高铁、智慧机场对护照阅读器的应用 SDK说明
  7. ODL Transaction
  8. 幼儿园计算机基础知识,幼儿园大班计算机教学计划
  9. ubuntu mysql 默认安装路径_ubuntu安装mysql并修改默认目录
  10. html5网页特效-水墨动画