 
        
        Гладкий кубический сплайн
.pdf 
Гладкие кубические сплайны
Фиксирован отрезок [a, b] и его разбиение a = x0 < x1 < · · · < xn = b. Функция S называется гладким кубическим сплайном, если
| 
 | 
 | 
 | 
 | 2 | k | 
 | 
 | 3; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | − | 
 | 
 | 
 | 
 | ||
| 1) | на каждом интервале [x | , xk+1], | k = 0, . . . , n | 
 | 
 | 1, | 
 | 
 | |||||||||||||||
| S(x) = pk,0 + pk,1x + pk,2x + pk,3x | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||
| 2) | функция и две ее производные непрерывны на [a, b]: | 
 | |||||||||||||||||||||
| S(r) | x | k − 0) = | S(r) x | 
 | , r | 
 | 
 | , | 
 | , | 
 | , | k | 
 | 1, 2, ..., n | − | 1. | 
 | 
 | ||||
| ( | 
 | ( | k + 0) | 
 | = 0 | 
 | 1 | 
 | 2 | 
 | 
 | = | 
 | (r) | (x0 + | 
 | 
 | (r) | (xn − 0). | ||||
| Сплайн называется периодическим, если S | 
 | 0) = S | 
 | ||||||||||||||||||||
Можно строить негладкие сплайны, т. е отказаться от непрерывности второй производной. Такие сплайны строить много проще, т. к. исчезают условия согласования, составляющие основную проблему построения гладкого сплайна.
Для того, чтобы строить сплайн, надо знать его значения в узлах разбиения y0, y1, . . . , yn и значения первых производных в тех же точках m0, m1, . . . , mn. Ïî òà- ким даным на каждом отрезке однозначно восстанавливается кубический многочлен. Они в совокупности и образуют сплайн. Но это негладкий сплайн, т. к. нет гарантии
непрерывности второй производной. Заметим, что при построении таких сплайнов естественно полагать mk = f0(xk), если интерполируемая функция известна и лег-
ко вычисляется. Если задана только таблица значений функции в узлах, то обычно берут mk равным значению P 0(xk), где P квадратичный многочлен, проходящий
через точки (xk−1, yk−1), (xk, yk), (xk+1, yk+1).
Для того, чтобы построить гладкий сплайн, надо считать величины m1, . . . , mn−1 неизвестными параметрами и находить их из условия гладкости.
Величины m0, mn должны быть заданы. Обычно их фиксируют на основании краевых условий α0S(a) + β0S0(a) = γ0, α1S(b) + β1S0(b) = γ1.
Здесь для упрощения выкладок мы полагаем известными S0(a) = m0 è S0(b) = mn. Периодический сплайн полностью определен значениями в узлах сетки при условии y0 = yn.
Рассмотрим сначала более простую задачу.
Алгоритм построения негладкого сплайна
1) Построение многочлена pk на отрезке [xk, xk+1].
Информация о значениях производной в точках xk, xk+1 позволяет строить мно- гочлен Ньютона по модифицированной таблице разделенных разностей (проведен предельный переход: там, где узлы совпали, появляются производные:
| 
 | 
 | 
 | 
 | 
 | xk | yk | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | mk | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | xk | yk | r1(2) | 
 | 
 | 
 | 
 | 
 | |||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | r1(1) | 
 | r1(3) | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | xk+1 yk+1 | r2(2) | 
 | 
 | 
 | 
 | 
 | ||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | mk+1 | 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 
 | 
 | xk+1 yk+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||
| Здесь r(1) | = | yk+1 − yk | , | r(2) | = | r1(1) − mk | , r(2) | = | mk+1 − r1(1) | , | r(3) | = | r2(2) − r1(2) | , | |
| 1 | 
 | xk+1 − xk | 1 | 
 | xk+1 | 2 | 
 | xk+1 − xk | 
 | 1 | xk+1 − xk | 
 | |||
| 
 | 
 | 
 | 
 | − xk | 
 | 
 | 
 | 
 | |||||||
1
 
искомый многочлен pk(x) = yk + mk(x − xk) + r1(2)(x − xk)2 + r1(3)(x − xk)2(x − xk+1). Легко проверить, что p(xk+r) = yk+r, p0(xk+r) = mk+r, r = 0, 1
p00k(x) = 2r1(2) + 2r1(3)(3x − 2xk − xk+1). 2) Описание сплайна.
S(x) = pk(x) ïðè x [xk, xk+1], k = 0, 1, . . . , n − 1.
Алгоритм построения гладкого сплайна
1) Формирование системы уравнений для определения чисел mk производных сплайна в узловых точках.
Полагая эти числа неизвестными параметрами, мы можем с их помощью описать многочлены, формирующие сплайн, как это сделано выше, и в каждом внутреннем узле получить по уравнению условию согласования:
| p00 | (x | k+1 | ) = p00 | (x | k+1 | ), k = 0, 1, . . . , n | − | 2. | 
 | 
 | 
 | 
 | 
 | |||||
| k | 
 | 
 | k+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||
| 
 | После тождественных преобразований эти уравнения можно записать так | |||||||||||||||||
| λkmk + 2mk+1 + µkmk+2 = ck, k = 0, 1, 2, . . . , n − 2, | − xk+1 | + λk xk+1 | − xk . | |||||||||||||||
| ãäå λk = | xk+2− | 
 | xk | 
 | , | µk = xk+2 | − xk , | ck = 3 µk xk+2 | ||||||||||
| 
 | 
 | 
 | 
 | xk+2 | 
 | xk+1 | 
 | xk+1 | xk | 
 | yk+2 | xk+1 | 
 | yk+1 | xk | |||
| 
 | 
 | 
 | 
 | 
 | − | 
 | 
 | 
 | 
 | − | 
 | 
 | 
 | − | 
 | 
 | − | |
В этой системе n − 1 уравнение и n + 1 неизвестная величина. Мы будем рассматривать вариант простейших краевых условий, считая, что m0 = f0(x0) è mn = f0(xn). Приведем систему к стандартному виду Ax = b:
x1 = m1, ..., xn−1 = mn−1
a1,1 = 2, a1,2 = µ0, b1 = c0 − λ0m0
ak,k−1 = λk−1, ak,k = 2, ak,k+1 = µk−1, bk = ck−1, k = 1, 2, . . . , n − 1
an−1,n−2 = λn−2, an−1,n−1 = 2, bn−1 = cn−2 − µn−2mn.
Матрица A трехдиагональная: ai,j = 0 åñëè |i − j| > 1.
2)Решаем систему и получаем значения производных сплайна в узлах.
3)Пользуемся рассмотреной выше схемой построения сплайна в том случае, когда
âузлах известны значения сплайна и его производной.
2а) Рассмотрим отдельно случай периодического сплайна. Для него таблица зна- чений может быть расширена:
| x−1 | x0 | x1 | · · · | xn−1 | xn xn+1 | |
| yn−1 | y0 | y1 | · · · | yn−1 | y0 | y1 | 
| mn−1 m0 m1 · · · | mn−1 m0 | m1 | ||||
Здесь x−1 = x0−(xn−xn−1), xn+1 = xn+(x1−x0). Дальнейшее расширение таблицы не даст новых уравнений из-за периодичности. Возникают только условия согласования в точках x0 è xn. Прямая проверка показывает, что эти уравнения одинаковые:
λ−1mn−1 + 2m0 + µ−1m1 = c0,
| ãäå λ | −1 | = | 
 | 
 | x1 − x0 | 
 | , µ | −1 | = | xn − xn−1 | , | |||
| 
 | 
 | 
 | 
 | 
 | (x1 − x0) + (xn − xn−1) | |||||||||
| 
 | 
 | (x1 − x0) + (xn − xn−1) | 
 | 
 | 
 | |||||||||
| 
 | 
 | µ−1 | y1 | y0 | 
 | y0 | yn−1 | . | 
 | 
 | 
 | |||
| c−1 = 3 | x1 | − | + λ−1 | xn | − | 
 | 
 | 
 | ||||||
| x0 | xn−1 | 
 | 
 | 
 | ||||||||||
| 
 | 
 | 
 | 
 | 
 | − | 
 | 
 | − | 
 | 
 | 
 | 
 | 
 | |
В системе прибавилось одно уравнение и добавилось одно неизвестное m0 (â ñè- лу периодичности m0 = mn), теперь из нее находятся все неизвестные параметры m0, ...,mn−1. Матрица коэффициентов “почти“ трехдиагональная, лишние ненулевые
2
 
элементы возникают только в углах матрицы. Опишем в этом случае стандартную систему Ax = b:
x1 = m0, ..., xn = mn−1
a1,1 = 2, a1,2 = µ−1, a1,n = λ−1, b1 = c−1
| ak,k−1 = λk−2, ak,k = 2, ak,k+1 = µk−2, | bk = ck−2, k = 2, . . . , n − 3, | 
| an,1 = µn−2, an,n−1 = λn−2, an,n = 2, | bn = cn−2, | 
в первом уравнении учтено, что m−1 = mn−1, а в последнем, что m0 = mn.
Метод решения систем Ax = b с ленточной матрицей коэффициентов (прогонка)
| 
 | 
 | Пусть матрица A трехдиагональная: ai,j | = 0, åñëè |i − j| > 1, i, j = 1, . . . , N. | ||||||||||||||||||||||
| 
 | 
 | Прямой ход прогонки. | 
 | −a1,2 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||
| Положим α1 = | b1 | , β1 = | 
 | , | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | a1,1 | 
 | a1,1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| По индукции можно проверить, что полагая | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||
| αk = | bk − ak,k−1αk−1 | , βk | = | 
 | −ak,k+1 | 
 | 
 | , | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||
| 
 | 
 | 
 | ak,k + ak,k−1βk−1 | 
 | ak,k | + ak,k−1βk−1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||
| мы сможем переписать уравнения в виде | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | bN − aN,N−1αN−1 | 
 | |||||||||||||||
| x | 
 | = α | + β | x | 
 | 
 | , k = 1, 2, . . . , N | − | 1, x | 
 | = α | 
 | , | α | = | 
 | . | ||||||||
| 
 | k | 
 | k | k | 
 | k+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | N | 
 | 
 | N | 
 | N | 
 | aN,N + aN,n−1βN−1 | ||||
Обратный ход прогонки.
По имеющимся формулам последовательно восстанавливаем xn−1, . . . , x1.
| 
 | 
 | Метод решения систем Ax = b с почти ленточной матрицей коэффициентов (про- | ||||||||||||||||||||||||||||||||||||
| гонка) | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| 
 | 
 | Пусть матрица A почти трехдиагональная ai,j = 0 åñëè |i − j| > 1, | i, j = 1, . . . , N, | |||||||||||||||||||||||||||||||||||
| за исключением угловых элементов a1,N , è aN,1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||||||||
| Положим α1 | = | b1 | , | β1 = | −a1,2 | , | γ1 = | −a1,N | , | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | a1,1 | 
 | 
 | 
 | 
 | a1,1 | 
 | 
 | 
 | 
 | a1,1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| αk = | 
 | bk − ak,k−1αk−1 | 
 | , βk = | 
 | −ak,k+1 | 
 | 
 | 
 | , | γk = | 
 | −ak,k−1γk−1 | , | 
 | 
 | 
 | |||||||||||||||||||||
| ak,k + ak,k−1βk−1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ak,k + ak,k−1βk−1 | 
 | 
 | 
 | |||||||||||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | ak,k | + ak,k−1βk−1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||||||
| тогда (индукция) | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||
| xk = αk + βkxk+1 + γkxn, k = 1, 2, . . . , N − 2 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||||||
| далее из предпоследнего уравнения | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||
| aN−1,N−2xN−2 + aN−1,N−1xN−1 + aN−1,N xN = bN−1 получим | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||||||||||
| xN−1 = αN−1 + βN−1xN , | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||
| ãäå αN−1 | = | 
 | bN−1 − aN−1,N−2αN−2 | , βN−1 = | −aN−1,N − aN−1,N−2γN−2 | . | ||||||||||||||||||||||||||||||||
| aN−1,N−1 + aN−1,N−2βN−2 | 
 | 
 | 
 | 
 | ||||||||||||||||||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | aN−1,N−1 + aN−1,N−2βN−2 | 
 | |||||||||||||||||||||
| 
 | 
 | Последнее уравнение aN,1x1 + aN,N−1xN−1 + aN,N xN = bN | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||||||||
| отрывает второй цикл прогонки | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||
| x1 = δ1 + ε1xN , ãäå δ1 | = | bN − aN,N−1αN−1 | , | ε1 = | −aN,N − aN,N−1βN−1 | , | 
 | 
 | ||||||||||||||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | aN,1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | aN,1 | 
 | 
 | 
 | 
 | 
 | |||
| возврашаемся к первому уравению и, двигаясь вниз, получим | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||||||||||||||||||
| x | k | = δ | k | + ε | k | x | N | , ãäå δ | k | = | δk−1 − αk−1 | , | ε | k | = | εk−1 − γk−1 | , k = 2, . . . , N | − | 1, | |||||||||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | βk−1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | βk−1 | 
 | 
 | 
 | 
 | 
 | |||||||||||
| теперь предпоследнее уравнение | xN−1 = αN−1 + βN−1xN дает выражение для | |||||||||||||||||||||||||||||||||||||
3
 
| xN = | αN−1 − δN−1 | , | 
 | 
 | 
 | 
 | 
 | 
 | |
| εN−1 − βN−1 | 
 | 
 | αN−1 − δN−1 | 
 | − | 
 | |||
| 
 | 
 | 
 | 
 | 
 | 
 | ||||
| и окончательно x | 
 | = δ | + ε | 
 | , k = 1, 2, . . . , N | 1. | |||
| 
 | k εN−1 − βN−1 | ||||||||
| 
 | 
 | k | k | 
 | 
 | 
 | |||
Форма отчета (описание сплайна)
Таблица коэфициентов многочленов Ньютона для каждого из отрезков
yk,mk,r1(2),r1(3)
Таблица
x,f(x),S(x),S(1)(x),S(2)(x) эти числа должны быть представлены для
| x0,x0+x1 | , | x1 и т.д. по всем узлам и средним точкам. | 
| 2 | 
 | 
4
