Java中利用Math.random()产生服从泊松分布的随机数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java中利⽤Math.random()产⽣服从泊松分布的随机数
众所周知。
Java的Math.random()产⽣的是服从均匀分布的随机数,可是其它分布的应⽤也相当⼴泛,⽐如泊松分布和⾼斯分布(正态分布)。
⽽这些分布Java没有⾮常好的提供(⾼斯分布能够利⽤Ran ⾸先是泊松分布,这是⼀个离散型的随机变量分布。
⽐較好弄,此外⽐如考察⼀些到达事件的概率时,通常服从泊松分布,因此该分布相当有⽤。
在開始编写之前,先感谢知乎⼀位⼤神的科普知识。
为随机变量x的累计分布函数,那么F-1(u)的变量服从F分布。
即F的逆函数是服从F的随机变量。
代码例如以下:
<span style="white-space:pre"> </span>private static int getPossionVariable(double lamda) {
int x = 0;
double y = Math.random(), cdf = getPossionProbability(x, lamda);
while (cdf < y) {
x++;
cdf += getPossionProbability(x, lamda);
}
return x;
}
private static double getPossionProbability(int k, double lamda) {
double c = Math.exp(-lamda), sum = 1;
for (int i = 1; i <= k; i++) {
sum *= lamda / i;
}
return sum * c;
}
计算过lamda分别为1,4,10的分布,产⽣1000个随机数。
跟维基百科的概率密度分布曲线相似,该⽅法应该有效。
正态分布因为是连续变量的分布。
所以求其随机变量⽐較困难,但能够利⽤中⼼极限定理产⽣,下次再说吧。