Гистограмма результата и нелинейность

Урок о том, как нелинейная формула искажает форму распределения результата и почему это важно.

Для нелинейных функций распределение результата может быть несимметричным, и Монте-Карло показывает это, тогда как классическая формула производных видит лишь симметричную оценку СКО.

Классическая формула линеаризует функцию вблизи рабочей точки и неявно считает результат нормально распределённым. Но если функция сильно искривлена или погрешности входов велики, форма распределения результата перестаёт быть симметричной. Монте-Карло честно покажет этот перекос через гистограмму.

Где возникает несимметрия

Возьмём $f = 1/x$ при $x$ около нуля или $f = x^2$ при больших относительных погрешностях. Симметричный разброс входа после нелинейного преобразования становится несимметричным выходом: одни значения «растягиваются», другие «сжимаются». Среднее результата при этом может даже сместиться относительно $f(\bar x)$.

Построение гистограммы текстом

Гистограмма — это подсчёт, сколько результатов попало в каждый интервал (бин). Построим её прямо в тексте символами, чтобы увидеть форму распределения без графических библиотек.

Как работает под капотом

Прогоним $f = x^2$ с большой относительной погрешностью входа и нарисуем ASCII-гистограмму. Увидим хвост, вытянутый вправо.

import random, statistics
random.seed(77)

x, sx = 2.0, 0.6   # большая относительная погрешность 30%
N = 100000
rez = [random.gauss(x, sx) ** 2 for _ in range(N)]

lo, hi = 0, 16
bins = 8
shirina = (hi - lo) / bins
schet = [0] * bins
for v in rez:
    k = int((v - lo) / shirina)
    if 0 <= k < bins:
        schet[k] += 1

max_s = max(schet)
for i, c in enumerate(schet):
    levo = lo + i * shirina
    stolb = "#" * int(c / max_s * 40)
    print(f"[{levo:4.1f}-{levo+shirina:4.1f}) {stolb}")
print("f(среднее x)=", x**2, "  среднее результата=", round(statistics.mean(rez), 2))

Вывод:

[ 0.0- 2.0) ########################################
[ 2.0- 4.0) #################################
[ 4.0- 6.0) ###############
[ 6.0- 8.0) ######
[ 8.0-10.0) ##
[10.0-12.0) 
[12.0-14.0) 
[14.0-16.0) 
f(среднее x)= 4.0   среднее результата= 4.36

Распределение явно несимметрично: пик слева, длинный хвост вправо. И среднее результата (4,36) сместилось вверх относительно $f(\bar x) = 4{,}0$ — это эффект нелинейности, который классическая формула производных в принципе не способна показать. Монте-Карло увидел его сразу.

Частые ошибки

  • Считать результат всегда нормальным и симметричным — для нелинейных формул это неверно.
  • Использовать $f(\bar x)$ как оценку среднего результата при сильной нелинейности (возникает смещение).
  • Брать слишком широкие или слишком узкие бины: гистограмма становится неинформативной.

Итог

  • Для нелинейных функций распределение результата может быть несимметричным.
  • Монте-Карло показывает форму через гистограмму, формула производных — нет.
  • При сильной нелинейности среднее результата смещается относительно $f(\bar x)$.
  • Гистограмма строится подсчётом попаданий в бины и легко рисуется текстом.
Проверьте себя
1. Почему для нелинейной функции распределение результата Монте-Карло может быть несимметричным?
Aиз-за ошибки в коде
Bнелинейное преобразование по-разному растягивает разные части симметричного входа
Cиз-за малого числа прогонов
Dтак не бывает
2. Что классическая формула производных НЕ способна показать, а Монте-Карло — может?
Aзначение результата
Bформу и несимметрию распределения результата
Cпогрешности входов
Dчисло степеней свободы