0

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

4

3 回答 3

2

如果您希望期望值为 7.5,只需使用外部库函数或通过实现您自己的逆变换例程来生成速率为 1/7.5 的指数。

如果您希望 100 个值的平均值恰好为 7.5,您可以玩一些有趣的游戏来实现这一点。要获得 100 个事物的平均值 7.5,它们的总和必须是 750。事实证明,在范围 R 上均匀分布 N 个点会产生一个速率为 N/R 的泊松过程,泊松事件之间的距离呈指数分布,其中相同的比率。这导致了以下(且相对简单的)算法:

  1. poisson创建一个长度为 101的数组,其中包含值 0 和 750。
  2. 通过生成 99 个额外的数字来填充数组的其余部分,这些数字均匀分布在 0 到 750 之间。
  3. 对数组进行排序。
  4. i = 1,...,100 的输出poisson[i] - poisson[i-1]

我的 Java 生锈了,所以我用不同的语言实现了它,但这里是使用统计包 JMP 分析时的结果:

平均值正好等于 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] }
于 2017-07-10T14:13:28.053 回答
0

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

对于指数分布a*e^(-a*x),您必须选择aas 1 / 7.5

于 2017-07-10T13:08:08.247 回答
0

Apache Commons MathExponentialDistribution一个类,您可以将其实例化为传递平均值,这可能是您正在寻找的,但需要注意的是,您绘制的数字越多,您将越接近您的平均值。

于 2017-07-10T13:08:12.123 回答