Приближение сплайнами
Цель лекции: Описать стандартные методы построения кубических сплайнов. Реализовать на языке C# процедуру интерполирования функций с помощью кубических сплайнов.
В предыдущей лекции мы рассматривали приближение функций с помощью многочленов. Многочлены являются бесконечно гладкими функциями. С одной стороны это может показаться достоинством интерполяционного метода. Однако на практике это достоинство часто оборачивается недостатком. Налагая на интерполяционную функцию столь большие ограничения, мы неизбежно сталкиваемся с проблемой устойчивости. Чаще гораздо более выгодно использовать в качестве интерполирующих функций меньшие требования гладкости, но получать более эффективные численные решения. Тем более, что во многих задачах, где возникают вопросы интерполяции, требования бесконечной гладкости являются неестественными.
Наиболее успешными средствами интерполяции числовых функций являются методы, основанные на сплайн-интерполяции. Термин "сплайн" происходит от названия гибкой рейки, с помощью которой проводят гладкие кривые через заданные точки. В заданных точках сплайн закреплялся физически. В математике под сплайном понимают интерполирующую функцию, производные которой могут иметь разрывы в узловых точках. Классическим вариантом сплайна является кубические сплайны. Эти сплайны иногда называют сплайнами Шёнберга по имени математика, который ввел эти сплайны на современном уровне. Кубические сплайны представляют собой дважды непрерывно дифференцируемые функции, которые на отрезка между соседними узлами являются кубическими многочленами.
Пусть также дано разбиение отрезка , и значения функции в узлах
Кубическим сплайном называется такая функция , , что для этой функции выполнены следующие условия:- , .
- , , являются непрерывными функциями.
- На каждом отрезке , функция представима в виде
Как мы увидим в дальнейшем - для однозначного задания сплайна нам необходимо дополнительно добавить краевые условия на искомый сплайн. Мы будем рассматривать наиболее характерные условия:
- , .
- , .
Перейдем к вопросу построения сплайна. Разумеется для того, чтобы задать сплайн необходимо вычислить набор коэффициентов , ; . Однако этот путь является неэффективным. Дело в том, что эти коэффициенты не являются независимыми - на них наложены условия, чтобы обеспечить непрерывность и непрерывную дифференцируемость первых и вторых производных. Мы будем использовать для задания сплайнов другой подход.
Введем обозначение
Запишем сплайн в следующей форме где , .Условия непрерывности второй производной сплайна определяют систему линейных уравнений
( 15.1) |
( 15.2) |
Как мы уже отмечали, система 15.2 представляет собой систему линейных алгебраических уравнений. Однако матрица, определяющая эту систему является трехдиагональной. Для решения таких уравнений будем применять уже известный нам метод прогонки.
Приведем реализацию нашего класса
Теперь испытаем наш сплайн на функции . Мы будем строить сплайн всего по шести точкам.
На рисунке 15.1 мы приводим погрешность нашей интерполяции. Наибольшая погрешность не превосходит , что оказывается очень неплохим результатом.
Ключевые термины
Сплайн - интерполяционная функция, производные которой могут иметь разрывы в узловых точках.
Кубические сплайны - сплайны, которые являются кубическими многочленами между соседними узловыми точками и являются дважды непрерывно дифференцируемыми.
Краткие итоги: Рассмотрены методы интерполяции функций на основе кубических сплайнов. Приведена объектно-ориентированная реализация построение кубического сплайна.