Русская Википедия:Преобразование Бокса — Мюллера
Преобразование Бокса — Мюллера — метод моделирования стандартных нормально распределённых случайных величин. Имеет два варианта. Метод является точным, в отличие, например, от методов, основывающихся на центральной предельной теореме.
Метод был опубликован в 1958 году Джорджем Боксом и Мервином Мюллером.
Первый вариант
Пусть <math>r</math> и <math>\varphi\ </math> — независимые случайные величины, равномерно распределённые на интервале <math>(0,\;1]</math>. Вычислим <math>z_0</math> и <math>z_1</math> по формулам
- <math>z_0 = \cos (2 \pi \varphi) \sqrt {-2 \ln r},</math>
- <math>z_1 = \sin (2 \pi \varphi) \sqrt {-2 \ln r}.</math>
Тогда <math>z_0</math> и <math>z_1</math> будут независимы и распределены нормально с математическим ожиданием 0 и дисперсией 1. При реализации на компьютере обычно быстрее не вычислять обе тригонометрические функции — <math>\cos (\cdot)</math> и <math>\sin (\cdot)</math> — а рассчитать одну из них через другую. Ещё лучше воспользоваться вместо этого вторым вариантом преобразования Бокса — Мюллера.
Второй вариант
Пусть <math>x</math> и <math>y</math> — независимые случайные величины, равномерно распределённые на отрезке <math>[-1,\;1]</math>. Вычислим <math>{s = x^2 + y^2}</math>. Если окажется, что <math>{s > 1}</math> или <math>{s = 0}</math>, то значения <math>x</math> и <math>y</math> следует «выбросить» и сгенерировать заново. Как только выполнится условие <math>{0 < s \leqslant 1}</math>, по формулам
- <math>z_0 = x \cdot \sqrt {-2 \ln s \over s}</math>
и
- <math>z_1 = y \cdot \sqrt {-2 \ln s \over s}</math>
следует рассчитать <math>z_0</math> и <math>z_1</math>, которые, как и в первом случае, будут независимыми величинами, удовлетворяющими стандартному нормальному распределению.
Коэффициент использования базовых случайных величин для первого варианта, очевидно, равен единице. Для второго варианта это отношение площади окружности единичного радиуса к площади квадрата со стороной два, то есть <math>\pi / 4 \approx 0{,}785</math>. Тем не менее, на практике второй вариант обычно оказывается быстрее, за счёт того, что в нём используется только одна трансцендентная функция, <math>\ln (\cdot)</math>. Это преимущество для большинства реализаций перевешивает необходимость генерации большего числа равномерно распределённых случайных величин.
Переход к общему нормальному распределению
После получения стандартной нормальной случайной величины <math>z</math>, можно легко перейти к величине <math>\xi \sim N (\mu, \sigma^2)</math> распределённой нормально с математическим ожиданием <math>\mu</math> и стандартным отклонением <math>\sigma</math> по формуле
- <math>\xi = \mu + \sigma z.</math>
Это уже не является частью преобразования Бокса — Мюллера, но позволяет завершить генерацию нормальной случайной величины.
См. также
Ссылки
- Преобразование равномерно распределенной случайной величины в нормально распределенную Шаблон:Wayback