2013-03-07 33 views
0

我正试图在Matlab中使用线性同余发生器来解决以下问题。下面显示了我函数的代码行。 m基本上是您可以预期的值范围的最大值,因此取决于问题。初始种子x首先由时钟确定,然后将每个随机数反馈到该函数中以产生新的种子。选择lcg值的规则在这里给出http://en.wikipedia.org/wiki/Linear_congruential_generator。我需要的是在指定期间ac的好值。在Matlab中对lcg进行编程

我LCG代码

random_number = mod((a*x + c),m); 
  • Q1要求1和52(扑克手的概率)之间的随机数
  • Q2要求1和366之间的随机数(生日悖论)
  • Q3需要1和3之间的随机数(蒙蒂霍尔问题)
  • Q4要求数字介于1和1000之间

我知道它可能看起来很简单,但在小范围内实现它往往会产生一个小周期的模式,即4位数字不断重复。

另外它也许可以使用不同的m价值和过滤出我的要求范围以外的任何值,但老实说,我不认为这是必要的。 非常感谢

+0

LCG的似乎容易出现周期性的,尤其是用小m的值。您可以使用较大的m值并适当缩放输出。 (参考:http://stackoverflow.com/questions/6415424/ - 见第二个答案+评论) – nkjt 2013-03-08 11:06:57

回答

0

我会处理这一点不同:

  • 采取一些值(维基百科有一个表)
  • 如果你带他们,你可以承担 *他们有均匀分布
  • 将结果缩放到您的范围,例如rnd()*52/m + 1,并把它看作输出

    *一定要记住,“当你承担,你让屁股U和我的”;)