首页 理论教育 如何产生随机数

如何产生随机数

时间:2023-06-29 理论教育 版权反馈
【摘要】:为和真正的随机数相区别,通常把用数学方法产生的随机数称为“伪随机数”。用数学方法产生的伪随机数的特点是速度快,占用计算机内存小,对所模拟的问题可以进行复查,一般具有较好的概率统计性质。经过数值试验,对于二维问题当b=16,A=2053,C=13849时,对于三维问题当b=81,A=29,C=217时所产生的系列伪随机数是足以令人满意的。

如何产生随机数

在计算机上产生随机数的方法大致可分为三类,即物理方法、随机数表方法和数学方法。目前最为常用的是数学方法。用数学方法产生随机数是通过数学递推式实现的,而由此产生的数值序列到一定长度之后或退化为零,或周而复始地出现,因此由数学方法产生的随机数并不是真正的随机数。但只要能够通过有关的各种不同类型检验,就可以把它们当作真正的随机数使用。为和真正的随机数相区别,通常把用数学方法产生的随机数称为“伪随机数”。用数学方法产生的伪随机数的特点是速度快,占用计算机内存小,对所模拟的问题可以进行复查,一般具有较好的概率统计性质。

用数学递推式产生随机数的方法有多种,具有代表性的是平方取中法和同余法。平方取中法是最早用于产生随机数的方法。该方法将一个n位数X′i自乘得到一个2n位数字,然后取其中间的n位数,便得到一个新的n位随机数。将这个新的n位随机数再自乘,再取其中间部分,得到第三个随机数,依此类推便得到一个随机数列。将这个随机数列除以n位数的最大整数值,便得到(0,1)之间的随机数Xi。平方取中法递推公式可表示为

式中:X为n位数的最大整数。

在产生伪随机数的数学方法中,同余法是使用较广的方法,其中的乘同余法和混合同余法因产生伪随机数周期长,统计性质好而得到最为广泛的应用。乘同余法的递推公式为

式中:A为乘因子,为(0,M-1)之间的数;M为模数,是一个很大的数,通常为2b或2d的形式,其中b,d为二进制的计算机字长;(mod M)表示除以模后取其余数。当给定一个初值X0之后,由式(6.3)就可以得到随机数序列X1,X2,…,Xi,…,再由Ri=Xi/M即可得到(0,1)区间均匀分布随机变量Ri序列。

混合同余法的递推公式为(www.xing528.com)

式中:C是非负整数,在(0,M-1)之间,通过选择适当的参数C可以改善伪随机数的统计性质。

用上述同余法产生的随机变量是模M的余数,因此它必定小于M,即0≤Xi<M。显然,Xi的取值范围为0~(M-1)。最多只能有M个不同的取值。所以Xi有重复周期性,其重复周期T≤M。为了获得长周期的随机变量序列,应当尽可能地取大的M值。并合理选取其他参数,使得到的结果是全周期的。一般认为,为得到最大周期,参数选择必须满足如下两个条件:①C>0,且C与M互素;②乘子(A-1)是4的倍数。为了尽量减少随机数之间的关联性,一般取A=5n<2b,其中n为满足该条件的最大奇数。

用数学方法通过计算机得到的随机数是“伪随机数”,其特点(或者说缺点)之一就是具有一定长度的周期。以字长b=30(230=1,073,741,824)的普通计算机为例,如果可以保证最长周期达到10亿,这种随机数列的分布就可以看成是均匀而且连续的,并且可以满足实际应用的需要。

经过数值试验,对于二维问题当b=16,A=2053,C=13849时,对于三维问题当b=81,A=29,C=217时所产生的系列伪随机数是足以令人满意的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈