【发布时间】:2013-03-07 12:37:02
【问题描述】:
我正在尝试使用线性同余生成器在 Matlab 中解决以下问题。我的函数代码行如下所示。 m 基本上是您可以预期的值范围的最大值,因此取决于问题。初始种子x 首先由时钟确定,然后将每个随机数反馈到函数中以产生一个新的。这里给出了选择 lcg 值的规则http://en.wikipedia.org/wiki/Linear_congruential_generator。我需要的是a 和c 在指定期间的良好值。
我的 lcg 代码
random_number = mod((a*x + c),m);
- Q1 需要 1 到 52 之间的随机数(扑克手的概率)
- Q2 需要 1 到 366 之间的随机数(生日悖论)
- Q3 需要一个介于 1 和 3 之间的随机数(Monty Hall 问题)
- Q4 需要 1 到 1000 之间的数字
我知道这看起来很简单,但是用小范围实现它往往会产生一个周期较短的模式,即 4 位数字不断重复。
还可以使用不同的m 值并过滤掉我所需范围之外的任何值,但老实说,我认为这没有必要。
非常感谢
【问题讨论】:
-
LCG 似乎容易出现周期性,尤其是在 m 值较小的情况下。您可以使用更大的 m 值并适当地缩放输出。 (参考:stackoverflow.com/questions/6415424 - 见第二个答案 + cmets)