在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()无法实现的好处是什么?

(*)-高斯返回值是在极坐标中生成的矢量的正弦和余弦分量,因此是正交的。对于高斯人,正交性意味着独立。

09-12 12:02