Прямоугольники и трапеции
Урок про базовые квадратурные формулы: как приблизить определённый интеграл суммой площадей простых фигур.
Квадратурная формула приближает определённый интеграл взвешенной суммой значений функции в узлах:
∫f dx ≈ Σ w_i·f(x_i).
Идея: разбить площадь на полоски
Определённый интеграл — это площадь под графиком. Если первообразную не выписать (а это сплошь и рядом), площадь считают численно: делят отрезок на n полосок шириной h и приближают площадь каждой простой фигурой. Чем мельче полоски, тем точнее. Это та же дискретизация, что в первом разделе, но теперь — для интегрирования.
Простейший способ — прямоугольники: высоту берём по левому краю, правому или (лучше) середине полоски. Точнее — трапеции: соединяем значения на краях полоски прямой и берём площадь трапеции.
| Формула | Высота полоски | Порядок |
| Левые/правые прямоугольники | значение на одном краю | 1 |
| Средние прямоугольники | значение в середине | 2 |
| Трапеции | среднее значений на краях | 2 |
def средние_прямоугольники(f, a, b, n):
h = (b - a) / n
s = sum(f(a + (i + 0.5) * h) for i in range(n)) # высота — в середине
return s * h
def трапеции(f, a, b, n):
h = (b - a) / n
s = (f(a) + f(b)) / 2 + sum(f(a + i * h) for i in range(1, n))
return s * h
g = lambda x: x * x # интеграл x^2 от 0 до 1 = 1/3
точно = 1/3
for n in [2, 4, 8, 16, 64]:
пр = средние_прямоугольники(g, 0.0, 1.0, n)
тр = трапеции(g, 0.0, 1.0, n)
print(f"n={n:3}: прямоуг={пр:.6f} (ош {abs(пр-точно):.1e}) "
f"трапеции={тр:.6f} (ош {abs(тр-точно):.1e})")
Вывод:
n= 2: прямоуг=0.312500 (ош 2.1e-02) трапеции=0.375000 (ош 4.2e-02) n= 4: прямоуг=0.328125 (ош 5.2e-03) трапеции=0.343750 (ош 1.0e-02) n= 8: прямоуг=0.332031 (ош 1.3e-03) трапеции=0.335938 (ош 2.6e-03) n= 16: прямоуг=0.333008 (ош 3.3e-04) трапеции=0.333984 (ош 6.5e-04) n= 64: прямоуг=0.333313 (ош 2.0e-05) трапеции=0.333374 (ош 4.1e-05)
При удвоении n ошибка обеих формул падает примерно вчетверо — это второй порядок (ошибка ∝ h²). Любопытно: средние прямоугольники здесь точнее трапеций (примерно вдвое) — это общее свойство, их ошибки имеют противоположный знак и наполовину компенсируются.
трапеция: средний прямоугольник:
f(a)___ ___ f((a+b)/2)
| \___ f(b) | |
| | | |
|_______| |_______|
a b a b
соединяем края прямой высота — в середине полоски
Составные формулы
То, что мы написали, и есть составные формулы: одна простая формула применяется к каждой из n полосок, а результаты суммируются. Именно составные формулы используют на практике — простая формула на весь отрезок целиком слишком груба. Обратите внимание на трюк в трапециях: внутренние узлы входят в сумму один раз, а краевые — с весом 1/2, потому что каждый внутренний узел делят две соседние трапеции.
Как работает под капотом
Погрешность составной формулы трапеций равна −(b−a)·h²·f''(ξ)/12 — отсюда виден и порядок (h²), и то, что для линейной функции (f''=0) трапеции точны. У средних прямоугольников ошибка +(b−a)·h²·f''(ξ)/24 — вдвое меньше по модулю и противоположного знака. Эта противоположность знаков — ключ к следующему уроку: если взять «1/3 трапеций + 2/3 прямоугольников», член с f'' сократится, и мы получим формулу Симпсона четвёртого порядка почти даром.
Частые ошибки
- Считать краевые узлы трапеций с полным весом. Концы отрезка входят с весом
1/2; забыв это, получите систематическую ошибку. - Брать левые/правые прямоугольники, когда доступна середина. Односторонние — первый порядок; средние — второй при той же цене.
- Применять равномерную сетку к функции с пиком. Где функция резко меняется, нужно мельче — это мотивирует адаптивные методы.
Итоги
- Интеграл приближают суммой площадей полосок; составная формула применяет простую к каждой полоске.
- Средние прямоугольники и трапеции имеют второй порядок (
ошибка ∝ h²): удвоениеnуменьшает ошибку вчетверо. - В трапециях краевые узлы берут с весом
1/2; средние прямоугольники обычно вдвое точнее трапеций. - Противоположные знаки их ошибок — мост к точной формуле Симпсона.