回答
的GNU科學圖書館(GSL),http://www.gnu.org/software/gsl/,提供了大量的非均勻分佈的隨機 - 參見手冊中的「隨機數分佈」的第19章。 (統一的隨機數發生器在第17章「隨機數發生」中)。該實現是在C.
我在此相關的問題一些有趣的迴應:
對於Java,一種選擇是我的Uncommons Maths庫。它支持均勻,高斯,二項式,泊松和指數分佈。有一個WebStart demo,所以你可以看到它的作用。
看一看Alglib's implementations,他們有幾種語言來實現一些基本的分佈。
這個鏈接指向算法的幾個分佈函數的計算,但我沒有找到任何算法來計算從分佈中抽取的隨機數。 – 2009-11-07 06:02:22
是的,的確如此,您必須使用單獨的RNG。例如,invpoissondistribution(k,rng.nextDouble())會給你帶參數k的泊松變量。 – 2009-11-07 09:44:26
Numerical Recipe小號討論了隨機數生成器的幾個算法。
其實我已經寫了一些隨機數發生器的算法:Box-Muller,Rejection method等等。所以我只是在尋找具有聲譽的庫來生成非均勻分佈的強隨機數 – 2009-11-07 00:19:05
Boost具有相當廣泛的選擇隨機數的產生,再加上通過幾個分佈來過濾這些的能力。
隨着C++ 11有很多可用於在random頭產生非均勻僞隨機數新的選擇。下面的代碼示例演示了一些可能的非均勻分佈可能的:使用正常分佈,你會看到
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
//
// Distribtuions
//
std::normal_distribution<> dist(2, 2);
//std::student_t_distribution<> dist(5);
//std::poisson_distribution<> dist(2);
//std::extreme_value_distribution<> dist(0,2);
//std::lognormal_distribution<> dist(1.6, 0.25);
//std::exponential_distribution<> dist(1);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::round(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
輸出與此類似:
-5
-4
-3
-2 *
-1 ***
0 ******
1 ********
2 *********
3 ********
4 ******
5 ***
6 *
7
8
9
- 1. 非均勻隨機數生成器
- 2. Omnet ++均勻隨機數生成
- 3. 僞隨機選擇均勻分佈的數據
- 4. 非均勻隨機發生器
- 5. 隨機均勻分佈
- 6. 隨機均勻分佈
- 7. 均勻分佈的隨機數
- 8. 非均勻分佈的隨機數組
- 9. 隨機點不是均勻分佈
- 10. 使隨機數均勻在C++
- 11. 生成500行隨機數,30行,均勻分佈
- 12. 您的僞隨機數發生器(PRNG)是否不夠隨機?
- 13. 通過平均5個均勻樣本的正態隨機數?
- 14. 隨機數產生
- 15. 隨機數產生
- 16. 用於生成均勻分佈的隨機位集的方法
- 17. 隨機均勻選擇像素
- 18. 隨機均勻森林迴歸
- 19. 僞隨機的URL生成
- 20. 如何生成均勻分佈的隨機DFA?
- 21. 如何讓我的代碼產生僞隨機整數
- 22. UUID隨機數的產生
- 23. 生成可靠的僞隨機數
- 24. 生成均勻隨機變量時下限爲接近零
- 25. 在給定範圍內生成均勻隨機偏差
- 26. 產生兩個不同的隨機數
- 27. 避免在R中產生僞隨機數
- 28. 隨機二進制生成器(不僞)
- 29. 隨機數發生器產生相同的隨機數
- 30. 在C++的特定範圍內生成隨機均勻可分的數字?
的http://計算器。 com/questions/1534285/non-uniform-random-number-generator-implementation和http://stackoverflow.com/questions/977354/generating-non-uniform-random-numbers等等。這裏沒有封閉的形式分佈的特殊情況:http://stackoverflow.com/questions/423006/how-do-i-generate-points-that-match-a-histogram – dmckee 2009-11-07 01:29:41