Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Гладкий кубический сплайн

.pdf
Скачиваний:
25
Добавлен:
01.05.2014
Размер:
82.87 Кб
Скачать

Гладкие кубические сплайны

Фиксирован отрезок [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