正态分布随机数生成算法_第1页
正态分布随机数生成算法_第2页
正态分布随机数生成算法_第3页
正态分布随机数生成算法_第4页
正态分布随机数生成算法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

概率论与数理统计课程设计 题目 正态分布随机数生成算法 要编程得到服从均匀分布的伪随机数是容易的 C 语言 Java 语言等都提供了相应的 函数 但是要想生成服从正态分布的随机数就没那么容易了 得到服从正态分布的随机数的基本思想是先得到服从均匀分布的随机数 再将服从均 匀分布的随机数转变为服从正态分布 接下来就先分析三个从均匀分布到正态分布转变的 方法 然后编程实现其中的两个方法并对程序实现运作的效果进行统计分析 1 方法分析方法分析 1 利用分布函数的反函数 若要得到分布函数为 F x 的随机变量 Y 可令 其中 u 是服从均匀分布的随机变量 有 1 YFu 1 P Yy P UFy F y 因而 对于任意的分布函数 只要求出它的反函数 就可以由服从均匀分布的随机变 量实例来生成服从该分布函数的随机变量实例 现在来看正态分布的分布函数 对于 其分布函数为 2 XN 2 2 2 1 2 t x F xe 显然 要想求其反函数是相当困难的 同时要想编程实现也很复杂 可见 用此种方法来 生成服从正态分布的随机变量实例并不可取 2 利用中心极限定理 第二种方法利用林德伯格 莱维 Lindeberg Levi 中心极限定理 如果随机变量序列 独立同分布 并且具有有限的数学期望和方差 12 n XXX 则对一切有 2 0 1 2 ii E XD Xi xR 2 2 1 11 lim 2 t n x i n i PXnxedt n 因此 对于服从均匀分布的随机变量 只要 n 充分大 随机变量 i X 就服从 我们将实现这一方法 1 1 n i i Xn n 0 1N 3 使用 Box Muller 方法 先证明 2 2 2 x edx 令 则 2 2 x Iedx 2222 2 222 xyxy Iedxedyedxdy 令 则有cos sinxryr 22 2 2 22 000 22 rr Ierdrderdr 接下来再来得出 Box Muller 方法 设为一对相互独立的服从正态分布的随机变量 则有概率密度函数 X Y 22 2 1 2 xy X Y fx ye 令 其中 则有分布函数 cos sinxRyR 0 2 R 222 2 222 000 1 1 2 uur rr P Rreududeudue 令 2 2 1 r R Fre 1 2ln 1 R RFZZ 如果服从均匀分布 则的分布函数即为 XR R Fr 最后 可以用代替 令为 其中 得 1 U 1Z 2 2 U 1 0 1UU 2 0 1U 1212 cos2lncos 2 sin2lnsin 2XRUUYRUU 从而 只需要有两个服从均匀分布的随机变量 就能通过公式 12 U U 12 cos2lncos 2XRUU 来得到一个服从正态分布的随机变量 用 Box Muller 方法来生成服从正态分布的随X 机数是十分快捷方便的 我们也将实现这一方法 2 实现与分析实现与分析 1 利用中心极限定理方法的实现与分析 利用中心极限定理来生成随机数的函数 C 语言 编写如下 const int N 200 double getRand double s 0 for int i 0 i N i s double rand 1000 1000 return s 函数生成的随机数是 N 个 0 1 间服从均匀分布的随机数的和 这里 N 为 200 从而理 论上产生的随机数应近似服从 其中 n 为 N 即 200 为 0 5 为 2 N nn 2 1 12 程序生成了 200 个随机数 并求出样本均值与样本方差 也即与的最大似然 2 估计 生成随机数并存储 double sum store 200 xi su 0 sb 0 ssb 0 int cnt 0 sum 0 for int i 0 i 200 i xi getRand sum xi store i xi 得到样本均匀与样本方差 su sum 200 for int i 0 i 200 i sb store i su store i su sb 200 ssb sqrt sb 此次选取 12345678 90 92 94 96 98 100 102 104 yyyyyyyy 它们将实轴分成11个互不相交的区间 从而将样本值分成11组 910 106 108yy 程序统计了每组中的样本数量 为方便计算 程序还计算出了 i y int segments 12 m 2 double x1 90 x10 108 memset segments 0 sizeof segments for int i 0 i 200 i if store i x10 segments 10 else segments int store i x1 m 1 cout i t ni endl for int i 0 i 11 i cout i 1 t segments i if i 10 cout t fixed setprecision 2 90 i 2 su ssb cout endl 程序的最终运行输出如图2 1所示 图2 1 最终输出结果 对结果的统计如表2 1所示 由表2 1中可见 今并令 2 13 380 11 2 km 则由于 故可认为产生0 05 22 0 05 1815 507 km 13 38015 507 的随机数服从正态分布 表2 1 i 1 ii yy i n ip 2 200 200 ii i np p 1 2 3 4 5 6 7 8 9 10 11 90 90 92 92 94 94 96 96 98 98 100 100 102 102 104 104 106 106 108 108 2 2 10 12 37 46 42 23 15 10 1 0 0119 0 0265 0 0601 0 1134 0 1664 0 2069 0 1740 0 1295 0 0746 0 0339 0 0166 0 061 2 055 0 034 5 029 0 416 0 516 1 489 0 325 0 000 1 529 1 621 13 380 利用中心极限定理的方法虽然可以得到服从正态分布的随机数样本 其思想也较为简 单 容易想到 但是这种方法每次都要先产生若干个服从均匀分布的随机数样本并求它们 的和 因而算法的时间复杂度高 2 Box Muller 方法的实现与分析 使用 Box Muller 方法得到随机数的函数如下 double getRand double u1 double rand 10000 10000 u2 double rand 10000 10000 r r 20 5 sqrt 2 0 log u1 log e cos 2 pi u2 return r 用此函数得到的随机数样本理论上服从 所实现的程序产生了 500 个随机 20 25 N 变量的样本其他与利用中心极限定理的实现基本相同 程序得到的最终结果如图 2 2 所示 图 2 2 对结果的统计如表 2 2 所示 表 2 2 i 1 ii yy i n ip 2 500 500 ii i np p 1 2 3 4 5 6 7 8 9 10 11 10 10 12 12 14 14 16 16 18 18 20 20 22 22 24 24 26 26 28 28 17 11 35 47 58 64 92 61 55 30 30 0 0250 0 0332 0 0608 0 0958 0 1298 0 1514 0 1520 0 1314 0 0986 0 0724 0 0606 1 62 1 89 0 69 0 01 0 73 1 81 3 36 0 33 0 65 1 06 0 00 12 19 由表 2 2 可见 今并令 则 2 12 19 11 2 km 0 05 由于 故可认为产生的随机数服从正态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论