2010-04-07 119 views
1

我目前正在開發一個項目,我需要生成多個值(最好是浮點數或雙精度值),它們遵循具有給定指數的冪律分佈!使用MathNet在C#中給定指數的冪律分佈

我被建議使用MathNet.Iridium庫來幫助我。我遇到的問題是,如果有任何文檔,文檔不像應該那樣明確!

我看到符合冪律分佈的一般思想的多個分佈,但我無法確定一個良好的分佈以使用某個指數作爲參數。

有沒有人有更多的經驗,可以給我一些提示或建議?

回答

1

要生成您選擇的分佈的值,您可以使用逆向累積分佈函數,如wikipedia中所述。

一步一步來,這將是這樣的:

  1. 選擇一個你喜歡的分佈函數。
  2. 使用筆和紙來計算逆累積分佈函數。
  3. 根據單位間隔上的均勻分佈生成一個值。 Random在這裏會做得很好。
  4. 將值輸入到您的ICDF。

結果是使用您選擇的分佈函數隨機選擇的值。

如果遇到步驟2的問題,也許https://mathoverflow.net/的人可以幫助你。

編輯:如果你只是需要用指數伽馬任何冪律分佈,這將產生一個價值:

double r = 1.0/Math.Pow(1-new Random().NextDouble(), 1.0/(gamma+1)); 
+0

我的問題是選擇的,因爲缺少文件的分佈函數。我有一個我知道的基礎X和我知道的冪律指數伽馬。我可以使用一個隨機數生成一些抖動,並與指數一起修改我的基數。但問題是,我希望我的結果集遵循冪律分佈。我被告知,這將有可能使用MathNet.Iridium的分佈之一,它將確保您獲得的值最終將遵循冪律分佈。 我真的不明白爲什麼我需要ICDF。 – Eric 2010-04-07 13:20:18

+0

@Eric:我查看了Math.Iridium的完整功能列表中列出的概率分佈,這些似乎都不是任意指數的冪律,所以我認爲你需要建立自己的。 – Jens 2010-04-07 13:30:47

+0

謝謝你的幫助!我會看看我能做什麼! – Eric 2010-04-08 06:44:10