пример алгоритма генерации случайного значения в наборе данных с нормальным распределением? - PullRequest
3 голосов
/ 13 октября 2010

Я пытаюсь сгенерировать несколько случайных чисел с простой неоднородной вероятностью для имитации реальных данных для целей тестирования. Я ищу функцию, которая принимает mu и sigma в качестве параметров и возвращает x, где вероятно, что x находится в определенных диапазонах, соответствует стандартной кривой колокола или около того. Это не должно быть супер точным или даже эффективным. Полученный набор данных не обязательно должен соответствовать точным мю и сигме, которые я установил. Я просто ищу относительно простой генератор неоднородных случайных чисел. Ограничение набора возможных возвращаемых значений в ints было бы хорошо. Я видел много предложений, но ни одно из них не подходит под этот простой случай.

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

Преобразование Бокса-Мюллера в двух словах:

Сначала получите два независимых, равномерных случайных числа из интервала (0, 1], назовите их U и V.

Тогда вы можете получить два независимых, единично-нормальных распределенных случайных числа из формул

X = sqrt(-2 * log(U)) * cos(2 * pi * V);
Y = sqrt(-2 * log(U)) * sin(2 * pi * V);

Это дает вам случайные числа для mu = 0, sigma = 1; чтобы установить sigma = s, умножьте ваши случайные числа на s; чтобы установить mu = m, добавьте m к своим случайным числам.

0 голосов
/ 31 августа 2011

Моя первая мысль: почему вы не можете использовать существующую библиотеку?Я уверен, что в большинстве языков уже есть библиотека для генерации нормальных случайных чисел.

Если по какой-то причине вы не можете использовать существующую библиотеку, то метод, описанный @ellisbben, достаточно прост для программирования.Еще более простой (приблизительный) алгоритм состоит в суммировании 12 одинаковых чисел:

X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
   X += U

Значение X приблизительно нормальное.На следующем рисунке показано 10 ^ 5 отрисовок по этому алгоритму по сравнению с нормальным распределением.

enter image description here

...