这次内容分为两部分,如果你对算法怎么实现没兴趣的话,看看简单版如何调用库函数就好了,如果你和我一样对算法又有那么点兴趣,那就接着看看进阶版,看不懂也不亏嘛。
简单版
如果不想自己写的话,Java util库中早就有提供好的标准正态分布的随机函数:
//标准正态随机分布
public static double StandardNormalDistribution(){
java.util.Random random = new java.util.Random();
return random.nextGaussian();
}
库里只有标准正态分布N(0,1),那么想得到满足N(u,v)的随机数怎么办呢,利用N(0,1)有个近似的简单算法:
//普通正态随机分布
//参数 u 均值
//参数 v 方差
public static double NormalDistribution(float u,float v){
java.util.Random random = new java.util.Random();
return Math.sqrt(v)*random.nextGaussian()+u;
}
有人可能会怀疑上面 Math.sqrt(v)*random.nextGaussian()+u 这个公式到底靠谱吗?我们先来证明下吧: