我正在尝试使用线性同余生成器在 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 之间的随机数(蒙蒂霍尔问题)
- Q4 需要 1 到 1000 之间的数字
我知道这看起来很简单,但是用小范围实现这一点往往会产生一个小周期的模式,即连续重复 4 位数字。
此外,也可以使用不同的m
值并过滤掉我所需范围之外的任何值,但老实说,我认为这没有必要。非常感谢