在java类中,有两个方法共享的随机实例。
public class Utils{
Random rand = new Random();
public double nextGaussian1(){
return rand.nextGaussian();
}
public double nextGaussian2(){
return rand.nextGaussian();
}
}
我可以仅使用一个随机实例从两种方法中获得高斯分布吗?
最佳答案
是的,您可以使用Random
的一个实例。 nextGaussian()
的支持实现是Box,Muller和Marsaglia的Polar方法,该方法成对生成高斯。对其的第一个调用将生成一个对,并返回两个值中的第一个,而下一个调用将仅返回先前生成的第二个值。如果统一输入是,则这些对在数学上是独立的(*)。从理论上讲,如果制服来自具有不良晶格结构的线性同余生成器,那么这可能是一个问题,但是Java的LCG相当不错,实际上,对于大多数用途,结果可以认为是有效独立的。
更大的问题是,为什么您需要两种不同的方法来获得高斯信号?仅仅调用rand.nextGaussian()
无法实现的好处是什么?
(*)-高斯返回值是在极坐标中生成的矢量的正弦和余弦分量,因此是正交的。对于高斯人,正交性意味着独立。