gpt4 book ai didi

java - 可以使用共享的 Random 实例来获得高斯分布吗

转载 作者:行者123 更新时间:2023-12-01 13:41:05 26 4
gpt4 key购买 nike

在java类中,有两个方法之间共享的随机实例。

public class Utils{
Random rand = new Random();

public double nextGaussian1(){
return rand.nextGaussian();
}

public double nextGaussian2(){
return rand.nextGaussian();
}
}

我可以仅使用一个 Random 实例从 2 种方法中获取高斯分布吗?

最佳答案

是的,您可以使用一个Random实例。 nextGaussian() 的支持实现是 Box、Muller 和 Marsaglia 的 Polar 方法,它成对生成高斯函数。第一次调用它将生成一个值对并返回两个值中的第一个值,下一次调用将仅返回先前生成的第二个值。如果输入一致,则这些对在数学上是独立的(*)。从理论上讲,如果制服来自具有不良晶格结构的线性同余生成器,这可能会成为问题,但 Java 的 LCG 相当不错,并且在实践中,结果可以被认为对于大多数用途来说是有效独立的。

更大的问题是为什么需要两种不同的方法作为高斯源?这会给您带来什么好处,而仅调用 rand.nextGaussian() 无法实现?

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

关于java - 可以使用共享的 Random 实例来获得高斯分布吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com