【问题标题】:Generating numbers which follow Normal Distribution in Java在 Java 中生成遵循正态分布的数字
【发布时间】:2015-04-01 11:20:04
【问题描述】:

我想(随机)生成数字,使数字遵循给定均值和方差的正态分布。我怎样才能做到这一点?

如果你能在 Java 的上下文中给出这个会更好。 人们可能会在这些答案中寻求帮助:但它们并不精确。 Generate random numbers following a normal distribution in C/C++

【问题讨论】:

  • 链接问题的一些答案中有实际代码,以及带有实际代码的维基百科页面的链接。由于代码有效并且转换为 Java 很简单,我看不出什么是“不精确”。
  • 使用Java内置的nextGaussian()(来自java.util.Random),乘以方差的平方根,然后加上平均值。

标签: java algorithm random normal-distribution


【解决方案1】:

无耻地用谷歌搜索并取自:http://www.javapractices.com/topic/TopicAction.do?Id=62

“魔法”发生在Random.nextGaussian()内部

import java.util.Random;

/** 
 Generate pseudo-random floating point values, with an 
 approximately Gaussian (normal) distribution.

 Many physical measurements have an approximately Gaussian 
 distribution; this provides a way of simulating such values. 
*/
public final class RandomGaussian {

  public static void main(String... aArgs){
    RandomGaussian gaussian = new RandomGaussian();
    double MEAN = 100.0f; 
    double VARIANCE = 5.0f;
    for (int idx = 1; idx <= 10; ++idx){
      log("Generated : " + gaussian.getGaussian(MEAN, VARIANCE));
    }
  }

  private Random fRandom = new Random();

  private double getGaussian(double aMean, double aVariance){
    return aMean + fRandom.nextGaussian() * aVariance;
  }

  private static void log(Object aMsg){
    System.out.println(String.valueOf(aMsg));
  }
} 

【讨论】:

  • 谢谢。这应该有效。你能告诉我为什么有方差而不是根(方差)的乘法:return aMean + fRandom.nextGaussian() * aVariance;
  • @Manoj 因为 sn-p 的作者从未计算过样本方差?
  • 我猜这里的方差是指标准差。
  • @rici 您的描述有两个错误。首先,nextGaussian 方法生成标准法线,而不是统一法线。其次,标准正态应该按标准差而不是方差来衡量。
  • @pjs:有罪。
猜你喜欢
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多