0
我正试图在Matlab中使用线性同余发生器来解决以下问题。下面显示了我函数的代码行。 m
基本上是您可以预期的值范围的最大值,因此取决于问题。初始种子x
首先由时钟确定,然后将每个随机数反馈到该函数中以产生新的种子。选择lcg值的规则在这里给出http://en.wikipedia.org/wiki/Linear_congruential_generator。我需要的是在指定期间a
和c
的好值。在Matlab中对lcg进行编程
我LCG代码
random_number = mod((a*x + c),m);
- Q1要求1和52(扑克手的概率)之间的随机数
- Q2要求1和366之间的随机数(生日悖论)
- Q3需要1和3之间的随机数(蒙蒂霍尔问题)
- Q4要求数字介于1和1000之间
我知道它可能看起来很简单,但在小范围内实现它往往会产生一个小周期的模式,即4位数字不断重复。
另外它也许可以使用不同的m
价值和过滤出我的要求范围以外的任何值,但老实说,我不认为这是必要的。 非常感谢
LCG的似乎容易出现周期性的,尤其是用小m的值。您可以使用较大的m值并适当缩放输出。 (参考:http://stackoverflow.com/questions/6415424/ - 见第二个答案+评论) – nkjt 2013-03-08 11:06:57