也許我在想這個,但我試圖找到一個很好的方法來獲得均勻對數分佈的兩點之間的隨機數。 假設我有兩個界限0.001和1000,我想找到6個對數均勻分佈的隨機數。所以這些數字如:0.002,0.033,0.543,1.634,34.673,765.234 ......現在說我正在尋找7個隨機數字,他們會在這個範圍內大致均勻排序......我正在使用Java隨機雙偶數之間的對數分佈
0
A
回答
0
這是你想要的嗎?我將數字均勻分佈在由限制日誌形成的範圍內,然後使用Math.exp將其轉換回實際範圍。我對結果數組排序,因爲您的示例顯示了排序數據。如果你不想要的話,刪除Arrays.sort調用。
爲了簡單起見,我跳過了邊界檢查。據推測,0 < lowerLimit < upperLimit。
限制的檢查是因爲舍入誤差可能會至少在理論上導致超出要求範圍的結果。
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random rand = new Random(3);
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
}
public static double[] logRandom(Random rand, double lowerLimit,
double upperLimit, int count) {
double[] result = new double[count];
double logLower = Math.log(lowerLimit);
double logUpper = Math.log(upperLimit);
for (int i = 0; i < count; i++) {
double raw = rand.nextDouble();
result[i] = Math.exp(raw * (logUpper - logLower) + logLower);
if (result[i] < lowerLimit) {
result[i] = lowerLimit;
} else if (result[i] > upperLimit) {
result[i] = upperLimit;
}
}
Arrays.sort(result);
return result;
}
}
+0
非常感謝你......這正是我需要的,你的救星:) – Matt 2014-11-22 12:28:26
相關問題
- 1. 隨機數生成兩個區間之間的雙打[a,b]
- 2. 用R中的雙變量伽馬分佈生成隨機數
- 3. 如何生成[0,1]和3分數之間的隨機數
- 4. 均勻分佈的隨機數
- 5. 非均勻分佈的隨機數組
- 6. 代50%和150%之間的隨機數
- 7. 隨機數之間的關係
- 8. 2值之間的隨機整數
- 9. sh在範圍之間的隨機數
- 10. Java:用對數分佈生成隨機數
- 11. 從隨機列表中配對偶數和奇數
- 12. 長時間均勻分佈的隨機數
- 13. 100的隨機數的奇數和偶數計數器
- 14. 隨機指數分佈怪異
- 15. R:分佈函數返回「隨機」值
- 16. Numba和隨機數從泊松分佈
- 17. 隨機數80和java之間120
- 18. 對象實例之間共享的隨機數?
- 19. 偶數和奇數的隨機數字沒有重複
- 20. 如何在數據框之間隨機分配值
- 21. 用最小的間隔符/分佈填充隨機數組的數組?
- 22. 分佈行之間的DASK數據幀
- 23. Greenplum段之間的數據分佈
- 24. AngularJS:雙列奇/偶佈局
- 25. Sitemap隨着時間的推移而隨機分佈
- 26. 產生從用C數正態分佈的隨機數/ C++
- 27. 使用觀測數據的形狀生成隨機對數正態分佈
- 28. 獲得-1和1之間的隨機雙值
- 29. 產生-1到1之間的隨機雙斯威夫特
- 30. 兩個數字之間的隨機數字生成器 - MatLab
你可以用-3.0和3.0之間的均勻分佈生成隨機數嗎? – Beta 2014-11-22 06:36:13
這不是簡單的...(-3.0 +(3.0 + 3.0)* rand.nextDouble());我可以關閉,因爲我不確定負面,但對於3.0和1.0說它會是(1.0 +(3.0 - 1.0)* rand.nextDouble()); – Matt 2014-11-22 06:48:44