蒙特卡洛算法.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
蒙特卡洛算法.ppt

蒙特卡洛算法 一.蒙特卡洛算法的介绍 二.随机点的产生 1.伪随机数的产生 2.准随机数的产生 3.随机点产生程序分析 蒙特卡洛算法的介绍 算法简介 蒙特卡洛算法,也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要 数值计算方法,蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。 蒙特卡洛算法的介绍 算法描述 以概率和统计理论方法为基础的一种计算方法。将所求解的问题 同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。例如pi的计算:在一个面积为一的正方形里面画一个圆,半径0.5,与正方形四边相切,在正方形中生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为pi/4=m/n),当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,其结果越准确。 随机点的产生 伪随机算法 随机数生成算法是一类重要的算法,广泛应用于仿真技术等场合。 伪随机数是由确定的算法生成的,其分布函数与相关性均能通过统计测试。与真实随机数的差别在于,它们是由算法产生的,而不是一个真实的随机过程。一般地,伪随机数的生成方法很多,有线性同余法,直接法,逆转法等 随机点的产生 C/C++语言中伪随机数生成算法实际上是采用了“线性同余法“。 具体的计算如下: Xi = (Xi-1 * A + C ) mod M? 其中A,C,M都是常数(一般会取质数)。当C=0时,叫做乘同余法。引出一个概念叫seed,它会被作为X0被代入上式中,然后每次调用rand()函数都会用上一次产生的随机值来生成新的随机值。可以看出实际上用rand()函数生成的是一个递推的序列,一切值都来源于最初的 seed。所以当初始的seed取一样的时候,得到的序列都相同。C语言里面有RAND_MAX这样一个宏,定义了rand()所能得到的随机值的范围。在C里可以看到RAND_MAX被定义成0x7fff,也就是32767。rand()函数里递推式中M的值就是32767。线性同余法生成的是伪随机数,粗略符合均匀分布。 随机点的产生 准随机算法 伪随机算法都存在差异性,不均匀性。因此,不要求新的发生器模拟真实的均匀分布,而力求任意大小的样本(尤其是小样本)都能满足低差异性。换言之,以牺牲随机性为代价,换来均匀性的提高,称其为准随机模拟器。 目前有3种准随机序列可用来辅助生成均匀分布随机数,分别是Halton序列、Sobol序列、Latin超立方体序列。 随机点的产生 Halton序列 以质数为基底产生的序列 假设是以质数2为基底的Halton序列,范围在0~1之间。则从产生的列为 1/2 1/4 3/4 1/8 5/8 3/8 7/8 1/16 9/16…….. 怎么产生的呢? 3=1+2 5=1+4 7=3+4 9=1+8 ……….. 假设以质数3为基底,Halton序列如下 1/3 2/3 1/9 4/9 7/9 2/9 5/9 8/9 1/27 10/27 19/27…….. 随机点的产生 在二维中,0~1之间产生的点的序列就是(1/2,1/3)(1/4,2/3)(3/4,1/9)(1/8,4/9)(5/8,7/9)(3/8,2/9)(7/8,5/9)(1/16,8/9)(9/16,1/27)…. 核心代码分析 private static class HaltonSequence { //Halton序列的产生 static final int[] P = {2, 3}; //以2 、3为基底产生序列 static final int[] K = {63, 40}; //使2和3产生的序列中元素的个数相同 private long index;

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档