Что такое погрешность и зачем её оценивать

Урок вводит язык погрешностей: абсолютная и относительная, источники ошибки и почему «ответ без оценки погрешности» бесполезен.

Абсолютная погрешность приближения x* к точному x — это |x − x*|. Относительная погрешность|x − x*| / |x|, доля ошибки от самой величины.

Почему ответ без погрешности — не ответ

Представьте, что прибор показал «длина моста 305 метров». Это много или мало ошибка? Если истинная длина 305.2 — отлично. Если 280 — катастрофа. Само число без указания, насколько ему можно верить, в инженерии бесполезно. Поэтому численный результат всегда сопровождают оценкой погрешности: «305 ± 0.5 м». Цель численных методов — не просто посчитать, а посчитать с обоснованной границей ошибки.

Абсолютная и относительная погрешность

Абсолютная погрешность измеряется в тех же единицах, что и величина. Относительная — безразмерна (часто в процентах) и честнее отражает «качество» ответа, когда величины разного масштаба. Ошибка в 1 метр катастрофична для детали часов и ничтожна для расстояния до Луны — относительная погрешность это улавливает, абсолютная нет.

# Сравним два приближения по абсолютной и относительной погрешности
случаи = [
    ("длина детали", 0.0050, 0.0051),   # точное, приближённое
    ("расстояние",  384400.0, 384405.0),
]
for имя, точное, прибл in случаи:
    абс = abs(точное - прибл)
    отн = абс / abs(точное)
    print(f"{имя:14}: абс = {абс:<12g} отн = {отн*100:.4f}%")

Вывод:

длина детали  : абс = 0.0001       отн = 2.0000%
расстояние    : абс = 5            отн = 0.0013%

Абсолютная ошибка детали (0.0001) в 50000 раз меньше ошибки расстояния (5), но относительно деталь измерена в 1500 раз хуже. Когда говорят «метод даёт 6 верных значащих цифр» — речь именно об относительной погрешности порядка 10^-6.

Откуда берутся ошибки: метод и округление

В любом численном расчёте погрешность складывается из двух принципиально разных источников:

ИсточникПриродаКак уменьшить
Погрешность метода (усечения)мы заменили точную задачу приближённой: оборвали ряд, взяли конечную сеткуизмельчить сетку, взять больше членов, метод выше порядка
Погрешность округлениякомпьютер хранит числа с конечным числом цифр, каждая операция чуть округляетаккуратные формулы, иногда — двойная точность; полностью убрать нельзя

Коварство в том, что они тянут в разные стороны. Хотим уменьшить погрешность метода — измельчаем сетку (берём меньше h). Но при очень малом h начинают накапливаться ошибки округления. Суммарная погрешность сначала падает, достигает минимума, а потом снова растёт.

import math

# Производная sin в точке 1 через (f(x+h)-f(x))/h. Истина = cos(1).
истина = math.cos(1.0)
print(f"{'h':>10} | {'погрешность':>14}")
print("-" * 28)
for k in range(2, 18, 2):
    h = 10.0 ** (-k)
    приближение = (math.sin(1.0 + h) - math.sin(1.0)) / h
    print(f"{h:10.0e} | {abs(приближение - истина):14.2e}")

Вывод:

         h |    погрешность
----------------------------
     1e-02 |       4.22e-03
     1e-04 |       4.21e-05
     1e-06 |       4.21e-07
     1e-08 |       1.41e-08
     1e-10 |       5.85e-08
     1e-12 |       4.32e-05
     1e-14 |       3.71e-03
     1e-16 |       5.40e-01

Чёткая «долина»: до h ≈ 10^-8 главная — погрешность метода, она падает с h. После — взрывается погрешность округления (мы вычитаем два почти равных числа и делим на крошечное h). Минимум где-то посередине. Это типичнейшая картина численного анализа, и её надо знать в лицо.

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

Погрешность метода обычно ведёт себя как C · h^p, где pпорядок точности. Для нашей грубой производной p = 1: при делении h на 100 ошибка делится на 100 (видно: 4.22e-03 → 4.22e-05). Порядок — паспорт метода: он говорит, насколько быстро окупается измельчение сетки. Метод второго порядка (p = 2) при том же измельчении даёт в 100 раз меньшую ошибку, чем первого.

Погрешность округления, наоборот, растёт с измельчением как eps / h для разностных формул: чем меньше h, тем катастрофичнее потеря значащих цифр при вычитании близких чисел. Баланс этих двух членов и задаёт оптимальный шаг.

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

  • Путать абсолютную и относительную погрешность. «Ошибка 0.001» бессмысленна без масштаба величины — для разных задач это либо идеал, либо провал.
  • Думать, что меньше h всегда точнее. Существует оптимальный h; за ним округление портит результат.
  • Отчитываться «точным» числом из 17 цифр. Если погрешность 0.01, значащих цифр всего три — остальные шумят. Округляйте ответ до достоверных цифр.

Итоги

  • Абсолютная погрешность — |x − x*|; относительная|x − x*|/|x|, безразмерная мера качества.
  • Две природы ошибки: метода (усечения, падает с h) и округления (растёт с измельчением).
  • Суммарная погрешность имеет минимум при оптимальном h — «слишком точно» вредит.
  • Численный ответ всегда сопровождают оценкой погрешности; лишние цифры — шум.
Проверьте себя
1. Относительная погрешность приближения x* к точному x — это...
A|x − x*|
B|x − x*| / |x|
C|x| − |x*|
D(x − x*)²
2. Почему при очень малом шаге h погрешность численной производной снова растёт?
AМетод теряет порядок точности
BНакапливается погрешность округления при вычитании близких чисел
CПроцессор перегревается
Dcos(1) вычисляется неточно
3. Метод первого порядка точности (p=1): при уменьшении h в 100 раз погрешность метода уменьшится примерно...
Aв 100 раз
Bв 10 раз
Cв 10000 раз
Dне изменится