генерировать случайное число из нормального распределения журнала в C / C ++ - PullRequest
0 голосов
/ 19 марта 2012

Я использую 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????

спасибо, что ответили на мой вопрос ....

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Ну, случайно вы получите равномерно распределенные случайные числа, как вы сказали правильно. Для генерации переменных с нормальным распределением вы можете использовать преобразование Бокса-Мюллера , которое просто реализовать.

Далее вам нужно сгенерировать логнормальную переменную v. Вычисляя v = exp(mu + sig * n), где n - ваша обычная распределенная случайная величина.

Я не совсем понимаю, что вы имеете в виду в диапазоне от 3 до 200, так как логнормальное распределение имеет поддержку] 0, inf [

2 голосов
/ 19 марта 2012

Возможно, вы захотите взглянуть на класс lognormal_distribution внутри Увеличить случайную библиотеку .См. здесь для примера того, как генерировать числа из заданного распределения (вы должны создать экземпляр boost::variate_generator с заданным генератором случайных чисел плюс экземпляр распределения).

...