Общая формула переноса погрешности
Урок о главной формуле косвенных измерений: как погрешности измеренных величин складываются в погрешность результата.
Закон распространения погрешности связывает неопределённость функции $f(x_1, \ldots, x_k)$ с неопределённостями её аргументов через частные производные.
Косвенное измерение вычисляет величину по формуле из прямо измеренных. Но каждый вход известен лишь с погрешностью. Как эти погрешности перейдут в результат? Ответ даёт фундаментальная формула, лежащая в основе всей обработки косвенных измерений.
Основная формула
Для функции $f(x_1, x_2, \ldots, x_k)$ при независимых погрешностях аргументов:
$$\sigma_f^2 = \sum_{i=1}^{k}\left(\frac{\partial f}{\partial x_i}\right)^2 \sigma_{x_i}^2$$
Смысл прозрачен: частная производная $\partial f/\partial x_i$ — это коэффициент чувствительности, показывающий, насколько сильно результат реагирует на изменение $i$-го входа. Чем чувствительнее функция к величине, тем больше её погрешность влияет на итог. Складываются именно квадраты (дисперсии), потому что независимые случайные погрешности частично компенсируют друг друга, а не складываются «в худшую сторону».
Почему квадраты
Если бы погрешности всегда били в одну сторону, они складывались бы линейно. Но независимые случайные отклонения с равной вероятностью имеют любой знак, поэтому они комбинируются по теореме Пифагора — через сумму квадратов. Это даёт более реалистичную (меньшую) оценку, чем грубое сложение модулей.
Как работает под капотом
Производные не обязательно брать аналитически — их можно оценить численно, сдвигая каждый вход на крошечную величину. Это универсальный приём: формулу распространения можно применить к любой функции. Посчитаем погрешность для $f = x \cdot y$.
def f(x, y):
return x * y
x, y = 4.0, 5.0
sx, sy = 0.1, 0.2
h = 1e-6
# Численные частные производные
dfdx = (f(x + h, y) - f(x - h, y)) / (2 * h)
dfdy = (f(x, y + h) - f(x, y - h)) / (2 * h)
sigma_f = ((dfdx * sx) ** 2 + (dfdy * sy) ** 2) ** 0.5
print("∂f/∂x ≈", round(dfdx, 4), "(теория: y =", y, ")")
print("∂f/∂y ≈", round(dfdy, 4), "(теория: x =", x, ")")
print("f =", f(x, y), "± ", round(sigma_f, 4))Вывод:
∂f/∂x ≈ 5.0 (теория: y = 5.0 ) ∂f/∂y ≈ 4.0 (теория: x = 4.0 ) f = 20.0 ± 0.6403
Численные производные совпали с аналитическими ($\partial f/\partial x = y$, $\partial f/\partial y = x$), а итоговая погрешность результата составила 0,64. Формула работает.
Частые ошибки
- Складывать абсолютные погрешности линейно (в модулях) для независимых величин — это завышает результат.
- Забывать возводить в квадрат и член, и производную, или брать корень не из суммы квадратов.
- Применять формулу к сильно коррелированным величинам без учёта ковариаций.
Итог
- Погрешность косвенного результата собирается из погрешностей входов через частные производные.
- Частная производная — коэффициент чувствительности результата к данному входу.
- Складываются квадраты вкладов (закон Пифагора для независимых погрешностей).
- Производные можно брать численно, что делает формулу универсальной.