要找到的概率分佈的值1/x
:
1/x
的積分是ln x
,正如@dbaupp指出的那樣,它的增長沒有限制。事實上,當x接近0時,ln x
的極限是無限的(負),和隨着它向正無窮增長的極限是無限的(正)。
所以我們對我們的職能範圍限制在一定的時間間隔[min, max)
,其中min > 0
無一不是有限的。
的q = ln x
倒數是x = e^q
,所以位數功能是e^[(ln max - ln min)q + ln(min)]
,其中q落在間隔[0,1)
一點代數後,變成(max/min)^q * min
= (max^q)(min^(1-q))
(我不知道哪形式更數值穩定)
所以,堵漏均勻分佈值範圍從0到1,如你會從nextDouble得到的,這個功能會給你一個值,並從給定的最小到最大:
public static double reciprocalQuantile(double q, double min, double max) {
return Math.pow(max, q)*Math.pow(min, 1-q);
}
所以,你可以說:
Random rand = new Random();
double value = reciprocalQuantile(rand.nextDouble(), 0.0001, 10000);
我覺得:-)請隨時檢查我的數學。
還有一點:你當然可以設置min到Double.MIN_VALUE和最大翻番。MAX_VALUE,但我對浮點表示知之甚少,不知道這是否會產生問題,如果是的話,我不知道這樣做需要多少/多少個數。它可能也不是很有用。一點測試顯示了很多非常微小的值和很多非常大的值 - 這並不奇怪,因爲頂部和底部的積分無限大。因此,要在漂亮的直方圖中獲得足夠的middlish範圍內的值,您需要一個值爲的。
'1/x',你的意思是統一概率嗎? – pablochan
對不起pablochan,但我不知道你的意思是一致的概率,我只是想隨機生成幾個值,並生成一組這樣的值給像1/x一樣的圖! – Mehdi
這是不可能的! 1/x以下的區域是無限的。 – huon