请教大虾,怎样在java中实现正态分布?
我想用JAVA编一个能产生服从正态分布的随机数的程序,不知该如何编写,请大虾不吝赐教!!
教我如何求积分也行.
------解决方案--------------------根据独立同分布的中心极限定理,有:
这里,其实只要取n=12(这里,亦即生成12个0-1上的随机数序列)就会有比较好的效果。 经验证,用该种方法生成生的随机数序列同样能比较好的符合正态分布特性。
由于生成的都是标准正态分布,所以,当需要生成N(a,b)的正态分布随机量时,根据正态分布的线性变换特性,只要用x=b*x0+a即可。(其中,x0表示生成的符合N(0,1)分布的正态随机变量。)
自己编的代码如下:
public double Norm_rand(double miu, double sigma2){
double N = 12;
double x=0,temp=N;
do{
x=0;
for(int i=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;
}
------解决方案--------------------java.util.Random 类下有个 nextGaussian() 方法,就是用于产生服从正态分布数的,
没有必要自己再实现一个了。