我希望生成符合给定均值和方差的正态分布随机数。如何做到这一点?
如果您能以Java的上下文来解释就更好了。以下是一些答案供参考,但它们并不精确。 在C/C++中生成符合正态分布的随机数。
如果您能以Java的上下文来解释就更好了。以下是一些答案供参考,但它们并不精确。 在C/C++中生成符合正态分布的随机数。
无耻地从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));
}
}
nextGaussian
方法生成的是标准正态分布,而不是均匀分布。其次,标准正态分布应该按照标准差而不是方差进行缩放。 - pjs
nextGaussian()
(来自java.util.Random
),将其乘以方差的平方根,然后加上均值。 - pjs