在java中生成随机数,使它们平均到特定值

时间:2017-07-10 12:48:00

标签: java random exponential-distribution

我正在考虑为这个随机数生成器使用指数分布。如果我生成大约100个数字,它应该平均到特定值,即7.5。我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您希望预期值为7.5,则只需使用外部库函数或实现自己的inverse transform routine生成速率为1 / 7.5的指数。

如果您希望100个值的平均值精确到7.5,那么您可以玩一些有趣的游戏来实现这一目标。为了得到平均7.5的100个东西,它们的总和必须是750.事实证明,在范围R上均匀分布N个点产生具有速率N / R的泊松过程,并且泊松出现之间的距离具有指数分布。同样的速度。这导致了以下(和相对简单的)算法:

  1. 创建长度为101的数组poisson,其中包含值0和750。
  2. 通过生成99个额外的数字来填充阵列的其余部分,这些数字均匀分布在0到750之间。
  3. 对数组进行排序。
  4. 输出poisson[i] - poisson[i-1]表示i = 1,...,100。
  5. 我的Java生锈了,所以我用不同的语言实现了它,但是这里是使用统计软件包JMP进行分析的结果:

    Exponential distribution with average exactly equal to 7.5

    这是我在Ruby中的实现,它实际上是伪代码,以防你感兴趣。应该很容易转换为Java。

    N = 100
    TARGET_MEAN = 7.5
    
    total = N * TARGET_MEAN
    poisson = [0, total]
    (N - 1).times { poisson << rand(0.0..total) }
    poisson.sort!
    (1...poisson.length).each { |i| p poisson[i] - poisson[i-1] }
    

答案 1 :(得分:0)

如果您选择的分配有一些参数值,请选择它们,以使您的分布具有7.5

的预期值

使用指数分布a*e^(-a*x),您必须选择a作为1 / 7.5

答案 2 :(得分:0)

Apache Commons MathExponentialDistribution类你可以实例化传递给它的意思,这可能是你正在寻找的警告,你绘制的数字越多,你将得到你的平均值。