本篇简要介绍一下蒙特卡洛算法的思想以及通过两个实例简要介绍一下蒙特卡洛算法的python实现。

一.蒙特卡洛算法
1.蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛.
提出:
蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国数学家布丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π。这被认为是蒙特卡罗方法的起源。
2.基本思想
当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
工作过程
蒙特卡罗方法的解题过程可以归结为三个主要步骤:构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。
蒙特卡罗方法解题过程的三个主要步骤:
(1)构造或描述概率过程
对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过 程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
(2)实现从已知概率分布抽样
构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。
(3)建立各种估计量
一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。
数学应用:通常蒙特·卡罗方法通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到解析解或者根本没有解析解的问题,蒙特·卡罗方法是一种有效的求出数值解的方法。一般蒙特·卡罗方法在数学中最常见的应用就是蒙特·卡罗积分。

二.蒙特卡洛算法与python实例

1.首先看一个经典的蒙特卡洛方法求圆周率

基本思想:在图中区域产生足够多的随机数点,然后计算落在圆内的点的个数与总个数的比值再乘以四,就是圆周率。

代码实现:

M = input('请输入一个较大的整数')  #输入的数一般要很大才能保证所求结果不会与圆周率产生较大误差
N=0                              #累计落在园内的随机点的个数,初始值为零import math
import randomfor i in range(int(M)):x = random.random()          #利用random()产生随机数或者是伪随机数y = random.random()if math.sqrt(x**2+y**2)<1:   #判断产生的随机点是否落在单位圆内N = N+1                  #对落在圆内的点进行累加pi=4*N/int(M)print(pi)

以下是小编运行一次的结果:

D:\PYTHON\pychrm\mypro01\venv\Scripts\python.exe D:/PYTHON/pychrm/mypro01/mypython01.py
请输入一个较大的整数1000000
3.141004Process finished with exit code 0

可以看到,所得结果还是和圆周率很接近的。

2.python计算定积分

利用python计算函数y=x**2在[0,1]区间的定积分,其思想和上例是一样的,就不再赘述。

代码实现:

n=int(input('请输入一个较大的整数'))   #要确保输入的整数足够大m=0                                  import randomfor i in range(n):x = random.random()              y = random.random()if x**2>y:                       #表示该点位于曲线y=x^2的下面m=m+1R=m/nprint(R)

以及运行结果:

D:\PYTHON\pychrm\mypro01\venv\Scripts\python.exe D:/PYTHON/pychrm/mypro01/蒙特卡洛算法计算积分.py
请输入一个较大的整数100000
0.33266Process finished with exit code 0

最终结果还是很接近理论结果的。

蒙特卡洛算法简介及其python实现相关推荐

  1. 各项异性扩散(Anisotropic diffusion)--算法简介(python)代码实现

    各项异性扩散(Anisotropic diffusion)–算法简介(python)代码实现 学习博文 https://blog.csdn.net/qq_38784098/article/detail ...

  2. python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验

    用Python实现基于蒙特卡洛算法小实验 蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯· 诺伊曼 ,他在20世纪40年代中期用驰名世界的赌城- ...

  3. BUC算法简介与python实现

    冰山立方体这里听的不是很明白,BUC算法也是有点懵,借着实验也整理一下思路吧. 一.冰山立方体与BUC算法简介 1. 冰山立方体 2. BUC算法 算法简介 算法流程 举例 二.代码实现 1. 输入数 ...

  4. nmf算法 python_NMF算法简介及python实现

    [ pca算法用于原始数据维数较高时对数据进行降维 关于pca算法的学习,有一篇分析特别详细的论文http://www.cs.otago.ac.nz/cosc453/student_tutorials ...

  5. Python:蒙特卡洛算法以及三门问题

    蒙特卡洛算法: 一 .蒙特卡洛算法简介 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,它是一种思想或者方法的统称,而不是严格意义上的算法.蒙特卡罗方法的起源是1777年由法 ...

  6. Python数学建模系列(六):蒙特卡洛算法

    文章目录 前言 往期文章 1.蒙特卡洛算法 样例1 样例2 样例3 2.三门问题 3.M*M豆问题 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   ...

  7. 马尔科夫链蒙特卡洛算法(python)

    文章目录 1 蒙特卡洛算法 1.1 基本思想 1.2 蒙特卡洛积分 1.2.1 求π\piπ 1.2.2 求积分 1.2.2.1 一维积分 1.2.2.2 高维积分 1.3 蒙特卡洛期望估计 1.4 ...

  8. python实验原理_Python实现蒙特卡洛算法小实验过程详解

    蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯·诺伊曼,他在20世纪40年代中期用驰名世界的赌城-摩纳哥的蒙特卡洛来命名这种方法. 通俗的解释一 ...

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

    蒙特卡洛算法,是一种以概率统计理论为指导的一类非常的数值计算方法,是指使用随机数来解决很多计算问题的方法. 应用一:用蒙特卡洛算法求解圆周率 思路:在直角座标系中选取x[-1,1],y[-1,1]的正 ...

最新文章

  1. self = [super init]
  2. Consul入门03 - 注册服务
  3. 前端vue框架的跨域处理方法
  4. 程序猿是如何解决SQLServer占CPU100%的
  5. 【2016年第2期】大数据背景下的治理现代化:何以可能与何以可为(上)
  6. java excel 兼容问题_java--POI解析excel兼容性问题
  7. mysql远程访问错误
  8. 在同一个类中调用另一个方法没有触发 Spring AOP 的问题
  9. oracle启动bat命令,ORACLE 启动 bat 脚本
  10. enlink请输入正确服务器地址,Enlink
  11. [转]STL的内存分配器
  12. 15天掌握Al声纹识别,同盾开启智能风控建模赛训
  13. Linux命令解释之mkfs.ext3
  14. 阿里云CentOs 6.4 yum报错Couldn't resolve host'xx
  15. Tensorflow游乐场
  16. 关于主机的思维导图_思维导图可以整理哪些东西?
  17. Android 应用上线安卓市场
  18. 更改C盘中Pycharm缓存文件目录
  19. EXCEL数组公式(2)---数组公式的基础概念等
  20. Linux I/O重定向 dup dup2 系统调用

热门文章

  1. 一看就懂的卡尔曼滤波五个公式
  2. 《地理信息系统导论》chapter 3 矢量数据模型 习作
  3. ADAU1452的A2B寄存器和时序图配置
  4. SkyChess Reloaded
  5. 入侵某学校校园网过程
  6. 面了1个自动化测试,开口就是20k,只能说痴人做梦...
  7. oracle split 以及 简单json解析存储过程
  8. 键盘配置软件V2.0使用说明
  9. AcWing 1143 联络员
  10. 神犇营-15-输出绝对值