Интерполяционный полином Лагранжа L(x) представляет собой тот же самый полином (1), но записанный в другой форме, исключающей необходимость решения СЛАУ. Он представляется в виде линейной комбинации элементарных полиномов n-ной степени li(x), в которой коэффициентами служат заданные значения yi:
L(x) = y0l0(x) + y1l1(x) + y2l2(x) + ... + ynln(x) (2)
При таком определении интерполирующего полинома L(x) каждый элементарный полином li(x) должен удовлетворять следующим условиям в узловых точках:
li(xi) = 1, li(xj) = 0 (j-i)
Нетрудно убедиться, что этим условиям удовлетворяет полином
(x-x0)(x-x1)(x-x2)...(x-xj)..(x-xn)
li(x) = ------------------------------------------(xi-x0)(xi-x1)(xi-x2)...(xi-xj)...(xi-xn)
Окончательно формула полинома Лагранжа может быть представлена в виде:
n
--n | |(x-xj)
--- j=0
L(x) = > yi ------------; (3)
--- n
i=0 --| |(xi-xj)
j=0
j-i
5. Сплайн-интерполяция
Кубический сплайн представляет собой полином третий степени вида:
Si(x) = ai + bi(x-xi-1) + ci(x-xi-1)2 + di(x-xi-1)3, (4)
коэффициенты которого на каждом элементарном интервале (xi-1,xi)
имеют разные значения. В принятой системе индексации номер сплайна совпадает с номером правой границы элементарного интервала, на котором он работает.
Далее приводится словесно-формульное описание алгоритма определения коэффициентов кубических сплайнов для функции y(x), заданной набором n+1 точек xi, yi (i=0,1,2,3,...,n). При этом получается n отрезков интерполяции и, соответственно, n сплайнов Si (i=1,2,3,...,n), которые имеют 4n коэффициентов. Для определения последних необходимо 4n уравнений.
Обычно для сплайн-интерполяции используют равноотстоящие по x точки, т.е. все элементарные интервалы равны: xi+1 - xi = h. Коэффициенты ai, bi, ci и di выбираются таким образом, чтобы интерполирующие сплайны имели одинаковые производные первого и второго порядка в точках сшивки. Это позволяет получить очень качественный результат интерполяции, который может быть использован для различных целей.
Эти уравнения можно получить из условия равенства значений интерполируемой функции и сплайна в узловых точках:
Si(xi-1) = yi-1; Si(xi) = yi; (i=1,2,3,...,n) (5)
а также сшивки на границах элементарных интервалов первых производных сплайнов:
( dSi-1 ) ( dSi )
2-------2 = 2-----2 ; (i=2,3,...,n) (6)
9 dx 0xi 9 dx 0xi
и вторых производных:
( d2Si-1 ) ( d2Si )
2--------2 = 2------2; (i=2,3,...,n) (7)
9 dx2 0xi 9 dx2 0xi
Недостающие два уравнения получаются из условия "свободного закрепления концов":
( d2S1 ) ( d2Sn )
2------2 = 0; 2-------2 = 0 (8)
9 dx2 0x0 9 dx2 0xn
Подстановка (4) в уравнения (5) - (8) и некоторые преобразования приводят к следующей системе уравнений:
(
2 ai = yi-1; (i=1,2,...,n)
2 ai + bih + cih2 + dih3 = yi; (i=1,2,...,n)
* bi + 2cih + 3dih = bi+1; (i=1,2,...,n-1) (9)
2 ci + 3dih = Ci+1; (i=1,2,...,n-1)
2 c1 = 0;
2 cn + 3dnh = 0,
9
где h = xi+1 - xi = xi - xi-1 - расстояние между соседними точками (шаг по x).
Коэффициенты ai определяются просто:
ai = yi-1; (i=1,2,...,n) (10)
Затем можно определить коэффициенты ci. Для этого из уравнений системы (6) необходимо исключить ai, bi и di, что приводить к выражению:
yi-1 - 2yi + yi+1
ci + 4ci+1 + ci+2 = 37-------------------; (i=1,2,...,n-1) (11)
h2
Эта запись при развертывании индекса i в указанных пределах превращается в СЛАУ относительно ci. Данная система имеет трехдиагональную матрицу коэффициентов, в главной диагонали ее содержится 4, а в прилегающих к ней - 1. Для решения таких систем обычно используется специальный метод - метод прогонки.
После определения коэффициентов ci можно определить bi:
yi - yi-1 h
bi = ----------- - ---7(ci+1 + 2ci) (12)
h 3
и di:
di+1 - di
di = ----------- (i=1,2,3,...,n) (13)
3h
6. Используемые подпрограммы
Описанный выше алгоритм положен в основу подпрограммы SplineCoeff, предназначенной для вычисления коэффициентов кубического сплайна. Ее входные параметры имеют следующий смысл:
Nint - число интервалов интерполяции;
XA, YA - одномерные массивы - таблицы точек X и Y, по которым проводится интерполяция. Тип данных этих массивов - Vec100, определенный в модуле def_type; нумерация элементов в них начинается с нулевого. Число точек на единицу больше числа интервалов.
Выходные параметры SplineCoeff - одномерные массивы коэффициентов сплайнов A, B, C и D (тип Vec100). Переменная Err представляет собой код ошибки: Err=0 при благополучном завершении интерполяции. Остальные значения Err объяснены во входном комментарии подпрограммы.
Подпрограмма SplineCoeff находится в файле spline.pas (spli- ne.for, spline.cpp), который в паскалевском варианте представляет собой модуль
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.