Трапеции и метод Симпсона
Как считать интегралы точнее, заменяя прямоугольники трапециями и параболами.
Метод трапеций приближает площадь полосок трапециями, а метод Симпсона — кусочками парабол, достигая высокой точности при малом числе отрезков.
Прямоугольники из прошлого урока — простой, но грубоватый инструмент: их плоские верхушки плохо повторяют изгиб кривой. Метод трапеций соединяет соседние точки графика прямыми отрезками, то есть верхушка полоски становится наклонной — это куда ближе к кривой. А метод Симпсона идёт ещё дальше: он подгоняет под каждую пару полосок параболу.
Метод трапеций
Площадь трапеции — полусумма оснований на высоту. Для всего отрезка формула трапеций:
$$\int_a^b f\,dx \approx \Delta x\left(\frac{f(x_0)+f(x_n)}{2} + \sum_{i=1}^{n-1} f(x_i)\right)$$
Крайние точки берутся с половинным весом, внутренние — с полным. Ошибка убывает как $\Delta x^2$ — быстрее, чем у прямоугольников.
Метод Симпсона
Симпсон приближает кривую параболами, проходящими через три точки. Это даёт поразительную точность: ошибка убывает как $\Delta x^4$. Формула чередует веса $1, 4, 2, 4, 2, \ldots, 4, 1$:
$$\int_a^b f\,dx \approx \frac{\Delta x}{3}\big(f_0 + 4f_1 + 2f_2 + 4f_3 + \cdots + 4f_{n-1} + f_n\big)$$
Число отрезков $n$ должно быть чётным.
Сравнение точности
Посчитаем $\int_0^1 x^2\,dx = \frac{1}{3}$ обоими методами при скромном $n=10$.
def f(x): return x*x
a, b, n = 0.0, 1.0, 10
dx = (b - a) / n
xs = [a + i*dx for i in range(n+1)]
trap = dx * ((f(xs[0]) + f(xs[n]))/2 + sum(f(xs[i]) for i in range(1, n)))
simp = f(xs[0]) + f(xs[n])
for i in range(1, n):
simp += (4 if i % 2 == 1 else 2) * f(xs[i])
simp *= dx / 3
print(f"трапеции = {trap:.10f}")
print(f"Симпсон = {simp:.10f}")
print("точное = 0.3333333333")Вывод:
трапеции = 0.3350000000 Симпсон = 0.3333333333 точное = 0.3333333333
При тех же десяти отрезках трапеции дают ошибку в третьем знаке, а Симпсон — точное значение (для многочленов до третьей степени Симпсон вообще точен). Выбор метода радикально влияет на точность.
Как работает под капотом
Трапеция учитывает наклон верхушки, поэтому повторяет линейную часть кривой идеально, а изгиб — приближённо. Симпсон же «вписывает» параболу через три точки, и поскольку парабола сама квадратична, она точно ловит кривизну. Отсюда и магические веса $1{-}4{-}2{-}4$: они выводятся из интегрирования параболы по трём узлам. Чем выше порядок приближающей кривой, тем меньше ошибка при том же числе вычислений функции.
Частые ошибки
Первая — в методе Симпсона взять нечётное число отрезков: формула требует чётного $n$, иначе веса не сойдутся. Вторая — перепутать веса $4$ и $2$: на нечётных узлах ставится $4$, на чётных (внутренних) — $2$, а на краях — $1$. Третья — забыть половинный вес крайних точек в трапециях. Четвёртая — ждать чуда от Симпсона на разрывных или резко осциллирующих функциях: там высокая гладкость нарушена, и преимущество теряется.
Итог
- Трапеции точнее прямоугольников: ошибка $\sim \Delta x^2$.
- Симпсон вписывает параболы: ошибка $\sim \Delta x^4$.
- Симпсон требует чётного числа отрезков, веса $1,4,2,\ldots,4,1$.
- Для гладких функций Симпсон выигрывает на порядок при том же $n$.