2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:08 
Здравствуйте!

Я использую VBA. Возник вопрос: "Как сгенерировать значение стандартной нормальной случайной величины, умея только генерировать значения равномерно распределенной случайной величины?"

Поиск в гугле дал следующую рекомендацию: $\sum^{12}_{n=1}{ RND()_{n}-6} $ будет распределно по стандартному нормальному распределению.

Возник вопрос, а почему так? Первое что пришло в голову - центральная предельная теорема. Посчитал моменты RND()
математическое ожидание - $(0+1)/2$, дисперсия - $1/12$ (в силу того, что эта случайная величина равномерно распределена на отрезке от 0 и до 1).

Далее, применяю цпт: $\frac{(S_n-\mu n)}{\sigma \sqrt{n}}=\frac{{(\sum^{12}_{n=1}{ RND()_{n}-3)}}}{\frac{1}{12}\sqrt{6}}$. Но это формула вообще не похожа на ту, что выдал гугл. Подскажите, где ошибка и если есть ошибка, то как ее исправить? Заранее спасибо за ответ!

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:13 
Аватара пользователя
До последнего абзаца всё правильно. Далее...$12 \cdot \frac 1 2=6$
Дисперсия и СКО - не одно и то же. n=12

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:30 
Аватара пользователя
gmt в сообщении #698308 писал(а):
Поиск в гугле дал следующую рекомендацию: $\sum^{12}_{n=1}{ RND()_{n}-6} $ будет распределно по стандартному нормальному распределению.
Наверное, следует уточнить: Очень хорошо приближает нормальное распределение с нулевым матожиданием и единичной дисперсией.

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:30 
Аватара пользователя
А вообще это отнюдь не лучший способ. Он был в моде лет пятьдесят тому, поскольку не требовал вычисления математических функций (которые тогдашними ЭВМ аппаратно не поддерживались, и требовали вызова подпрограмм, что резко замедляло работу). Но полученные случайные числа имели распределение довольно отличное от нормального. Несколько улучшала дело поправка Тейчроева (или Тичроу, так тоже транскрибировали), нелинейное преобразование посредством многочлена определённого вида (подробности у Кнута, т.2, гл. 3).
Куда практичнее преобразование Бокса-Мюллера
http://ru.wikipedia.org/wiki/%CF%F0%E5% ... B%E5%F0%E0
И я бы рекомендовал базисный (первый) вариант. Тригонометрия нынче быстрая.

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 19:52 
Евгений Машеров в сообщении #698330 писал(а):
Куда практичнее преобразование Бокса-Мюллера
http://ru.wikipedia.org/wiki/%CF%F0%E5% ... B%E5%F0%E0
А где можно увидеть вывод этого преобразования?

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 20:53 
Sonic86 в сообщении #698382 писал(а):
Евгений Машеров в сообщении #698330 писал(а):
Куда практичнее преобразование Бокса-Мюллера
http://ru.wikipedia.org/wiki/%CF%F0%E5% ... B%E5%F0%E0
А где можно увидеть вывод этого преобразования?

Можно посмотреть у Кнута во 2-м томе Искусства программирования пп. 3.4.1

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 21:05 
Аватара пользователя
У Ермакова, например. Вообще где про метод Монте-Карло, должно быть. Кнута уже помянули.

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 21:46 
Cash в сообщении #698418 писал(а):
Можно посмотреть у Кнута во 2-м томе Искусства программирования пп. 3.4.1
Евгений Машеров в сообщении #698425 писал(а):
У Ермакова, например. Вообще где про метод Монте-Карло, должно быть. Кнута уже помянули.
Спасибо, и там и тут нашел. Правда, у Ермакова все общЕе и страшнее.

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение20.03.2013, 08:06 
Аватара пользователя
Возможно, настала пора генерировать нормально распределённые величины, как $N=F^{-1}(U)$
Поскольку предложены интересные аппроксимации для обратной к нормальному функции.
http://www.mth.kcl.ac.uk/~shaww/web_pag ... hanics.pdf

-- 20 мар 2013, 08:43 --

(Оффтоп)

А ещё вспомню собственное творение, которое иначе, как мелкое интеллектуальное хулиганство, не назову;)
Генератор нормально распределённых с.ч. с самым большим в мире периодом. И без претензий, которые могут быть предложены к генераторам псевдослучайных чисел разного рода.
Итак (барабанный бой!)
16 равномерных генераторов, мультипликативных на максимальный период, причём периоды у всех разные и взаимно простые (то же относится и к последующим генераторам).
Их выход преобразуется полиномом 3-го порядка, чтобы среднее и третий момент были 0, дисперсия 1, а четвёртый момент 3 (т.е. получается "квазинормальное").
17й генератор - на сдвиговых регистрах, меняет знаки, если выдан единичный бит.
18й - "середина квадрата", на его основе вектор из 16 полученных тасуется (это уже продукт чтения 3-го тома Кнута, а не 2-го).
Затем преобразование Уолша-Адамара (такое себе Фурье для первоклассников, без умножений кроме как на 1 и -1). Сумма 16 не совсем нормально распределённых становится почти точно нормально распределённой.
19-й ещё один сдвиговый, меняющий знаки.
20-й "датчик Фибоначчи", ещё тасовка.
По запросу выдаётся очередное число из массива 16-ти, а если он исчерпан, вновь выполняется этот набор действий.
Получалось существенно быстрее, чем суммированием 12-ти, и ближе к нормальному. И даже быстрее, чем (на тогдашнем железе, ЕС-1022), чем Бокс-Мюллер (хотя и не ближе к нормальному, чем он) . А период был порядка $10^{90}$, так что несколько триллионов новемдециллионов жизней Вселенной повторов бы не было. Увы, это было единственное бесспорное преимущество...

 
 
 
 Детали реализации метода Бокса-Мюллера для одной СВ
Сообщение09.05.2013, 09:58 
Здравствуйте, поздравляю всех с праздником!

Прошу совета по двум простым вопрсам (нигде не нашёл их обсуждения):
1. Если нужна одна нормально распредёлённая случайная величина, то нужно просто вычислять только первую величину из метода Бокса-Мюллера?

2. Как вычислять две независимые равномерно распределённые случайные величины для метода Бокса-Мюллера?
Например, если на паскале написать
...
for i:=1 to N do begin
x:=random;
y:=random;
...
end;

то будут ли величины x, y независимыми?

Заранее спасибо,
Александр

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение09.05.2013, 14:47 
1. Если нужно только одно значение нормально распределенной случайной величины, то можно вычислить только первую величину из метода Бокса — Мюллера.

2. Да.

Aleksandr Pavlovich, обратите внимание на напоминание о запрете дублирования тем и сообщений.

 
 
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение10.05.2013, 15:24 
Аватара пользователя
1. Да, хоть это и не экономно.
2. С практической точки зрения они будут независимы, однако иногда прибегают к дополнительным приёмам повышения случайности (перетасовыванию и т.п.) Как правило, такая предосторожность излишня.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group