平方取中法

平方取中法

平方取中法(midsquare method)是产生[0,1]均匀分布随机数的方法之一,亦称冯·诺伊曼取中法,最早由冯·诺伊曼(John von Neumann,1903-1957)提出的一种产生均匀伪随机数的方法。此法将一个2s位十进制随机数平方后得到的一个4s位数,去头截尾取中间2s位数作为一个新的随机数,重复上述过程可得到一个伪随机数列 [1]。平方取中法的步骤如下:

平方取中法(midsquare method)是产生[0,1]均匀分布随机数的方法之一,亦称冯·诺伊曼取中法,最早由冯·诺伊曼(John von Neumann,1903-1957)提出的一种产生均匀伪随机数的方法。此法将一个2s位十进制随机数平方后得到的一个4s位数,去头截尾取中间2s位数作为一个新的随机数,重复上述过程可得到一个伪随机数列 [1]。

算法

平方取中法的步骤如下:

1. 选择一个m位数Ni作为种子。

2. 计算Ni的平方。

3. 若Ni^2不足2m个位,在前面补0以确保它有2m位。

4. 从这个数中选取中间m个位的数,即从10^(⌊m/2⌋+1)到10^(⌊m/2⌋+m)的数,将这个结果作为Ni+1。

优劣

平方取中法并不是一个非常优秀的随机数生成方法,因为它的周期通常较短,并且存在明显的弱点。例如,当起始数值是k×10^m的形式时,生成的序列会不断重复。尽管如此,这些问题很容易被察觉,而且由于其计算速度快,这个方法在ENIAC这样的早期计算机上还是有一定的应用价值。

例子

以下是平方取中法的一个例子,展示了从一个初始种子开始的几次迭代过程:

- 675248 → 455 959 861 504

- 959861 → 921 333 139 321

- 333139 → 110 981 593 321

- 981593 → 963 524 817 649

- 524817 → 275 432 883 489

通过这个例子,我们可以看到如何从一个种子开始,通过平方和取中间m位数的方式来生成下一个数,从而形成一个伪随机数序列。

广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容