gpt4 book ai didi

Java使用beta分布生成0到1的随机数

转载 作者:行者123 更新时间:2023-11-30 11:38:26 25 4
gpt4 key购买 nike

我需要使用 beta 分布 Beta(a, b) 来生成一个从 0 到 1 的随机数。

我找到了类 BetaDist,它具有构造函数 BetaDist(double alpha, double beta),它构造一个 BetaDist 对象,参数为 α = alpha 和 β = beta 以及默认域 (0, 1)。

但是,我找不到可以仅使用 alpha 和 beta 返回使用 BetaDist 对象随机绘制的 x (0, 1) 的方法。

我读了另一篇关于 stackoverflow 的帖子说:从具有无跳跃 cdf 的任意分布生成随机数的一般方法是使用 cdf 的反函数:G(y)=F^{-1}(y)。如果 u(1), ..., u(n) 是服从 (0,1) 分布的随机数,则 G(u(1)), ..., G(u(n)) 是随机数从具有 cdf F(x) 的分布中抽样。

BetaDist 类确实有 cdf(double x) 方法,但我仍然不知道下一步该做什么。我没有学过统计,上面的帖子对我来说还是太复杂了。

非常感谢。

最佳答案

我刚刚遇到了和你一样的问题。您提到的方案是有效的,我刚刚在我的案例中进行了测试。

过程如下:

  1. 生成一个 beta 分布——带有参数 alpha 和 beta 的 beta;
  2. 从均匀分布生成随机数--x;
  3. 调用逆向cdf获取beta分布的随机数--b,这里“x”作为函数输入,逆向cdf可以返回你想要的随机数。注意:beta 分布应该有一个逆 cdf 来执行此操作,而不仅仅是 cdf。

    import org.apache.commons.math3.distribution.BetaDistribution;

    public class test {
    /**
    * @param args
    */
    public static void main(String[] args) {
    double x;
    double b;
    BetaDistribution beta = new BetaDistribution(40.0, 40.0);
    for (int i = 0; i < 100; i++) {
    x = Math.random();
    b = beta.inverseCumulativeProbability(x);
    System.out.println(b);
    }
    }
    }

关于Java使用beta分布生成0到1的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634170/

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