首页 > 编程语言 >蒙特卡洛算法

蒙特卡洛算法

时间:2023-11-07 12:38:00浏览次数:29  
标签:圆周率 蒙特 算法 随机 卡罗 蒙特卡洛 方法

算法简介

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。蒙特·卡罗方法的名字来源于摩纳哥的一个城市蒙地卡罗,该城市以赌博业闻名,而蒙特·卡罗方法正是以概率为基础的方法。

与它对应的是确定性算法。

蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。

背景知识

1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis共同发明,被称为蒙特卡洛方法。它的具体定义是:在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算呢? 蒙特卡洛(Monte Carlo)方法告诉我们,均匀的向该正方形内撒N(N 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的值便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看这两个实数是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:1,PI为圆周率),当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,其结果越接近于圆周率。

算法描述

以概率和统计理论方法为基础的一种计算方法。将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。比如,给定x=a,和x=b,你要求某一曲线f和这两竖线,及x轴围成的面积,你可以起定y轴一横线 y=c 其中c>=f(x)max,很简单的,你可以求出 y=c,x=a,x=b,及 x轴围成的矩形面积,然后利用随机产生大量在这个矩形范围之内的点,统计出现在曲线上部点数和出现在曲线下部点的数目,记为:doteUpCount,nodeDownCount,然后所要求的面积可以近似为 doteDownCounts所占比例*矩形面积。

蒙特卡洛算法_概率统计

 

 

http://baike.baidu.com/view/1785707.htm

http://www.madio.net/forum-740-1.html



标签:圆周率,蒙特,算法,随机,卡罗,蒙特卡洛,方法
From: https://blog.51cto.com/emanlee/8229941

相关文章

  • 模拟退火算法(SA,Simulated Annealing)思想
    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。模拟退火算法(SimulatedAnnealing,SA)最早由Kirkpatrick等应用于组合优化领域......
  • 最大期望算法
        最大期望算法(Expectation-maximizationalgorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖......
  • 数据结构与算法-栈
    什么是栈 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。相比数组和链表,栈带给我的只有限制,并没有任何优势。那我直接使用数组或者链表不就好了吗?为什么还要用这个“操作受限”的“栈”呢?从功能上来说,数组或链表确实可以替代栈,但你要知道,特定的数据结构是对特定......
  • 快速排序——acwing算法基础课笔记
    课堂内容+个人思考,个人笔记,但是欢迎补充、批评、指正。快速排序基于分治的思想平均时间复杂度O(nlogn)已知数组q[] 步骤:1、确定分界点(x): (1)首元素q[l];(2)尾元素q[r];(3)中值q[(l+r)/2];(4)随机;2、调整区间将区间通过x值划分为两部分(长度不一定相等),使得第......
  • 11.7算法
    题目相交链表给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。自定义评测:......
  • 排序算法
    1.插入类排序1.1直接插入排序classSolution{publicvoidinsertSort(int[]arr,intn){inttmp;for(inti=1;i<n;i++){//将待插入的关键字暂存于tmp中tmp=arr[i];intj=i-1;/......
  • 商品sku算法
    笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesianproduct),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员实现简单的sku算法`constspec=[['红','白','蓝'],['32G','64G'],['移动','联通','电信']]......
  • 算法刷题记录-螺旋矩阵
    算法刷题记录-螺旋矩阵螺旋矩阵给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]思路,这题有点绕,我用了一个比res大2的布尔矩阵来存储......
  • 算法--笔记--单调栈
    单调栈是为了解决两层foru循环O(n^2)变为O(n)的问题思路是:维持一个单调栈.依次进入单调栈,并淘汰对后续没有帮助的对象当一个对象从栈里弹出的时候,结算当前对象参与的答案。如何判断单调栈是大压小还是小压大呢?左侧的要小的,就是大压小左侧的要大的,就是小压大......
  • 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题
    四、用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典。开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储对象占用O(1)空间;SEARCH、INSERT和DELETE操......