2012-03-19 79 views
0

我使用MS的视觉工作室2010产生从用C数正态分布的随机数/ C++

现在我想通过对数正态分布为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???? 

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

+0

我认为,最新的C++标准11具有用于此目的的库函数和头文件。 (也许Boost也有一些)。 – 2012-03-19 06:58:43

+2

任意分布可以通过将逆分布函数应用于均匀分布的随机变量来获得。 Wy不使用这种通用方法? – user396672 2012-03-19 07:52:30

+0

你使用C还是C++? – razlebe 2012-03-19 07:58:03

回答

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)。