10 java random distribution generator poisson
据我所知,标准发生器用于正态分布.我必须根据Normal,Uniform和Poisson分布生成随机数,但我似乎找不到最后2个的类.
我必须在0 - 999999范围内生成它们.
Sim*_*son 12
正如David指出的那样,提供的伪随机数生成器使用Uniform分布.
对于另外两个,我会使用Cern Colt库函数:
这些库函数可以让您轻松地找到从每个分布中获取的随机数,而不是为您提供概率密度函数或累积密度函数,并期望您自己导出数字(这似乎是Apache Commons-Math方法):
RandomEngine engine = new DRand();
Poisson poisson = new Poisson(lambda, engine);
int poissonObs = poisson.nextInt();
Normal normal = new Normal(mean, variance, engine);
double normalObs = normal.nextDouble();
Run Code Online (Sandbox Code Playgroud)
另外,请记住,大λ的泊松分布P(λ)可以通过正态分布N(λ,sqrt(λ))很好地近似.
标准Java RNG(java.util.Random)及其子类(如java.security.SecureRandom)已生成均匀分布的值.
它们还有一个方法nextGaussian,它返回正态分布的值.默认情况下,分布的均值为零,标准差为1,但这是一个简单的调整.只需乘以所需的sd并添加所需的平均值即可.因此,例如,如果您想要平均值为6且标准差为2.5的正态分布值,则执行以下操作:
double value = rng.nextGaussian() * 2.5 + 6;
Run Code Online (Sandbox Code Playgroud)
Poisson分布没有明确支持,但您可以通过与Tom的Python代码相同来伪造它.
或者,您可能对我的Uncommons Maths库感兴趣,该库提供Normal,Poisson和其他分布的实用程序类.