Математика / Интерполяция

Кубический сплайн с заданными наклонами на концах

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

Опубликовано: Обновлено:

Формула

$$\begin{aligned}2h_0M_0+h_0M_1&=6(\delta_0-m_L),\\h_{n-1}M_{n-1}+2h_{n-1}M_n&=6(m_R-\delta_{n-1}).\end{aligned}$$
Схема Сплайн воспроизводит кубическую траекторию
01202468Положение, мВремя, сСплайнЛоманая

В узлах отмечены положения 0, 1 и 8 м. Секущая на втором интервале имеет наклон 7 м/с, а касательная в конечной точке — 12 м/с.

Обозначения

$hᵢ$
шаг между соседними абсциссами, ед. x
$δᵢ$
секущий наклон (yᵢ₊₁ − yᵢ)/hᵢ, ед. y / ед. x
$Mᵢ$
вторая производная сплайна в узле i, ед. y / ед. x²
mL, mR
заданные первая производная на левом и правом конце, ед. y / ед. x
$n$
число промежутков, —

Условия применения

Узлы строго упорядочены, оба концевых наклона заданы по одной и той же шкале x. На каждом промежутке берут кубический полином. Внутри области его значение и первые две производные согласованы в соседних кусках.

Ограничения

Если наклоны неизвестны, подстановка нулей навяжет остановку на границах. При неточных скоростях погрешность особенно заметна у концов. Гладкость второй производной сама по себе не сохраняет монотонность и не оправдывает экстраполяцию.

Подробное объяснение

Обычная таблица фиксирует только значения в узлах. Две краевые скорости дают дополнительную информацию о форме в начале и в конце. Например, для координаты по времени нулевой начальный наклон означает покой, но начальное ускорение при этом может быть ненулевым.

Вторая производная на первом промежутке меняется линейно от M₀ до M₁. После интегрирования секущий наклон равен mL + h₀(2M₀ + M₁)/6. Справа удобнее выразить правый наклон через секущий: mR = δₙ₋₁ + hₙ₋₁(Mₙ₋₁ + 2Mₙ)/6. Отсюда получаются две строки с разным порядком вычитания.

Во внутренних узлах производную считают с двух соседних промежутков и приравнивают. Для узла i получается hᵢ₋₁Mᵢ₋₁ + 2(hᵢ₋₁+hᵢ)Mᵢ + hᵢMᵢ₊₁ = 6(δᵢ−δᵢ₋₁). У каждой строки участвуют только ближайшие узлы, поэтому систему удобно решать прогонкой.

После решения используют Mᵢ для восстановления кубиков. На левом краю сравнивают производную первого кубика с mL, на правом краю производную последнего кубика сравнивают с mR. Натуральный сплайн использует ту же внутреннюю систему, но заменяет краевые строки условиями M₀ = Mₙ = 0.

Как пользоваться формулой

  1. Упорядочьте абсциссы и вычислите каждый шаг, включая первый и последний промежутки.
  2. Рассчитайте секущие наклоны по разностям ординат и согласуйте единицы с заданными скоростями.
  3. Запишите две краевые строки и добавьте уравнение непрерывности наклона для каждого внутреннего узла.
  4. Решите трёхдиагональную систему, восстановите кубики и продифференцируйте крайние куски для контроля.

Историческая справка

Численные методы построения кубических сплайнов стали отдельным предметом литературы о приближении во второй половине XX века. В указателе NIST DLMF к разделу интерполяции среди руководств, рассматривающих сплайны, указана книга Булирша и Рутишаузера 1968 года. Предписанный наклон относится к постановке краевых условий в этой области численного анализа.

Современная документация SciPy различает несколько способов замыкания задачи для одних и тех же узловых данных. При передаче двух пар, где первый элемент пары равен единице, можно задать произвольные наклоны на обоих концах. Короткое имя clamped в этом интерфейсе обозначает частный случай с двумя нулевыми наклонами. Явная запись двух краевых строк раскрывает тот же выбор через узловые вторые производные.

Историческая линия формулы

Условия с заданным наклоном принадлежат практике кубической сплайн-интерполяции. Они получаются из интегрирования линейной второй производной и не требуют атрибуции отдельной эмпирической формуле. В SciPy произвольные наклоны задаются явно через порядок производной и её значение.

Пример

Положение задано в моменты 0, 1 и 2 с, его значения 0, 1 и 8 м. По условиям движения скорости на краях равны 0 и 12 м/с. Шаги по 1 с, секущие наклоны 1 и 7 м/с. Получаем 2M₀+M₁=6, M₀+4M₁+M₂=36 и M₁+2M₂=30. Первая и последняя строки дают M₀=(6−M₁)/2, M₂=(30−M₁)/2, после подстановки 3M₁=18. В узлах получаем 0, 6 и 12 м/с². При x в секундах это вторые производные полинома x³, который проходит через все три положения. Контроль по первой производной 3x² даёт 0 и 12 м/с, как и требовалось. На отметке 1 с производная равна 3 м/с.

Частая ошибка

Первую строку иногда записывают с разностью mL − δ₀. Проверка на траектории x² обнаруживает ошибку знака. Подмена краевых скоростей нулевыми вторыми производными меняет смысл задачи. Ещё одна ошибка возникает при переводе времени из минут в секунды без пересчёта скоростей.

Практика

Задачи с решением

Постоянное ускорение

Условие. x = 0, 1, 3 с, y = 0, 1, 9 м. Наклоны 0 и 6 м/с. Найдите вторые производные.

Решение. Шаги равны 1 и 2, секущие равны 1 и 4. Строки: 2M₀+M₁=6, M₀+6M₁+2M₂=18, 2M₁+4M₂=12. Вектор (2, 2, 2) удовлетворяет всем трём строкам; система строго диагонально преобладает.

Ответ. Во всех узлах 2 м/с².

Один отрезок с остановками

Условие. За 2 с объект сместился на 4 м, на обоих концах скорость нулевая. Чему равны краевые ускорения?

Решение. h=2, δ=2. Строки 4M₀+2M₁=12 и 2M₀+4M₁=−12. Сложение даёт M₁=−M₀; первая строка даёт M₀=6.

Ответ. 6 м/с² в начале и −6 м/с² в конце.

Дополнительные источники

  • https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.CubicSpline.html
  • https://dlmf.nist.gov/3.3

Связанные формулы

Математика

Натуральный кубический сплайн: уравнения для вторых производных

$h_{i-1}M_{i-1}+2(h_{i-1}+h_i)M_i+h_iM_{i+1}=6(\delta_i-\delta_{i-1})$

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

Математика

Кубическая интерполяция Эрмита по значениям и наклонам

$H(x)=h_{00}(s)y_0+h_{10}(s)\ell m_0+h_{01}(s)y_1+h_{11}(s)\ell m_1,\quad s=\frac{x-x_0}{\ell},\quad \ell=x_1-x_0$

Кубический полином Эрмита согласует значения и первые производные на двух концах интервала. Четыре заданных условия определяют единственную кубическую или более простую кривую между узлами.

Математика

Линейная интерполяция: значение между двумя узлами

$P(x)=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)=(1-t)y_0+ty_1,\quad t=\frac{x-x_0}{x_1-x_0}$

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