产生从用C数正态分布的随机数/ C++
问题描述:
我使用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????
感谢回答我的问题....
答
那么随机会给你,你说正确均匀分布的随机数。为了生成正态分布的变量,你可以使用易于实现的Box-Muller transformation。
接下来,你需要生成对数正态分布变量v
。通过计算v = exp(mu + sig * n)
其中n
是您的正态分布随机变量。
我不太明白你的范围3的意思是什么200作为对数正态分布具有支持] 0,INF [
答
你可能想看看lognormal_distribution
类中Boost random library。有关如何从给定分布生成数字的示例,请参见here(您必须使用给定的随机数生成器加上分布的实例来实例化boost::variate_generator
)。
我认为,最新的C++标准11具有用于此目的的库函数和头文件。 (也许Boost也有一些)。 – 2012-03-19 06:58:43
任意分布可以通过将逆分布函数应用于均匀分布的随机变量来获得。 Wy不使用这种通用方法? – user396672 2012-03-19 07:52:30
你使用C还是C++? – razlebe 2012-03-19 07:58:03