0

我正在尝试使用线性同余生成器在 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值并过滤掉我所需范围之外的任何值,但老实说,我认为这没有必要。非常感谢

4

1 回答 1

0

我会以不同的方式处理这个问题:

  • 取一些已知值(维基百科有一个表格)
  • 如果你接受它们,你可以假设* 它们分布均匀
  • 将结果缩放到您的范围,例如rnd()*52 / m + 1并将其作为输出

    *请记住,“当您假设时,您会从你和我中脱颖而出”;)

于 2013-03-29T21:01:27.133 回答