可能重复:
生成密度不均匀的随机数
我尝试识别/创建一个函数(在 Java 中),它给我一个非均匀分布的数字序列。如果我有一个函数说它function f(x), and x>0
会给我一个从0
to的随机数x
。
最适用于任何给定的功能x
,下面这只是我想要的一个示例。
但是,如果我们说x=100
该函数f(x)
将返回 s nonunifrom 分布式。
我想例如说
0 to 20
大约占所有情况的 20%。
21 to 50
大约占所有情况的 50%。
51 to 70
大约占所有情况的 20%。
71 to 100
大约是所有情况的 10。
简而言之,这给了我一个像正态分布这样的数字,在这种情况下它x
是30-40 100
。
http://en.wikipedia.org/wiki/Normal_distribution
(如果需要,我可以使用一个统一的随机生成作为分数,并且只有一个可以从统一结果转换为非统一结果的函数。)
编辑
我对这个问题的最终解决方案是:
/**
* 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);
}