一、蒙特卡洛模拟法分类

蒙特卡洛法模拟法从其应用方面来划分,可以分成以下三种形式:

1)直接蒙特卡洛模拟。采用随机数学咧来模拟复杂随机过程的效应。

2)蒙特卡洛定积分(间接蒙特卡洛模拟)。利用随机数序列计算积分的方法。积分维数越高,该方法的积分效率就越高。

3)Metropolis蒙特卡洛模拟。以"马尔可夫"链形式产生系统的分布序列,该方法可以使我们能够研究经典和量子多粒子系统的问题。

二、直接、间接蒙特卡洛法简介

本文介绍其中间接蒙特卡洛模拟法求解定积分,顺带说一下直接蒙特卡洛法。摘录马文淦《计算物理学》中一段话,如下:

直接蒙特卡洛法使用的情况往往是问题本身具有一定的概率和数理统计性的情况,如核衰变过程等。该方法是按照实际问题所遵循的概率统计规律,用电子计算机进行直接的抽样试验,然后计算其统计参数。直接蒙特卡洛模拟法最充分体现出蒙特卡洛模拟法无可比拟的的特殊性和优越性,因而在物理学的各种各样问题中得到广泛的应用。该方法也就是通常说的"计算机试验"。

间接蒙特卡洛法是人为构造出一个适合的概率模型,然后依照该模型进行大量的试验,使它的某些统计参量正好是待求问题的解。

三、间接蒙特卡洛法应用

Buffon投针试验---求π的近似值(现在采用用级数展开逼近求解)。虽然Buffon投针试验精确度不高,就连小数点后第二位也是不精确的,但是作为直接蒙特卡洛法应用的例子,本文将对其展开分析求解。

Buffon采用投针与平行线的夹角作为变量,并充分使用了cos的特性---cos在[0,π]是均匀分布的。这就出来我们需要求的π的,挺巧妙的。然后由于cos具有均匀型的特征,而蒙特卡洛方法自变量均匀时有对应的方法,这就一拍而和了。可能词不达意,不过读者可以慢慢体会。

稍微推导一下公式:

1)投针长为L,平行线之间距离为S,投针与垂直平行线方向夹角为a。那么投针与平行线相交的概率就是投针在垂直平行线方向上的投影与平行线距离的比值。

2)由于夹角a在[0,π]中是均匀分布的,那么投针和平行线相交的平均概率为

3) 为了计算方便,假设有L=S,那么公式可以简化为

4)如果投针N次,有M次和平行线相交。当N值充分大时,相交的频数M/N与概率相等,即有

四、Buffon试验代码

实在是不能再简单的入门级代码了......→_→这步就省略了吧。

关于生成伪随机数的算法,可以参考我的另一篇文章《伪随机数算法(一)》,里面解释相对比较详细。

python蒙特卡洛求定积分_蒙特卡洛定积分(一)相关推荐

  1. python怎么求指数_求指数 python

    softmax用于多分类过程中最后一层,将多个神经元的输出,映射到(0, 1)区间内,可以看成概率来理解,从而来进行多分类! softmax函数如下: 更形象的如下图表示: softmax 直白来说就 ...

  2. Python中表示偶数_蒙特卡洛模拟(Python)深入教程

    译者:大表哥.wiige来源:AI研习社 什么是蒙特卡罗模拟? 蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术.蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门.项目管理.成本和其他预测机器 ...

  3. 蒙特卡洛树搜索算法实现_蒙特卡洛树搜索实现实时学习中的强化学习

    蒙特卡洛树搜索算法实现 In the previous article, we covered the fundamental concepts of reinforcement learning a ...

  4. 蒙特卡洛树搜索_蒙特卡洛树是什么算法?

    点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 编辑:忆臻 https://www.zhihu.com/question/39916945 ...

  5. python编程求导数_面向对象编程 —— java实现函数求导

    首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. 一.引子 defd(f) :defcalc(x) : dx= 0 ...

  6. python惰性求值_让Python中类的属性具有惰性求值的能力

    起步 我们希望将一个只读的属性定义为 property 属性方法,只有在访问它时才进行计算,但是,又希望把计算出的值缓存起来,不要每次访问它时都重新计算. 解决方案 定义一个惰性属性最有效的方法就是利 ...

  7. python列表求平均值_长篇文讲解:Python要求O(n)复杂度求无序列表中第K的大元素实例...

    本文内容主要介绍了Python要求O(n)复杂度求无序列表中第K的大元素实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 昨天面试上来就是一个算法,平时基本的算法还行,结果变个法 ...

  8. 蒙特卡洛树搜索_蒙特卡洛树搜索与Model-free DRL

    我们这里所说的MCTS(蒙特卡洛树搜索),是指通过蒙特卡洛评估和树搜索,对强化学习环境π(•|s)建模的方法. 何为蒙特卡洛? Monte Carlo method,也就是先从某个分布采样,再基于采样 ...

  9. python怎么求幂_比较各种Python求幂方法的性能

    码农那点事儿 关注我们,一起学习进步 最近,我在写一个算法来解决一个编码难题,这个难题涉及到在一个笛卡尔平面上找到一个与其他所有点的距离最小的点.在Python中,两个点之间的距离函数可以表示为mat ...

  10. python迭代法求极值_用Python实现最速下降法求极值的方法

    对于一个多元函数 ,用最速下降法(又称梯度下降法)求其极小值的迭代格式为 其中 为负梯度方向,即最速下降方向,αkαk为搜索步长. 一般情况下,最优步长αkαk的确定要用到线性搜索技术,比如精确线性搜 ...

最新文章

  1. pandas使用applymap函数替换dataframe的内容或者数值:applymap函数使用字典替换多个列的内容(数值)
  2. input子系统分析(转)
  3. 【加密解密】单表加密(Javascript实现)
  4. PTA L2-002 链表去重
  5. 分库分表中间件Sharding-JDBC
  6. 前端开发笔记(2)css基础(上)
  7. 可变对象 不可变对象区别_对象应该是不可变的
  8. word制作电子签名
  9. 【Python】Python中的引用和赋值
  10. 【leetcode刷题笔记】Restore IP Addresses
  11. Django 系列博客(二)
  12. 贝塞尔曲线(UIBezierPath)属性、方法汇总
  13. 吉哥系列故事——礼尚往来
  14. 英语听力软件测试自学,每日英语听力应该怎么学习?
  15. js中定义变量时单引号和双引号的区别
  16. Ruby编程语言面试题库和答案(语法、代码)
  17. 台风怎么看内存颗粒_光威TYPE普通马甲内存条,南亚ADIE HR颗粒稳超3200MHZ
  18. f(f(x))=-x, 纯数学理解
  19. js【详解】arr.splice() 数组拼接
  20. KSImageNamed 安装后无效解决方法 亲测有用

热门文章

  1. 手机html微信登录,添加手机APP微信登录支持,微信公众号单页应用网页授权登录支持...
  2. matlab调整文字方向,python 旋转文字方向_如何通过Python 在绘图中旋转文字?
  3. CAD.net二次开发之图层,文字样式,标注样式,标注封装,引线的封装
  4. java applepay_【苹果支付】添加ApplePay的支持
  5. Apple苹果EDI案例
  6. KeilC51使用详解 (三)
  7. Google AdMob账号注册及收款指南(新手必看)
  8. 【运维工程师】运维工程师日常摘记
  9. 中国建设工程造价管理系统 http://zaojiasys.jianshe99.com/cecaopsys/
  10. 今天的两个收获--linux的特性和海森堡式错误