我正在尋找一種方法來生成一組具有指定的平均值和性病的整數。偏差。生成一組大小爲N的整數的最佳方法,如正態分佈,給定均值和標準差。偏差
使用隨機庫,它可以生成一組分佈在高斯的方式隨機雙打,這將是這個樣子:
#include <tr1/random>
std::tr1::normal_distribution<double> normal(mean, stdDev);
std::tr1::ranlux64_base_01 eng;
eng.seed(1000);
for (int i = 0; i < N; i++)
{
gaussiannums[i] = normal(eng);
}
但是,對於我的申請,我需要整數,而不是雙打。所以我的問題是,你如何產生上述的等價物,而不是雙數的整數?採取一種可能的路徑是在雙打轉換成整數,以某種方式,但我不知道有足夠的瞭解隨機庫是如何工作的知道這是否能以一種方式,真正保留了鐘形,平均/ STD完成。偏差。
我應該提到的是,這裏的目的與其說是隨機性的,因爲它是獲得一組特定大小的整數,用正確的均值和性病。偏差。
理想我也想指定的最小和可產生最大的價值,但我還沒有找到任何辦法,甚至對雙打做到這一點,所以在這個任何建議也歡迎。
當您說「高斯」時,您確實指定了最小值和最大值。你或者需要指定你的目標是什麼(你需要什麼樣的隨機性),而不是你的方法(生成「高斯」整數),或者返回並研究統計數據,以便理解爲什麼你的問題沒有意義。 (其中,要生成整數,你需要一個離散分佈,但高斯是連續的)。 –
我有點看到你的觀點,但我仍然認爲這很有道理。我想要做的是生成一系列分佈在一定範圍內的整數,滿足給定的均值和標準。開發。這是最重要的部分,但我也希望這些整數形成一個鐘形曲線,儘管它不能是嚴格的高斯曲線,但我希望它儘可能地保留這個屬性。也許四捨五入實際上就是這樣嗎? – ChrKroer
然後我建議你在你感興趣的整數範圍內計算一個高斯CDF,稍微拉伸以解釋缺失的尾部,並將它存儲在一個數組中。然後在[0:1]範圍內生成一致實數,並使用二分搜索來反轉CDF。這個從任意CDF生成樣本的過程非常標準。 –