2013-03-07 32 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和我的」;)