供參考:隨機==僞隨機當生成正態分佈的隨機值時,定義範圍的最有效方法是什麼?
A.產生均勻隨機數的情況下,我可以指定一個範圍,即:
(Math.random()-Math.random())*10+5
//generates numbers between -5 and 15
B.產生具有版本的一組隨機值的高斯式的正常隨機性:
//pass in the mean and standard deviation
function randomNorm(mean, stdev) {
return Math.round((Math.random()*2-1)+(Math.random()*2-1)+(Math.random()*2-1))*stdev+mean);
}
//using the following values:
{
mean:400,
standard_deviation:1
//results in a range of 397-403, or +-range of 3
},
{
mean:400,
standard_deviation:10
//results in a range of 372-429, or +-range of 30
},
{
mean:400,
standard_deviation:25
//results in a range of 326-471, or +-range of 75
}
每一個給我一個範圍大約爲standard_deviation *(+ - 3)(假設我離開運行更長的程序)。
C.我可如下計算這個範圍:
- 假設我想從300-500的範圍內,所以無功TOTAL_RANGE = 200;
- 我的意思是400,我的+範圍是total_range/2(var r = 100)
- 因此standard_deviation將是r/3或在這種情況下是33.333。
這似乎是工作,但我不知道我的數學這樣做我覺得自己像個白癡,這個解決方案感到缺憾和不完全準確。
我的問題: 有沒有一些公式可以幫助我呢?我的要求如下:
- 必須能夠準確地定義一個數字範圍。
- 必須儘可能高效地在JavaScript中完成。
我想也許我很接近,但它不是那裏。
@jared:這只是數字足以讓逼近合理貼近實際的正態分佈。看到這個比較:http://en.wikipedia.org/wiki/File:Dice_sum_central_limit_theorem.svg其中原始代碼將對應於'n = 2' – Guffa
謝謝! 所以這裏是如下的邏輯: http://jsfiddle.net/jareds/D6Nub/ 2,3,4,5,6,12隨機量 - 2,4,5,6都會產生類似的鐘形曲線..所以這些都是類似的鐘形曲線。我會繼續尋找,但我認爲這是我的答案。再次感謝。 – jared
爲了得到一個N(0,1),你必須執行'* 2'而不是'/ 3',因爲[那個分佈]的方差(https://en.wikipedia.org/wiki/Irwin%E2%80% 93Hall_distribution)是「n/12」,即「n」是所添加的隨機數的數量。那麼如果你想要一個特定的標準偏差就乘以它。 – rodrigo