根据C / C ++的对数正态分布生成一个随机数

问题描述 投票:0回答:3

我正在使用MS Visual Studio 2010。

现在我想通过对数正态分布生成一个介于3到200之间的随机数。

[我听说“中心极限定理”可以将均匀分布转换为正态分布,但是这对我来说似乎太有用了,因为我的范围有198个数字:

a = random(MaxRange+1); // mean i have to write this for 198 time???!!!!
x = (a+.......)/198 ; //this will obtain a number which is a normal distribution right???

然后,我可以写信

y = log (x);  // and is this mean that y is log normal distribution????

感谢您回答我的问题。...

c++ c normal-distribution
3个回答
3
投票

很好的随机数将为您提供正确分配的均匀分布的随机数。为了生成具有正态分布的变量,您可以使用易于实现的Box-Muller transformation

接下来,您需要生成对数正态变量v。通过计算v = exp(mu + sig * n),其中n是您的正态分布随机变量。

我不太了解您在3到200范围内的含义,因为对数正态分布支持] 0,inf [


2
投票

您可能想看看lognormal_distribution中的Boost random library类。有关如何从给定的分布中生成数字的示例,请参见here(您必须使用给定的随机数生成器加上该分布的一个实例来实例化boost::variate_generator。)>


0
投票

进一步了解Azrael3000的答案,

© www.soinside.com 2019 - 2024. All rights reserved.