随机数的计算公式是什么?
来源:匠吉财富
为追求真正的随机序列,人们最初尝试使用各种物理方法来生成满足精度要求的均匀分布序列,但这种方法存在速度慢、效率低、需占用大量存储空间且不可重现等缺点。为了适应计算机模拟研究的需求,人们开始研究利用算法生成模拟各种概率分布的伪随机序列。
伪随机数是指通过数学递推公式生成的随机数。从实用角度来看,获取这类随机数最简便且自然的方法是利用计算机语言提供的随机数发生器。通常情况下,这类发生器会输出一个均匀分布在0到1区间内的伪随机变量的值。其中,线性同余法是最广泛使用且研究最深入的一种算法。
线性同余法的递推公式为:
ni+1=(a*ni+b)mod M i=0,1,…,M-1
其中,M是一个足够大的正整数,a和b是任意自然数,ni是第i个数。当函数f(n)为线性函数时,就得到了线性同余序列。以下是线性同余法生成伪随机数的伪代码:
Random(n,m,seed,a,b)
{
r0 = seed;
for (i = 1;i<=n;i++)
ri = (a*ri-1 + b) mod m
}
种子参数seed可以任意选择,通常将其设为计算机当前的日期或时间;m是一个较大数,可以取为2^w,w是计算机的字长;a可以是0.01w和0.99w之间的任何整数。
在使用递推公式生成均匀分布随机数时,式中参数n0,a,b,M的选取十分重要。
例如,当M=10,a=b=n0=7时,生成的随机序列为{6,9,0,7,6,9,……},其周期为4。
当M=16,a=5,b=3,n0=7时,生成的随机序列为{6,1,8,11,10,5,12,15,14,9,0,3,2,13,4,7,6,1……},其周期为16。
当M=8,a=5,b=1,n0=1时,生成的随机序列为{6,7,4,5,2,3,0,1,6,7……},其周期为8。
显示全文