可能重複:
Generate random number with non-uniform density隨機數,具有不均勻分佈
我試圖確定/創建給我數的不均勻分佈序列的功能(在Java中)。 如果我有說function f(x), and x>0
的功能,它會給我一個隨機數 從0
到x
。
該函數最適用於任何給定的x
,下面的這個例子只是我想要的一個例子。
但是,如果我們說x=100
函數f(x)
將返回s nonunifrom分佈。
而且我想例如說
0 to 20
全部案件的20%左右。
21 to 50
是所有案件約50%。
51 to 70
是所有案件約20%。
71 to 100
爲大約10的所有情況。
簡而言之,給我一個像正常分佈的數字,它偷看在30-40在這種情況下x
是100
。
http://en.wikipedia.org/wiki/Normal_distribution
(我可以用一個統一的隨機根的分數,如果需要,也只有一個功能,將transfrom統一的結果,以不均勻的結果。)
編輯
我對這個問題的最終解決方案是:
/**
* Return a value from [0,1] and mean as 0.3, It give 10% of it is lower
* then 0.1. 5% is higher then 0.8 and 30% is in rang 0.25 to 0.45
*
* @return
*/
public double nextMyGaussian() {
double d = -1000;
while (d < -1.5) {
// RANDOMis Java's normal Random() class.
// The nextGaussian is normal give a value from -5 to +5?
d = RANDOM.nextGaussian() * 1.5;
}
if (d > 3.5d) {
return 1;
}
return ((d + 1.5)/5);
}
有Math.nextGaussian(),但它使用一個標準偏差,並可能會生成一個無限大的數字,需要bucketing。 – Alex
爲什麼'CrudeDistribution'和'TRIALS'包的範圍? –
我認爲這是最接近這個問題的帖子。 'Steve Kuo'沒關係,可能不是純Java代碼。 –