先回忆一下概率论的东西:
1.中心极限定理
2. 二项分布的极限分布
当二项分布的参数P很小时,泊松分布对二项分布的近似要好于正 态分布 而当p较大时,用泊松分布去逼近二项分布效果不好,相比之下,用正态分布来近似计算二项分布的值所得结果不错.当然,很明显地,如果p比较大,同时n的值很大,泊松分布的计算就很不方便,此时, 根据中心极限定理,用正态分布去逼近二项分布就是很自然的选择了。
利用中心极限定理生成符合正态分布的随机量:
根据独立同分布的中心极限定理,有:
这里,其实只要取n=12(这里,亦即生成12个0-1上的随机数序列)就会有比较好的效果。
代码如下:
public double Norm_rand(double miu, double sigma2){
double N = 12;
double x=0,temp=N;
do{
x=0;
for(inti=0;i<N;i++)
x=x+(Math.random());
x=(x-temp/2)/(Math.sqrt(temp/12));
x=miu+x*Math.sqrt(sigma2);
}while(x<=0); //在此我把小于0的数排除掉了
return x;
}
public double P_rand(double Lamda){ // 泊松分布
double x=0,b=1,c=Math.exp(-Lamda),u;
do {
u=Math.random();
b *=u;
if(b>=c)
x++;
}while(b>=c);
return x;
}
参考: 1 2 3