那 “线性同余法” 是什么法?

michaelpeng7799 2002-07-28 09:12:11
随机数当然知道是怎么回事,
那 “线性同余法” 是什么法?

这是国二级VB书里提到的P225页
用 “线性同余法”产生随机数,公式如下:
x=(x*29+37) mod 1000

为什么是29和37??为什么用MOD ?? 最主要不明白 “线性同余法” 是什么东东?
书上就只说名字了,没给解是,哪位知道啊,多谢!!!
...全文
1113 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucky-lucky 2010-06-23
上面说的太详细了……
回复
illusionrain 2010-06-21
感谢楼上的,我就是来查找C++产生随机数相关的资料
回复
michaelpeng7799 2002-07-29
不明白为什么要用29和37,是随便用的么
回复
atlantis13579 2002-07-29
在计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要方法和参数选择合适,所产生的伪随机数就能满足均匀性和独立性,与真正的随机数具有相近的性质。

产生随机数的方法是先用一定的方法产生[0,1]均匀分布的随机数,然后通过一个适当的变换就可以得到符合某一概率模型的随机数。

常用的产生[0,1]均匀分布的随机数的方法有乘同余法和混合同余法。

用乘同余法产生[0,1]均匀分布的随机数递推公式为:

Xi=λxi-1(modM) (i=1,2,……n) (2—13)

式中λ为乘子,M为模,当i=1时,xi=xi-1为初始参数,x0可取1或任意奇数。利用上式算出序列x1,x2……后再取

γ i=xi / M (2—14)

即为第i个[0,1] 均匀分布的随机数。

混合同余法又称线性同余法,产生随机数的递推公式为:

Xi=(λxi-1+C)(modM) (i=1,2,……n) (2—15)

γ i=xi / M (2—16)

根据概率论可知,[0,1]均匀分布的随机变量ζ与其它的变量ζ之间存在如下的重要关系:

η=F-1(ζ) (2—17)

式中F-1( . )为变量η的分布函数。对于F-1( . )不能表示为显函数的情况,可采用线性插值法变换,此时η与ζ的关系,可用图2—6来表示。在[0,1]均匀分布随机变量轴上,在0-1之间可划成m等份。给定分布的概率分布曲线也同时被划分成m段,将每一段曲线用折线来代替就可以得到对应于[0,1]均匀分布随机数γi的给定分布的随机数xi。


式中:γi:为[0,1]均匀分布随机数。

γj .γj+1为γi的所在区段的上、下限。

xj. xj+1为与γi对应的区段的x的上、下限。


图2—6 线性插入法变换

许多情况下,需要产生多维随机向量的样本,各个分量又是相关的,这时可以分别求出它们的边缘分布和条件分布,化成几个单变量的分布,然后依次进行抽样。
回复
LeeMaRS 2002-07-29
要用质数.
回复
jian 2002-07-28
呵呵,就是线性就是:x=x*29+37这个线性式子
之后就是求mod

内容很简单,就这么回事,没什么特别的
回复
c_and_pascal 2002-07-28
mod 1000的意思就是如果超过1000就把该数减去1000.还可以打个比方,x mod 12 代表的是钟表刻度,它的值永远在0..11之间。这个概念在数学里叫“同余”。一般:
(x +- y) mod m = (x mod m) +- (y mod m) (mod m)
x*y mod m == (x mod m) * (y mod m) (mod m)
例如:8点钟 + 7点钟 = 15 点钟 = 3点钟 (mod 12点钟)
13点钟(即1点钟) + 14点钟(即2点钟) = 27点钟 = 3点钟

回复
chenggn 2002-07-28
mean
x mod 1000 == x*28+37 mod 1000
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告