Преобразование Бокса-Мюллера
Aug. 6th, 2010 03:03 pmНа лекции написали по-быстренькому программу на Excel Монте-Карло для оценки опционов. В частности там понадобился генератор случайной переменной, подчиняющейся нормальному распределению. Я автоматом использую встроенную в Excel функцию (NORMSINV), на что преп говорит, что её использовать не надо, потому как она — медленная. Вместо её он предлагает написать самому функцию, которая берёт обычное случайное число (равномерное распределение между 0 и 1) и преобразовывает его в нужное нормальное.
Собственно, кроме как «хозяйке на заметку» (действительно, выходит на порядок быстрее), у меня вопрос — а почему в Excel такая медленная функция? Что мешает им использовать то же самое преобразование Бокса-Мюллера?
Варианты «Билл Гейтс — дурак, переходи на linux» не предлагать.
Собственно, кроме как «хозяйке на заметку» (действительно, выходит на порядок быстрее), у меня вопрос — а почему в Excel такая медленная функция? Что мешает им использовать то же самое преобразование Бокса-Мюллера?
Варианты «Билл Гейтс — дурак, переходи на linux» не предлагать.
no subject
Date: 2010-08-06 01:24 pm (UTC)Если в Excel Монте-Карло будет считаться одинаково быстро на пентиуме и на Dual Core.
no subject
Date: 2010-08-06 02:12 pm (UTC)no subject
Date: 2010-08-06 03:10 pm (UTC)(источник: http://www.sitmo.com/doc/Generating_Normal_Distributed_Random_Numbers)
no subject
Date: 2010-08-08 06:36 pm (UTC)no subject
Date: 2010-08-08 08:05 pm (UTC)Откровенно говоря, я могу только спекулировать, поскольку в последний раз использовал генераторы превдо-случайных чисел для серьезных вычислений больше 20 лет назад, когда про Excel я даже не слышал. А в последние годы мне хватало выборок в 1000.
Судя по тому что я смутно помню и что быстро посмотрел в Google (http://en.wikipedia.org/wiki/Low-discrepancy_sequence или http://www.wpi.edu/Pubs/ETD/Available/etd-0113104-140925/unrestricted/krykova.pdf), фишка заключалась в том, что для того, чтобы преобразование Бокса-Мюллера работало хорошо (например, не создавало плохого куртозиса - "толстых хвостов"), нужен был хороший изначальный генератор псевдо-случайных чисел. Low-discrepancy это как раз и есть характеристика псевдо-случайной последовательности, которая делает ее хорошим заменителем случайной последовательности в таких операциях (если взять произвольное подмножество/подыинтервал исходного множеста/интервала, то число псевдослучайных чисел, попавших в это подмножество не должно превышать меры этого подмножества). Особенно это было важно, когда полученные числа использовались для вычисления многомерных интегралов.
Раньше в Excel'е генератор был слишком плох (относительно высокая автокоррелация олучаемой последовательности), поэтому хвосты получались слишком толстые при использовании Бокса Мюллера. А после Excel 2003 генератор вроде бы подновили.
no subject
Date: 2010-08-09 07:11 am (UTC)Меня смутило именно это — он (человек умный, математик, статьи, призы, премии, все дела) нам советует как на коленке написать лучше, чем фирма Microsoft.
В решении Excel явно должно быть что-то такое, что нам в данном контексте не нужно, а им выбросить нельзя, и оно тормозит их расчёты. Вот и нужно теперь понять, что именно это «ненужное». чтобы понимать, когда мы можем от него отказываться, а когда — нет.
no subject
Date: 2010-08-06 03:13 pm (UTC)no subject
Date: 2010-08-06 04:33 pm (UTC)Что за генератор в Экселе, не знаю. Как он сравнивается с использованием NORMSINV, не знаю. Но тут может быть зарыта именно эта собака.
no subject
Date: 2010-08-06 04:54 pm (UTC)no subject
Date: 2010-08-07 01:03 am (UTC)no subject
Date: 2010-08-08 06:41 pm (UTC)Перечитал пост, действительно, не совсем внятно написал. Случайные числа тут вообще ни при чём, я просто так вышел на этот вопрос — обратная функция плотности нормального распределения.
no subject
Date: 2010-08-09 02:53 am (UTC)Но Ф^-1 нужна вовсе не только для этого, а и для кучи других вещей, и я не слышал, чтобы в Экселе жила особенно медленная ее имплементация. Поэтому вопрос может быть разве что о том, почему в Экселе нет отдельно Бокса-Мюллера (ну, например, потому, что его тривиально сделать самому имеющимися средствами Эскела).
no subject
Date: 2010-08-09 07:17 am (UTC)