Skip to Content

§5. Нормальные случайные числа: три способа сварить колокол

Нормальный закон N(0,1)\mathcal{N}(0,1) — самый ходовой товар в статистике: ошибки измерений, рост, вес, сумма кучи мелких случайностей. Значит, нормальный датчик нужен постоянно. Разберём три способа его собрать — от «на глаз» до точного.

Способ 1: обратная функция, но приближённо

По §1 достаточно уметь считать Φ−1(y)\Phi^{-1}(y) — обратную к функции распределения стандартного нормального закона. Засада в том, что Φ\Phi не выражается через элементарные функции, а значит и обратная к ней тоже. Можно интерполировать подробную таблицу, а можно заменить Φ−1\Phi^{-1} близкой формулой. Хамакер предложил такую:

Φ−1(y)≈sign⁡(y−0,5)⋅1,238 z (1+0,0262 z),z=−ln⁡(4y(1−y)).\Phi^{-1}(y) \approx \operatorname{sign}(y - 0{,}5)\cdot 1{,}238\,z\,(1 + 0{,}0262\,z), \qquad z = \sqrt{-\ln\bigl(4y(1-y)\bigr)}.

Разбираем по кирпичикам:

  • sign⁡(y−0,5)\operatorname{sign}(y - 0{,}5) — знак: −1-1, если yy меньше половины, +1+1, если больше. Нормальный закон симметричен, поэтому левая половина зеркалит правую.
  • 4y(1−y)4y(1-y) равно 1 в середине (y=0,5y = 0{,}5) и падает к нулю на краях. Логарифм с минусом и корень превращают это в zz: около нуля в середине и всё больше к краям.
  • 1,238 z (1+0,0262 z)1{,}238\,z\,(1 + 0{,}0262\,z) — подобранная поправка, чтобы попасть в настоящий Φ−1\Phi^{-1}.

Точность — две верные цифры после запятой для ∣Φ−1(y)∣≤4|\Phi^{-1}(y)| \le 4. Для прикидок хватает, для серьёзных расчётов — так себе.

Способ 2: сложи двенадцать равномерных

Второй способ опирается на центральную предельную теорему (глава 3). Равномерная η\eta на [0,1][0,1] имеет Mη=1/2\mathbf{M}\eta = 1/2 и Dη=1/12\mathbf{D}\eta = 1/12 (задача 2 главы 1). Значит, для суммы Sn=η1+⋯+ηnS_n = \eta_1 + \dots + \eta_n

Sn−n/2n/12→dZ∼N(0,1).\frac{S_n - n/2}{\sqrt{n/12}} \xrightarrow{d} Z \sim \mathcal{N}(0,1).

Берём n=12n = 12, тогда знаменатель 12/12=1\sqrt{12/12} = 1, и формула превращается в детскую: S12−6S_{12} - 6 — почти нормальное число. Двенадцать сложений и одно вычитание, никаких логарифмов.

Но есть подвох (Лагутин отмечает его отдельно). Настоящая ZZ может принять любое значение, хоть миллион, хоть с ничтожной вероятностью. А сумма S12−6S_{12} - 6 заперта в отрезке [−6,6][-6, 6]: выше шести не прыгнет никогда, ведь каждое ηi≤1\eta_i \le 1. Хвосты обрезаны, и как раз в хвостах датчик врёт.

Кстати, плотность суммы SnS_n — это кусочный многочлен степени nn (на каждом отрезке [i−1,i][i-1, i] свой), куски гладко «сшиты» на стыках. При n=1n = 1 — прямоугольник, при n=2n = 2 — треугольник, при n=3n = 3 уже округлый горб, похожий на колокол.

Способ 3: Бокс–Мюллер, точно

А теперь способ без приближений. Берём пару независимых равномерных η1,η2\eta_1, \eta_2 и получаем пару независимых N(0,1)\mathcal{N}(0,1):

X=−2ln⁡η1 cos⁡(2πη2),Y=−2ln⁡η1 sin⁡(2πη2).X = \sqrt{-2\ln \eta_1}\,\cos(2\pi\eta_2), \qquad Y = \sqrt{-2\ln \eta_1}\,\sin(2\pi\eta_2).

Почему это работает. Совместная плотность двух независимых нормальных

p(X,Y)(x,y)=12πe−x2+y22p_{(X,Y)}(x, y) = \frac{1}{2\pi} e^{-\frac{x^2 + y^2}{2}}

зависит только от x2+y2x^2 + y^2, то есть от расстояния до центра. Перейдём к полярным координатам: X=Rcos⁡ΦX = R\cos\Phi, Y=Rsin⁡ΦY = R\sin\Phi. Плотность распадается на произведение

pR(r)=r e−r2/2, r>0,pΦ(φ)=12π, 0<φ<2π,p_R(r) = r\,e^{-r^2/2},\ r > 0, \qquad p_\Phi(\varphi) = \frac{1}{2\pi},\ 0 < \varphi < 2\pi,

значит радиус RR и угол Φ\Phi независимы. Угол просто равномерен — точка может смотреть в любую сторону. А для радиуса FR(r)=1−e−r2/2F_R(r) = 1 - e^{-r^2/2}, и метод обратной функции из §1 даёт R=−2ln⁡η1R = \sqrt{-2\ln \eta_1}. Угол — Φ=2πη2\Phi = 2\pi\eta_2. Подставили — получили формулу.

По-дворовому: кидаешь точку на плоскость «под колокол». Сторону, куда она полетит, выбираешь честной рулеткой (угол), а дальность — отдельным броском (радиус). Две проекции такой точки на оси — и есть два нормальных числа.

Покрути виджет. На «Сумме равномерных» двигай nn — увидишь, как прямоугольник превращается в треугольник, а потом в колокол. И сравни хвосты: сколько чисел ушло за ±3\pm 3 и где самое большое значение.

Нормальные числа: три способа

Гистограмма датчика против плотности N(0,1). При n = 1 это просто равномерное, при n = 2 — треугольник, к n = 12 почти колокол.За ±3 вышло 0.22 % (у нормального 0,27 %). Самое большое |x| = 4.03, а выше √(3n) = 6.00 эта сумма не прыгнет никогда.

Бокс–Мюллер и «двенадцать минус шесть» в коде:

Загрузка редактора…

Итог: Хамакер — быстро и приблизительно, «двенадцать минус шесть» — совсем дёшево, но хвосты обрезаны, Бокс–Мюллер — точно, ценой логарифма, корня и тригонометрии. А в задаче 6 узнаешь, как из двух нормальных одним делением получить закон Коши.

Проверь себя

Тест

Чем плох датчик «сложи 12 равномерных и вычти 6»?
Обновлено