Гладкий кубический сплайн
.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