2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



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


19/03/13
1
Здравствуйте!

Я использую 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 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
До последнего абзаца всё правильно. Далее...$12 \cdot \frac 1 2=6$
Дисперсия и СКО - не одно и то же. n=12

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:30 
Заслуженный участник
Аватара пользователя


28/09/06
10853
gmt в сообщении #698308 писал(а):
Поиск в гугле дал следующую рекомендацию: $\sum^{12}_{n=1}{ RND()_{n}-6} $ будет распределно по стандартному нормальному распределению.
Наверное, следует уточнить: Очень хорошо приближает нормальное распределение с нулевым матожиданием и единичной дисперсией.

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 18:30 
Заслуженный участник
Аватара пользователя


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

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 19:52 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 20:53 
Заслуженный участник


12/09/10
1547
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 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
У Ермакова, например. Вообще где про метод Монте-Карло, должно быть. Кнута уже помянули.

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение19.03.2013, 21:46 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение20.03.2013, 08:06 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
Возможно, настала пора генерировать нормально распределённые величины, как $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 


05/05/12
11
Здравствуйте, поздравляю всех с праздником!

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

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

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

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

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение09.05.2013, 14:47 
Заслуженный участник


12/07/07
4522
1. Если нужно только одно значение нормально распределенной случайной величины, то можно вычислить только первую величину из метода Бокса — Мюллера.

2. Да.

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

 Профиль  
                  
 
 Re: Генерирование стандартной нормальной случайной величины
Сообщение10.05.2013, 15:24 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
1. Да, хоть это и не экономно.
2. С практической точки зрения они будут независимы, однако иногда прибегают к дополнительным приёмам повышения случайности (перетасовыванию и т.п.) Как правило, такая предосторожность излишня.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group