0

我正在使用 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????

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

4

3 回答 3

3

正如你所说的那样,随机会给你均匀分布的随机数。为了生成具有正态分布的变量,您可以使用易于实现的Box-Muller 变换。

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

我不太明白你在 3 到 200 之间的意思是什么,因为对数正态分布支持 ]0,inf[

于 2012-03-19T08:00:18.683 回答
2

您可能想查看Boost random librarylognormal_distribution中的类。有关如何从给定分布生成数字的示例,请参见此处(您必须使用给定的随机数生成器和分布实例来实例化 a)。boost::variate_generator

于 2012-03-19T08:06:52.840 回答
0

除了 Azrael3000 的回答,

让对数正态变量 lgn 生成为 lgn = exp(mu + sig * stdn),其中 stdn 是标准正态变量,那么我们必须注意,上面等式的 mu 和 sig 给出为:

如果 m 和 v 是非对数样本值的均值和方差

亩方程

sigma^2 方程

参考:wiki - Log-normal_distribution

于 2019-10-06T04:37:10.127 回答