- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
伪随机数的产生及其性能评价
吴 军1 吕敏2 雷金娥3
(1.重庆大学光电工程学院,重庆 400030;
2.中国科学技术大学计算机学院,合肥 230026;
3.南昌工程学院计算机系,南昌 330099)
摘要:系统仿真或加密算法中常需要产生满足一定分布函数的伪随机数,高级程序设计语言中的库函数采用线性同余法产生一个在[0,32767] 服从均匀分布的伪随机数,但每次程序运行的结果都是相同的,利用当前系统时间和数学方法可以产生满足各种分布要求的伪随机数。以C/C++为例,采用概率统计的方法检验了产生的伪随机数是否符合给定分布函数的要求,并且其随机性、均匀性等统计特性是否满足实际应用的需要。
关键字: 伪随机数 C/C++ 统计检验;均匀分布;正态分布;指数分布
中图分类号:TP 文献标识码:
1、引言
在计算机仿真和模拟、密码学等应用中,常需要产生一些随机数,自然界中存在大量的随机现象,但在计算机中,只能产生满足一定要求的伪随机数来模拟真实世界中的随机现象。产生伪随机数的方法有硬件方法和软件方法,硬件方法可以在计算机上附上一个硬设备或者采用移位寄存器来产生伪随机数;软件方法一般都采用数学公式法。近年来在计算机中,比较广泛使用的方法就是同余法,而在高级程序设计语言中常采用线性同余法[8]。每次生成的伪随机数需要满足独立的条件及给定分布函数的要求,但高级程序设计语言中提供的库函数产生的伪随机数都是满足一定条件的均匀分布随机数,且在同一次程序运行中,每次产生的伪随机数是完全相同的,本文将介绍利用一些数学变换方法产生在任意区间内服从任意分布的伪随机数,并进行统计检验以检查其是否能满足要求。文献[14]提出了一种比较好的尾数和检验法,但比较复杂,本文采用较为简单的频率统计法。
2、Rand函数和线性同余算法
C语言中提供的rand( )函数可以产生一个从0到32767服从均匀分布的正整数,rand( )函数即采用了线性同余算法。该算法如下:
取足够大的正整数m(一般取计算机精度范围内能够表示的最大整数)和任意的自然数a,X0,b。
其中i=1、2、3……,mod表示取余。 (1)
(1)式中a为乘子,X0为种子,b为常数,m为模。线性同余法是一种递归算法,即先提供一个种子X0,逐次递归即得到一个不超过模m的整数数列。可以看出由此产生的数列并不是真正的随机数,但是提供一个随机的种子,产生的数列在0~m循环,如果产生大量的整数密集分布在[0,m]上,就可以近似认为服从[0,m]上的均匀分布。把数列除以m,就得到服从[0,1]上的均匀分布。
3、伪随机数性能评价的基本原理
随机性和均匀性检验采用频率统计检验法,该算法原理如下:
假设x服从U[0,1](U表示均匀分布),把[0,1]等分成n个小区间。以表示第i个小区间,如果ri是[0,1]上均匀分布随机变量x的一个抽样值,则它落在任一个小区间的概率为1/n,故N个抽样值落在任一小区间的理论频数,设实际频数ni为第i个小区间实际测到的频数,则构造统计量
。 (2)
由皮尔逊定理可知,渐进服从分布()。若取置信度为α,查分布表得到,若,则认为这批随机数在统计性能上1-α可信,否则拒绝。
对一次产生的N个伪随机数的独立性检验可以使用相关系数检验法,即若两个随机变量独立,则其相关系数为零,反之则不然。即相关系数为零是随机变量独立的必要条件,但可以通过相关系数的大小来判定其线性相关性的强弱。N个随机变量r1,r2,…,rN中相距为j的两个随机样本的相关系数为:
(3)
其中j=1,2,3……,,。若ri之间相互独立且N充分大(如N-j=50)时,则统计量
(4)
渐进地服从标准正态分布N(0,1)。由C/C++中伪随机数的生成算法可知,C/C++生成的伪随机数是递推生成的,所以各伪随机数之间并不独立,但可以通过检验其相关性,满足一定要求便近似认为它们是线性无关的。
4、任意分布伪随机数的生成
C/C++本身只能生成0~32767之间均匀的随机整数,通过线性变换可以产生任意区间内均匀分布的随机浮点数。如果要生成满足任意分布的伪随机数,一般有以下五种方法:
①求逆法:任意分布的随机变量X的分布函数F(x)服从U(0,1)分布,而F(x)的反函数F-1(x)和X具有相同的分布。所以可以先获得一个[0,1]上的均匀分布随机变量Y,则X=F-1(Y)具有给定的分布密度函数。
②舍选法:舍选法适用于任意分
文档评论(0)