Гистограмма результата и нелинейность
Урок о том, как нелинейная формула искажает форму распределения результата и почему это важно.
Для нелинейных функций распределение результата может быть несимметричным, и Монте-Карло показывает это, тогда как классическая формула производных видит лишь симметричную оценку СКО.
Классическая формула линеаризует функцию вблизи рабочей точки и неявно считает результат нормально распределённым. Но если функция сильно искривлена или погрешности входов велики, форма распределения результата перестаёт быть симметричной. Монте-Карло честно покажет этот перекос через гистограмму.
Где возникает несимметрия
Возьмём $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)$.
- Гистограмма строится подсчётом попаданий в бины и легко рисуется текстом.