数值计算方法-张勇 RandNum.pdfVIP

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值计算方法 —— 伪随机数生成算法及其应用 张 勇 中山大学理工学院 zhyong9@mail.sysu.edu.cn 每个C/C++编译器,Fortran编译器,都会 提供伪随机数生成器。难道还有必要来了 解算法,自己来写伪随机数生成器? 本章安排: ? 一个具体的例子 ? 历史回顾 ? 什么是伪随机数,伪随机数的检验 ? 线性同余法 ? 一些新的算法 ? 使用伪随机数来解决问题(几个例子) 考虑一个粒子(红色小球),它可以在两条 轨道上运动。粒子受到一个随机力的影响, 使得它可以随机地跳跃到原轨道附近的地 方,两条轨道都是稳定的。 Y. Zhang, et. al., New J. Phys. 10 (103018) 2008 定性分析 1. 粒子受到随机力的 干扰,会偏离原轨道 2. 轨道是稳定的,粒 子偏离之后会回到原 轨道 3. 两轨道离得比较近, 在阴影部分粒子发生 偏离的话有可能进入 另外一条轨道 4. 如果一开始放入大 量粒子,那么应到看 到下图(用两个表示) 采用数值计算, 随机力以线性同 余法伪随机数生 产算法产生。 结果所能得到的 结果不是下图, 而是左上图。 为什么会出现上 边的结果? 在更换一种更现 代的伪随机数生 产算法之后,得 到了如有图所示 的结果 随机数可以通过物理的方式来获得: 观察原子衰变; 电路中的噪声; 观察通过一个半透半反镜面的光子; 大气噪声 ... ... 但是,目前普遍采用的生成“随机数”的方 式是使用计算机来计算出来的 设计一个好的伪随机数生成器是非常困难 的,最好由专家来完成 —— Robert R. Coveyou 人们习惯于不去研究这样的(伪随机数)子 程序,某些让人相当不满意的老方法被盲 目地从一个程序员传到另一个程序员,以 至于使用的人对它的局限性一无所知 —— D. E. Knuth 内部状态 {S1,S2, ... SN} 输入 输出 计算机生成伪随机数的示意图 算 法 内部状态数是有限的 对这个示意图的分析可以发现如下一些问 题:1. 算法是确定性的,生成的结果为什 么叫做“随机数”,随机数是什么意思?2. 输入(种子)怎么选择?3. 内部状态数是有 限的,那么输出会出现循环(周期性) 1946年,von Neumann提出了平方取中 法:把输入的数字求平方,然后再把平 方之后的中间部分作为输出 例如:(输入) 394157 → (平方) 155359740649 → (输出) 359740 这一算法已经被证明有严重的缺陷,现在 已经不再使用该方法。 在这里,我们用它来演示伪随机数生成算 法中的一些问题 第一个问题是:要选择一个好的输入, 即种子,并不容易 第二个问题是:伪随机数的生成算法输 出的伪随机数具有周期性。所谓的周期 是指伪随机数生成算法输出的数字在出 现重复之前已输出的数字的个数。平方 取中法的周期一般很短,之后就会退化 成为较短的重复数字序列。 周期性的长短是评价一个伪随机数生成算 法好坏的指标之一。在实际使用中(比如蒙 特卡洛模拟),往往需要生成大量独立样本, 所以往往要求伪随机数算法的周期比较长。 同时也希望算法的复杂性(时间复杂性和空 间复杂性)尽可能低。 算法是确定性的,所以生成的数字不叫 随机数,而是叫着伪随机数。先通过6位 十进制数的平方取中法的实例来了解下 前面所提到的两个问题 628 217000 629 89000 630 921000 631 241000 632 81000 633 561000 634 721000 635 841000 636 281000 637 961000 638 521000 639 441000 640 481000 641 361000 642 321000 643 41000 644 681000 645 761000 646 121000 647 641000 648 881000 649 161000 650 921000 seed = 394159 611 930438 612 714871 613 40546 614 643978 615 707664 616 788336 617 473648 618 342427 619

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档