我没有找到任何关于这个问题的帮助,所以我发布了一个关于它的新问题。我有一个包含三个值{min,average,standard dev。}的变量。如何生成此数组的对数正态分布,该随机分布将从对数正态分布中随机给出一个时间值。此外,如果我运行1000次,我会想要从1000次的每个对数正态分布中随机获得一个时间值。我怎么用java代码写这个?另外我想运行它1000次会给我平均数组中的平均值吗?
答案 0 :(得分:4)
首先生成标准正常值,并使用给定参数将它们转换为正态分布。最后提升到指数以获得具有给定均值和标准开发的对数正态分布。
Random rng = new Random(0);
double[] lognormalValues = new double[1000];
for (int i = 0; i < 1000; ++i)
{
stdNormal = rng.nextGaussian();
normalValue = stddev*stdNormal + mean;
logNormalValues[i] = Math.exp(normalValue);
}
答案 1 :(得分:0)
你也可以在这里获得内置功能。在上面的例子中,你实际上不会最终得到stddev并注明 - 当你exp()值时它们会改变。
答案 2 :(得分:0)
或者
public static double LogNormal(double mean, double stddev) {
Random randGen = new Random();
double varx = Math.pow(stddev, 2);
double ess = Math.log(1.0 + (varx/Math.pow(mean,2)));
double mu = Math.log(mean) - (0.5*Math.pow(ess, 2));
return Math.pow(2.71828, (mu+(ess*randGen.nextGaussian() ) ) );
}