我正在考虑对这个随机数发生器使用指数分布,如果我生成一个大约100个数字,它应该平均到一个特定的值,比如7.5。我该怎么做?
发布于 2017-07-10 14:13:28
如果您希望期望值为7.5,只需使用外部库函数或通过实现您自己的逆变换程序来生成倍数为1/7.5的指数。
如果你希望100个数值的平均值正好是7.5,你可以玩一些有趣的游戏来实现这一点。要想用100件东西平均得到7.5件,它们的总和必须是750件。结果表明,在R上均匀分布N个点,得到一个速率为N/R的泊松过程,泊松发生之间的距离呈指数分布,且速率相同。这导致了以下(并且相对简单)算法:
poisson,其中包含值0和750。我的Java很生疏,所以我用另一种语言实现了它,但是下面是使用统计信息包JMP进行分析时的结果:

下面是我在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-10 13:08:08
如果您选择的发行版有一些参数值,请选择它们,这样您的发行版的期望值为7.5。
对于指数分布a*e^(-a*x),您必须选择a作为1 / 7.5。
发布于 2017-07-10 13:08:12
Apache Commons Math有ExponentialDistribution类,您可以实例化传递给它的均值,这可能是您要寻找的,但是请注意,您画的数字越多,就越接近平均值。
https://stackoverflow.com/questions/45012517
复制相似问题