在java中生成随机数,使其平均为特定值

在java中生成随机数,使其平均为特定值,java,random,exponential-distribution,Java,Random,Exponential Distribution,我正在考虑对这个随机数生成器使用指数分布,如果我生成大约100个数字,它应该平均到一个特定的值,比如7.5。如何进行此操作?如果您选择的分布具有一些参数值,请选择它们,使您的分布具有7.5的预期值 对于指数分布a*e^(-a*x)您必须选择a作为1/7.5如果您选择的分布有一些参数值,请选择它们,使您的分布具有7.5的预期值 对于指数分布a*e^(-a*x)您必须选择a作为1/7.5具有指数分布类,您可以实例化将平均值传递给它,这可能就是你所要寻找的,需要注意的是,你画的数字越多,你就越接近你的

我正在考虑对这个随机数生成器使用指数分布,如果我生成大约100个数字,它应该平均到一个特定的值,比如7.5。如何进行此操作?

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


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

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


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

具有
指数分布
类,您可以实例化将平均值传递给它,这可能就是你所要寻找的,需要注意的是,你画的数字越多,你就越接近你的平均值。

指数分布
类,你可以实例化将平均值传递给它,这可能正是您所要寻找的,需要注意的是,您绘制的数字越多,就越接近您的平均值。

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

如果希望100个值的平均值正好为7.5,可以玩一些有趣的游戏来实现这一点。100件物品的平均值为7.5,其总和必须为750。结果表明,在R范围内均匀分布N个点会产生一个速率为N/R的泊松过程,并且泊松发生之间的距离具有相同速率的指数分布。这导致了以下(且相对简单)算法:

  • 创建一个长度为101的数组
    poisson
    ,其中包含值0和750
  • 通过生成99个均匀分布在0和750之间的额外数字来填充数组的其余部分
  • 对数组进行排序
  • 对于i=1,…,100,输出
    poisson[i]-poisson[i-1]
  • 我的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] }
    
    N=100
    目标平均值=7.5
    总计=N*目标值\平均值
    泊松=[0,总计]
    
    (N-1).times{poisson如果希望期望值为7.5,只需使用外部库函数或通过实现自己的函数来生成速率为1/7.5的指数

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

  • 创建一个长度为101的数组
    poisson
    ,其中包含值0和750
  • 通过生成99个均匀分布在0和750之间的额外数字来填充数组的其余部分
  • 对数组进行排序
  • 对于i=1,…,100,输出
    poisson[i]-poisson[i-1]
  • 我的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] }
    
    N=100
    目标平均值=7.5
    总计=N*目标值\平均值
    泊松=[0,总计]
    
    (N-1)次{poisson你希望期望值是7.5还是平均值?它们是不同的东西。期望值是分布参数化的确定属性,而平均值是数据的函数,虽然它将接近期望值,但会根据抽签的运气而变化。你希望期望值是是7.5,还是平均值?它们是不同的东西。期望值是分布参数化的确定性属性,而平均值是数据的函数,虽然它将接近期望值,但它将根据抽签的运气而变化。