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