EssayAI
Блог
Блог
Математика и алгоритмы

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

30 марта 2026Время чтения: 7 минут
#кубический сплайн#сплайн-интерполяция#метод прогонки#краевые условия#узлы интерполяции
Кубический сплайн интерполяция: моменты и прогонка

Кубический сплайн интерполяция - это способ провести гладкую кривую через таблицу точек, склеивая её из кубических многочленов, по одному на каждый отрезок между соседними узлами. В отличие от единого интерполяционного многочлена высокой степени, который при большом числе узлов осциллирует (феномен Рунге), кубическая сплайн-интерполяция держит степень низкой и при этом обеспечивает непрерывность функции и двух её производных. Именно поэтому сплайны лежат в основе графики, CAD-систем и численного анализа: глаз воспринимает такую кривую как «естественную», без изломов и лишних волн.

Что такое кубический сплайн

Пусть заданы узлы интерполяции a=x0<x1<<xn=ba = x_0 < x_1 < \dots < x_n = b и значения yi=f(xi)y_i = f(x_i). Кубический сплайн S(x)S(x) - это функция, которая на каждом отрезке [xi,xi+1][x_i, x_{i+1}] совпадает с некоторым кубическим многочленом Si(x)S_i(x), а в точках стыковки склеена гладко. Формально требуется выполнение четырёх групп условий:

  • интерполяция: S(xi)=yiS(x_i) = y_i во всех узлах;
  • непрерывность самой функции в узлах;
  • непрерывность первой производной S(x)S'(x);
  • непрерывность второй производной S(x)S''(x).

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

Система на моменты (вторые производные)

Удобнее всего строить сплайн не через коэффициенты напрямую, а через значения вторых производных в узлах Mi=S(xi)M_i = S''(x_i), которые называют моментами. Поскольку SS'' на каждом отрезке линейна, вторую производную можно записать как линейную интерполяцию между MiM_i и Mi+1M_{i+1}. Дважды проинтегрировав и подставив значения yiy_i, yi+1y_{i+1} на концах отрезка [xi,xi+1][x_i, x_{i+1}] длины hi=xi+1xih_i = x_{i+1} - x_i, получаем явное выражение для Si(x)S_i(x) через моменты.

Условие непрерывности первой производной в каждом внутреннем узле xix_i даёт связь между тремя соседними моментами:

hi1Mi1+2(hi1+hi)Mi+hiMi+1=6(yi+1yihiyiyi1hi1).h_{i-1} M_{i-1} + 2(h_{i-1} + h_i) M_i + h_i M_{i+1} = 6\left(\frac{y_{i+1} - y_i}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}}\right).

Это n1n-1 уравнение на n+1n+1 неизвестный момент. Недостающие два уравнения дают краевые условия - о них ниже. Матрица системы трёхдиагональная и диагонально доминирующая, что гарантирует единственность решения и численную устойчивость.

Моменты $M_i$ - это значения $S''$ в узлах, а не коэффициенты многочлена. Сначала находим все $M_i$ из системы, и только потом по ним считаем $a_i, b_i, c_i, d_i$ каждого отрезка.

Метод прогонки

Трёхдиагональную систему не нужно решать общим методом Гаусса - для неё есть метод прогонки (алгоритм Томаса), работающий за O(n)O(n) операций. Он состоит из двух проходов: прямого, на котором каждую неизвестную выражают через следующую с помощью прогоночных коэффициентов, и обратного, на котором значения восстанавливают с конца. Рекуррентные формулы прямого хода имеют вид

αi+1=cibi+aiαi,βi+1=diaiβibi+aiαi,\alpha_{i+1} = \frac{-c_i}{b_i + a_i \alpha_i}, \qquad \beta_{i+1} = \frac{d_i - a_i \beta_i}{b_i + a_i \alpha_i},

где ai,bi,cia_i, b_i, c_i - поддиагональ, диагональ и наддиагональ, а did_i - правая часть. Обратный ход: Mi=αi+1Mi+1+βi+1M_i = \alpha_{i+1} M_{i+1} + \beta_{i+1}. Диагональное преобладание (bi>ai+ci|b_i| > |a_i| + |c_i|), которое автоматически выполняется для кубического сплайна, защищает прогонку от деления на ноль и накопления ошибки.

Краевые условия

Два недостающих уравнения замыкают систему и определяют поведение сплайна на концах отрезка. Выбор зависит от того, что известно о функции:

  • Естественный сплайн: M0=Mn=0M_0 = M_n = 0, то есть SS'' обнуляется на концах. Кривая выпрямляется к краям - это аналог гибкой линейки, отпущенной за пределами крайних точек.
  • Закреплённый (clamped): заданы первые производные S(x0)S'(x_0) и S(xn)S'(x_n). Даёт наименьшую погрешность, если наклоны на концах известны.
  • Not-a-knot: третья производная непрерывна в первом и последнем внутренних узлах. Используется по умолчанию во многих пакетах (в том числе в MATLAB), когда о краях ничего не известно.
  • Периодический: значения и производные совпадают на обоих концах - для замкнутых кривых.

Естественные условия проще всего для ручного счёта, поэтому в учебных задачах кубический сплайн чаще всего строят именно как естественный.

Коэффициенты на каждом отрезке

После нахождения моментов многочлен на отрезке [xi,xi+1][x_i, x_{i+1}] удобно записать в форме разложения по степеням (xxi)(x - x_i):

Si(x)=ai+bi(xxi)+ci(xxi)2+di(xxi)3,S_i(x) = a_i + b_i (x - x_i) + c_i (x - x_i)^2 + d_i (x - x_i)^3,

где коэффициенты выражаются через значения и моменты:

ai=yi,ci=Mi2,di=Mi+1Mi6hi,bi=yi+1yihihi(2Mi+Mi+1)6.a_i = y_i, \quad c_i = \frac{M_i}{2}, \quad d_i = \frac{M_{i+1} - M_i}{6 h_i}, \quad b_i = \frac{y_{i+1} - y_i}{h_i} - \frac{h_i (2 M_i + M_{i+1})}{6}.

Подстановка x=xix = x_i даёт Si(xi)=yiS_i(x_i) = y_i, а согласование bib_i обеспечивает гладкость стыков. Так кубическая сплайн-интерполяция собирает единую дважды дифференцируемую кривую из локальных кубик.

Сравнение с многочленом Лагранжа

Кубический сплайн интерполяция и единый интерполяционный многочлен решают одну задачу - провести кривую через узлы, - но ведут себя противоположно при росте числа точек. Многочлен степени nn, например в форме интерполяционной формулы Лагранжа, при большом nn на равномерной сетке даёт растущие осцилляции у краёв (феномен Рунге). Сплайн же всегда состоит из кубик, поэтому добавление узлов лишь уточняет кривую, не раскачивая её.

Платой за устойчивость является локальность другого рода: сплайн не задаётся одной формулой, его приходится хранить кусочно. Зато погрешность естественного сплайна на гладкой функции убывает как O(h4)O(h^4) для значений и O(h2)O(h^2) для второй производной, где hh - максимальный шаг сетки. Для большинства прикладных задач это гораздо надёжнее, чем глобальный многочлен.

Есть и принципиальное отличие в чувствительности к данным. Изменение одного значения yiy_i у многочлена Лагранжа перестраивает кривую на всём отрезке, тогда как у сплайна возмущение быстро затухает с удалением от изменённого узла - система на моменты диагонально доминирующая, и влияние одного узла локализовано. Это делает сплайн предпочтительным при работе с зашумлёнными или часто обновляемыми данными, где не хочется, чтобы одна точка «дёргала» всю кривую.

Где применяется

Сплайны востребованы везде, где нужна гладкая кривая по дискретным данным: в компьютерной графике и шрифтах (хотя там чаще берут кривые Безье - родственную конструкцию), в траекториях движения роботов и станков ЧПУ, в сглаживании экспериментальных данных, в финансовых моделях кривой доходности. В численном анализе сплайн-интерполяция используется для приближённого дифференцирования и интегрирования табличных функций, поскольку производные и интеграл кубического сплайна считаются аналитически по уже найденным коэффициентам.

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

  • Путаница моментов и коэффициентов: MiM_i - это S(xi)S''(x_i), а не cic_i; коэффициент ci=Mi/2c_i = M_i / 2, забытая двойка ломает весь сплайн.
  • Неучтённые краевые условия: без двух дополнительных уравнений система недоопределена - нельзя просто отбросить M0M_0 и MnM_n.
  • Неравномерная сетка: при разных hih_i нельзя пользоваться упрощёнными формулами для равномерного шага, в систему входят именно hi1h_{i-1} и hih_i.
  • Степень (xxi)(x - x_i), а не xx: коэффициенты bi,ci,dib_i, c_i, d_i записаны относительно левого конца отрезка; подстановка «голого» xx даёт неверное значение.
  • Решение Гауссом вместо прогонки: для трёхдиагональной матрицы общий метод избыточен и менее устойчив - используйте алгоритм Томаса.

FAQ

Чем кубический сплайн лучше многочлена Лагранжа? При большом числе узлов он не страдает от феномена Рунге: степень остаётся третьей на каждом отрезке, поэтому кривая не осциллирует у краёв и устойчиво уточняется при добавлении точек.

Что такое моменты в методе сплайнов? Это значения второй производной сплайна в узлах, Mi=S(xi)M_i = S''(x_i). Их находят из трёхдиагональной системы, а затем по ним вычисляют коэффициенты кубики на каждом отрезке.

Какие краевые условия выбрать? Если о концах ничего не известно - естественные (M0=Mn=0M_0 = M_n = 0) для ручного счёта или not-a-knot в пакетах. Если известны наклоны на концах - закреплённые, они дают наименьшую погрешность.

Коротко

Кубическая сплайн-интерполяция строит гладкую кривую через таблицу точек, склеивая её из кубических многочленов Si(x)=ai+bi(xxi)+ci(xxi)2+di(xxi)3S_i(x) = a_i + b_i(x - x_i) + c_i(x - x_i)^2 + d_i(x - x_i)^3 с непрерывными SS, SS' и SS''. Ключ к построению - моменты Mi=S(xi)M_i = S''(x_i), которые находят из трёхдиагональной диагонально доминирующей системы методом прогонки за O(n)O(n), после чего по ним выражают коэффициенты каждого отрезка. Два краевых условия (естественные, закреплённые, not-a-knot или периодические) замыкают систему. В отличие от многочлена Лагранжа сплайн не подвержен феномену Рунге и даёт погрешность O(h4)O(h^4) на гладких функциях.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также