Кубический сплайн интерполяция: моменты и прогонка

Кубический сплайн интерполяция - это способ провести гладкую кривую через таблицу точек, склеивая её из кубических многочленов, по одному на каждый отрезок между соседними узлами. В отличие от единого интерполяционного многочлена высокой степени, который при большом числе узлов осциллирует (феномен Рунге), кубическая сплайн-интерполяция держит степень низкой и при этом обеспечивает непрерывность функции и двух её производных. Именно поэтому сплайны лежат в основе графики, CAD-систем и численного анализа: глаз воспринимает такую кривую как «естественную», без изломов и лишних волн.
Что такое кубический сплайн
Пусть заданы узлы интерполяции и значения . Кубический сплайн - это функция, которая на каждом отрезке совпадает с некоторым кубическим многочленом , а в точках стыковки склеена гладко. Формально требуется выполнение четырёх групп условий:
- интерполяция: во всех узлах;
- непрерывность самой функции в узлах;
- непрерывность первой производной ;
- непрерывность второй производной .
Кубическая степень здесь не случайна: многочлен третьей степени имеет ровно четыре коэффициента, и этого хватает, чтобы на каждом отрезке удовлетворить значениям на концах и согласовать производные с соседями. Ниже - мини-форма: впишите свою таблицу точек, выберите краевые условия, а в чате соберём систему на вторые производные, прогонку и коэффициенты сплайна на каждом отрезке.
Система на моменты (вторые производные)
Удобнее всего строить сплайн не через коэффициенты напрямую, а через значения вторых производных в узлах , которые называют моментами. Поскольку на каждом отрезке линейна, вторую производную можно записать как линейную интерполяцию между и . Дважды проинтегрировав и подставив значения , на концах отрезка длины , получаем явное выражение для через моменты.
Условие непрерывности первой производной в каждом внутреннем узле даёт связь между тремя соседними моментами:
Это уравнение на неизвестный момент. Недостающие два уравнения дают краевые условия - о них ниже. Матрица системы трёхдиагональная и диагонально доминирующая, что гарантирует единственность решения и численную устойчивость.
Моменты $M_i$ - это значения $S''$ в узлах, а не коэффициенты многочлена. Сначала находим все $M_i$ из системы, и только потом по ним считаем $a_i, b_i, c_i, d_i$ каждого отрезка.
Метод прогонки
Трёхдиагональную систему не нужно решать общим методом Гаусса - для неё есть метод прогонки (алгоритм Томаса), работающий за операций. Он состоит из двух проходов: прямого, на котором каждую неизвестную выражают через следующую с помощью прогоночных коэффициентов, и обратного, на котором значения восстанавливают с конца. Рекуррентные формулы прямого хода имеют вид
где - поддиагональ, диагональ и наддиагональ, а - правая часть. Обратный ход: . Диагональное преобладание (), которое автоматически выполняется для кубического сплайна, защищает прогонку от деления на ноль и накопления ошибки.
Краевые условия
Два недостающих уравнения замыкают систему и определяют поведение сплайна на концах отрезка. Выбор зависит от того, что известно о функции:
- Естественный сплайн: , то есть обнуляется на концах. Кривая выпрямляется к краям - это аналог гибкой линейки, отпущенной за пределами крайних точек.
- Закреплённый (clamped): заданы первые производные и . Даёт наименьшую погрешность, если наклоны на концах известны.
- Not-a-knot: третья производная непрерывна в первом и последнем внутренних узлах. Используется по умолчанию во многих пакетах (в том числе в MATLAB), когда о краях ничего не известно.
- Периодический: значения и производные совпадают на обоих концах - для замкнутых кривых.
Естественные условия проще всего для ручного счёта, поэтому в учебных задачах кубический сплайн чаще всего строят именно как естественный.
Коэффициенты на каждом отрезке
После нахождения моментов многочлен на отрезке удобно записать в форме разложения по степеням :
где коэффициенты выражаются через значения и моменты:
Подстановка даёт , а согласование обеспечивает гладкость стыков. Так кубическая сплайн-интерполяция собирает единую дважды дифференцируемую кривую из локальных кубик.
Сравнение с многочленом Лагранжа
Кубический сплайн интерполяция и единый интерполяционный многочлен решают одну задачу - провести кривую через узлы, - но ведут себя противоположно при росте числа точек. Многочлен степени , например в форме интерполяционной формулы Лагранжа, при большом на равномерной сетке даёт растущие осцилляции у краёв (феномен Рунге). Сплайн же всегда состоит из кубик, поэтому добавление узлов лишь уточняет кривую, не раскачивая её.
Платой за устойчивость является локальность другого рода: сплайн не задаётся одной формулой, его приходится хранить кусочно. Зато погрешность естественного сплайна на гладкой функции убывает как для значений и для второй производной, где - максимальный шаг сетки. Для большинства прикладных задач это гораздо надёжнее, чем глобальный многочлен.
Есть и принципиальное отличие в чувствительности к данным. Изменение одного значения у многочлена Лагранжа перестраивает кривую на всём отрезке, тогда как у сплайна возмущение быстро затухает с удалением от изменённого узла - система на моменты диагонально доминирующая, и влияние одного узла локализовано. Это делает сплайн предпочтительным при работе с зашумлёнными или часто обновляемыми данными, где не хочется, чтобы одна точка «дёргала» всю кривую.
Где применяется
Сплайны востребованы везде, где нужна гладкая кривая по дискретным данным: в компьютерной графике и шрифтах (хотя там чаще берут кривые Безье - родственную конструкцию), в траекториях движения роботов и станков ЧПУ, в сглаживании экспериментальных данных, в финансовых моделях кривой доходности. В численном анализе сплайн-интерполяция используется для приближённого дифференцирования и интегрирования табличных функций, поскольку производные и интеграл кубического сплайна считаются аналитически по уже найденным коэффициентам.
Частые ошибки
- Путаница моментов и коэффициентов: - это , а не ; коэффициент , забытая двойка ломает весь сплайн.
- Неучтённые краевые условия: без двух дополнительных уравнений система недоопределена - нельзя просто отбросить и .
- Неравномерная сетка: при разных нельзя пользоваться упрощёнными формулами для равномерного шага, в систему входят именно и .
- Степень , а не : коэффициенты записаны относительно левого конца отрезка; подстановка «голого» даёт неверное значение.
- Решение Гауссом вместо прогонки: для трёхдиагональной матрицы общий метод избыточен и менее устойчив - используйте алгоритм Томаса.
FAQ
Чем кубический сплайн лучше многочлена Лагранжа? При большом числе узлов он не страдает от феномена Рунге: степень остаётся третьей на каждом отрезке, поэтому кривая не осциллирует у краёв и устойчиво уточняется при добавлении точек.
Что такое моменты в методе сплайнов? Это значения второй производной сплайна в узлах, . Их находят из трёхдиагональной системы, а затем по ним вычисляют коэффициенты кубики на каждом отрезке.
Какие краевые условия выбрать? Если о концах ничего не известно - естественные () для ручного счёта или not-a-knot в пакетах. Если известны наклоны на концах - закреплённые, они дают наименьшую погрешность.
Коротко
Кубическая сплайн-интерполяция строит гладкую кривую через таблицу точек, склеивая её из кубических многочленов с непрерывными , и . Ключ к построению - моменты , которые находят из трёхдиагональной диагонально доминирующей системы методом прогонки за , после чего по ним выражают коэффициенты каждого отрезка. Два краевых условия (естественные, закреплённые, not-a-knot или периодические) замыкают систему. В отличие от многочлена Лагранжа сплайн не подвержен феномену Рунге и даёт погрешность на гладких функциях.
Читайте также

Интерполяционная формула Лагранжа: узлы и базисные полиномы
Интерполяционная формула Лагранжа: базисные полиномы , построение многочлена по узлам, оценка погрешности интерполяции, сравнение с методом Ньютона и пример расчёта по таблице.

Алгоритм Рабина-Карпа: поиск подстроки за O(n+m)
Разбираем алгоритм Рабина-Карпа: как полиномиальный хеш и скользящее окно ускоряют поиск подстроки до O(n+m) в среднем, почему бывают ложные совпадения и при чём тут плагиат.

Распределение Фишера критические значения: как искать F-квантили
Распределение Фишера и его критические значения: что такое F-распределение, как читать таблицу критических значений по двум степеням свободы, как применять F-квантили в F-тесте на равенство дисперсий и в дисперсионном анализе.