Java怎样利用Math.random()产生泊松分布随机数
好久不用Java看到你的算法我不是很确定他是不是用的指数分布来产生泊松分布。但是泊松分布是离散型随机变量,其实还有更直接的算法。首先科普一下,如果一个随机变量的概率分布函数(CDF)为
,而
,即u是上的均匀分布,那么 【Java怎样利用Math.random()产生泊松分布随机数】
,即分布函数的逆函数在u处的值服从F所代表的分布。因为泊松分布是离散的,所以特别好写,因为不涉及求复杂分布函数的逆函数的问题。我用以上的思想自己写了一个C代码:#include\u0026lt;stdio.h\u0026gt;#include\u0026lt;stdlib.h\u0026gt;#include\u0026lt;math.h\u0026gt;int rand_p(double lambda);//生成随机数的主程序double PDF(int lambda, int x);//计算概率密度函数void main(){\tint N=1000,lambda=30;//设置样本容量为N,lambda\tint randnum;\tdouble sum,sum2;\tint i;\tfor (i=0;i\u0026lt;N;++i){\t\trandnum=rand_p(lambda);//生成随机数\t\tprintf("%d\",randnum);\t\tsum+=randnum;//计算随机数的和\t\tsum2+=pow(randnum,2);//计算随机数平方的和,为了计算方差\t}\tprintf("The mean: %f\",(double)sum/N);//计算平均\tprintf("The variance: %f\",(double)sum2/N-pow((double)sum/N,2));//计算方差}int rand_p(double lambda){\tdouble u=(double)rand()/RAND_MAX;//产生的均匀分布\tint x=0;\tdouble cdf=exp(-1.0*lambda);//x=0时的分布函数值\twhile (u\u0026gt;=cdf){\t\tx++;\t\tcdf+=PDF(lambda,x);//更新概率分布函数\t}\treturn x;}double PDF(int lambda, int k){\tdouble pdf=1;\tint i;\tfor (i=1;i\u0026lt;=k;++i)\t\tpdf*=(double)lambda/i;\treturn pdf*exp(-1.0*lambda);}注释已经很明晰了。输出结果:The mean: 29.922000The variance: 30.337916还记得泊松分布的期望方差都等于lambda吗,嗯,应该是对的。
■网友
我不太明白的是,用C写的,用的是服从均匀分布的随机数集去产生服从泊松分布的x集。如果从均匀分布每次产生的随机数的角度,然后计算在给定lamata下的泊松变量x作为泊松数集,也就是计算每个随机数在泊松分布下对应的x变量。但是从总体去考虑,假如我们100次循环,找到了100个服从泊松分布的x变量,可是在100个随机数还是均匀分布产生的,每个随机数对应的x变量类似坐标吧,是对应泊松分布的x变量,但这100个坐标集还是均匀分布产生的啊,那这100个x集还是服从均匀分布啊???这我有点绕不过来圈 是不是哪里想错了,希望有人能帮忙分析回答一下 谢谢噢 之前弄错了 大学搞懂的概念全还回去了,这其实就是保证等概率的均匀取值,然后再转化为对应泊松曲线上的取值点。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 河北承德危险废物综合利用处置率达100%
- 黄金时间■黄金时间丨打造海绵城市:节水从利用雨水开始
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- |淮阴水政充分利用“双随机”平台 促进执法公平公正
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
