§5. Нормальные случайные числа: три способа сварить колокол
Нормальный закон — самый ходовой товар в статистике: ошибки измерений, рост, вес, сумма кучи мелких случайностей. Значит, нормальный датчик нужен постоянно. Разберём три способа его собрать — от «на глаз» до точного.
Способ 1: обратная функция, но приближённо
По §1 достаточно уметь считать — обратную к функции распределения стандартного нормального закона. Засада в том, что не выражается через элементарные функции, а значит и обратная к ней тоже. Можно интерполировать подробную таблицу, а можно заменить близкой формулой. Хамакер предложил такую:
Разбираем по кирпичикам:
- — знак: , если меньше половины, , если больше. Нормальный закон симметричен, поэтому левая половина зеркалит правую.
- равно 1 в середине () и падает к нулю на краях. Логарифм с минусом и корень превращают это в : около нуля в середине и всё больше к краям.
- — подобранная поправка, чтобы попасть в настоящий .
Точность — две верные цифры после запятой для . Для прикидок хватает, для серьёзных расчётов — так себе.
Способ 2: сложи двенадцать равномерных
Второй способ опирается на центральную предельную теорему (глава 3). Равномерная на имеет и (задача 2 главы 1). Значит, для суммы
Берём , тогда знаменатель , и формула превращается в детскую: — почти нормальное число. Двенадцать сложений и одно вычитание, никаких логарифмов.
Но есть подвох (Лагутин отмечает его отдельно). Настоящая может принять любое значение, хоть миллион, хоть с ничтожной вероятностью. А сумма заперта в отрезке : выше шести не прыгнет никогда, ведь каждое . Хвосты обрезаны, и как раз в хвостах датчик врёт.
Кстати, плотность суммы — это кусочный многочлен степени (на каждом отрезке свой), куски гладко «сшиты» на стыках. При — прямоугольник, при — треугольник, при уже округлый горб, похожий на колокол.
Способ 3: Бокс–Мюллер, точно
А теперь способ без приближений. Берём пару независимых равномерных и получаем пару независимых :
Почему это работает. Совместная плотность двух независимых нормальных
зависит только от , то есть от расстояния до центра. Перейдём к полярным координатам: , . Плотность распадается на произведение
значит радиус и угол независимы. Угол просто равномерен — точка может смотреть в любую сторону. А для радиуса , и метод обратной функции из §1 даёт . Угол — . Подставили — получили формулу.
По-дворовому: кидаешь точку на плоскость «под колокол». Сторону, куда она полетит, выбираешь честной рулеткой (угол), а дальность — отдельным броском (радиус). Две проекции такой точки на оси — и есть два нормальных числа.
Покрути виджет. На «Сумме равномерных» двигай — увидишь, как прямоугольник превращается в треугольник, а потом в колокол. И сравни хвосты: сколько чисел ушло за и где самое большое значение.
Бокс–Мюллер и «двенадцать минус шесть» в коде:
Итог: Хамакер — быстро и приблизительно, «двенадцать минус шесть» — совсем дёшево, но хвосты обрезаны, Бокс–Мюллер — точно, ценой логарифма, корня и тригонометрии. А в задаче 6 узнаешь, как из двух нормальных одним делением получить закон Коши.