我正在考虑为这个随机数生成器使用指数分布。如果我生成大约100个数字,它应该平均到特定值,即7.5。我该怎么做?
答案 0 :(得分:2)
如果您希望预期值为7.5,则只需使用外部库函数或实现自己的inverse transform routine生成速率为1 / 7.5的指数。
如果您希望100个值的平均值精确到7.5,那么您可以玩一些有趣的游戏来实现这一目标。为了得到平均7.5的100个东西,它们的总和必须是750.事实证明,在范围R上均匀分布N个点产生具有速率N / R的泊松过程,并且泊松出现之间的距离具有指数分布。同样的速度。这导致了以下(和相对简单的)算法:
poisson
,其中包含值0和750。poisson[i] - poisson[i-1]
表示i = 1,...,100。我的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] }
答案 1 :(得分:0)
如果您选择的分配有一些参数值,请选择它们,以使您的分布具有7.5
的预期值使用指数分布a*e^(-a*x)
,您必须选择a
作为1 / 7.5
。
答案 2 :(得分:0)
Apache Commons Math有ExponentialDistribution
类你可以实例化传递给它的意思,这可能是你正在寻找的警告,你绘制的数字越多,你将得到你的平均值。