Интерполяция кубическими сплайнами

реклама
Интерполяция кубическими сплайнами
Одной из задач, возникающих в археологии при исследовании керамических предметов быта (горшков, кувшинов, корчаг и т.д.), является расчет их характеристик (объема,
кривизны тулова, кривизны предплечья, максимального диаметра, общей высоты) и описание формы по численным значениям определенных параметров. Эти параметры зависит
от типа изделия, например, для кувшинов это 7 поперечных сечений и 6 соответствующих
расстояний между ними.
(Археологи считают, что эти параметры позволяют удовлетворительно описать
форму сосуда. Второе и пятое сечения соответствуют минимальному и максимальному
диаметру сосуда, четвертое и шестое сечения – окрестности точек максимальной выпуклости предплечья и тулова).
Нетрудно видеть, что контур кувшина представляет собой график полинома третьей степени. Задача состоит в том. Чтобы получить параметры этого полинома, пользуясь
значениями параметров, т.е. провести кривую третьего порядка через множество точек с
d
d
d
d
координатами (0,1 1 ), ( h1 , 2 ), ( h2 , 3 ),..., ( h6 , 7 ) .
2
2
2
2
Для решения этой задачи применяется метод интерполяции кубическими сплайнами.
Ранее на кафедре математической статистики КГУ был реализован алгоритм этого
метода на языке Паскаль.
Теоретическое описание метода
В основе метода лежит идея использовать для сплайн-интерполяции кусочнокубическую функцию. Интервал интерполяции разбивается на небольшие отрезки (в
нашем случае на 6 отрезков с длинами h1 , h2 ,..., h6 ); на каждом из них строится полиномом
третьей степени. В общем случае, когда аппроксимируется функция, график которой проходит через точки ( ( xi , yi ), i  1,..., n  1 ), полином имеет вид:
Si ( x)  yi  c1,i ( x  xi )  c2,i ( x  xi )2  c3,i ( x  xi )3 ; xi  x  xi 1; i  1,..., n
В нашем случае yi 
di
, i  1,..., 7; x1  0; xi  hi 1 , i  2,..., 7
2
Коэффициенты полиномов c1,i , c2,i , c3,i подбираются так, чтобы обеспечить непрерывность функции, её первой и второй производных на границах интервалов (т.е. в точках
h1 , h2 ,..., h5 ).
Si ( xi )  Si 1 ( xi ); Si '( xi )  Si 1 '( xi ); Si ''( xi )  Si 1 ''( xi ); i  2,..., n
В нашем случае n=6.
Также есть возможность задать граничные условия - значения первой или второй
производной на границах интервала. Если значения одной из производных на границе известны, то, задав их, мы получаем крайне точную интерполяционную схему. Если значения неизвестны, то можно положить вторую производную на границе равно нолю и получить достаточно хорошие результаты.
Для вычисления коэффициентов c1i , c2i , c3i , i = 1, 2, ..., n-1 решается система линейных уравнений, построенная из условия непрерывности производной S'(x) в узлах сетки и дополнительных краевых условий на вторую производную, которые имеют вид:
2S''1 + b1 *S''2 = b2
b3 *S''N-1 + 2S''N = b4
Здесь возможны два случая. Случай первый, когда известны значения первой производной в краевых точках (y'1 = y'(x1 ), y'n = y'(xn )), тогда следует положить:
b1 = 1, b2 = (6/(x2 -x1 )) * ((y2 -y1 ) / (x2 -x1 )-y'1 ),
b3 = 1, b4 = (6/(xn -xn-1 )) * (y'n - (yn -yn-1 )/(xn -xn-1 ))
Случай второй, когда известны значения второй производной (y''1 = y''(x1 ), y''n =
y''(xn )), тогда полагаем:
b1 = 0, b2 = 2*y''1
b3 = 0, b4 = 2*y''n
Отметим, что точки xi должны быть отсортированы по возрастанию.
Таким образом, чтобы получить значение интерполируемой функции f в точке x
необходимо в начале определить какому из отрезков разбиения она принадлежит (т.е.
найти такое i, что xi < x < xi+1 ) и затем воспользоваться формулой S(x) с соответствующими c1i , c2i , c3i , yi .
Скачать