Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Приближение функций.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
979.46 Кб
Скачать

4.1.5.Интерполяция сплайнами

Пусть задана таблица значений функции yi в узлах x0 < x1 < … < xn. Обозначим hi = xi xi – 1, i = 1, 2, …, n.

Сплайн (spline) — гладкая кривая, проходящая через заданные точки (xi, yi), i = 0, 1, …, n. Интерполяция сплайнами представляет собой локальную интерполяцию, когда на каждом отрезке [xi – 1, xi], i = 1, 2, …, n, применяется кубическая кривая, удовлетворяющая некоторым условиям гладкости, а именно, непрерывности самой функции и её первой и второй производных в узловых точках. Использование кубической функции вызвано следующими соображениями. Если предположить, что интерполяционная кривая соответствует упругой линейке, закрепленной в точках (xi, yi), то из курса сопротивления материалов известно, что эта кривая определяется как решение дифференциального уравнения f (IV)(x) = 0 на отрезке [xi – 1, xi] (для простоты изложения мы здесь не рассматриваем вопросы, связанные с физическими размерностями). Общим решением такого уравнения является многочлен 3-й степени с произвольными коэффициентами, который удобно записать в виде

Si(x) = ai + bi(xxi – 1) + ci(xxi – 1)2 + di(xxi – 1)3, (4.32)

xi – 1xxi, i = 1, 2, …, n.

Коэффициенты функций Si(x) определяются из условий непрерывности функции и её первой и второй производных во внутренних узлах xi, i = 1, 2, …, n – 1.

Из (4.32) при x = xi – 1 получим

Si(xi – 1) = yi – 1 = ai, i = 1, 2, …, n, (4.33)

а при x = xi

Si(xi) = ai + bihi + cihi2 + dihi3 = yi, i = 1, 2, …, n. (4.34)

Условия непрерывности интерполяционной функции записываются в виде Si(xi) = Si + 1(xi), i = 1, 2, …, n – 1 и из (4.33), (4.34) следует, что они выполнимы.

Найдем производные функции Si(x):

При x = xi – 1 имеем , а при x = xi получим

Условия непрерывности производных приводят к уравнениям

(4.35)

(4.36)

Всего имеем 4n – 2 уравнений для определения 4n неизвестных. Чтобы получить еще два уравнения используют дополнительные краевые условия, например, требование нулевой кривизны интерполяционной кривой в концевых точках, т.е. равенства нулю второй производной на концах отрезка [a, b], a = x0, b = xn:

(4.37)

Систему уравнений (4.33) — (4.37) можно упростить и получить рекуррентные формулы для вычисления коэффициентов сплайна.

Из (4.33) имеем явные формулы для вычисления коэффициентов ai

ai = yi – 1, i = 1, …, n. (4.38)

Выразим di через ci с помощью (4.36), (4.37):

Положим cn + 1 = 0 и тогда для di получим одну формулу

(4.39)

Подставим выражения для ai и di в равенство (4.34):

и выразим bi через ci:

(4.40)

Исключим из (4.35) коэффициенты bi и di с помощью (4.39), (4.40):

Отсюда получим систему уравнений для определения ci:

(4.41)

Система уравнений (4.41) может быть переписана в виде

(4.42)

Здесь введено обозначение

.

Решим систему уравнений (4.42) методом прогонки. Из первого уравнения выразим c2 через c3:

(4.43)

Подставим (4.43) во второе уравнение (4.42):

и выразим c3 через c4:

(4.44)

Предполагая, что из i-го уравнения (4.42) получим

(4.45)

Сформулируем алгоритм интерполяции с помощью сплайна:

Исходные данные:

Значения функции y0, y1, …, yn в узлах x0, x1, …, xn (x0 < x1 < … < xn).

0. Вычислим значения hi и gi:

hi = xi xi – 1, i = 1, 2, …, n,

. (4.46)

1. Прямой ход прогонки для вычисления коэффициентов ci. Вычислим коэффициенты прогонки αi и βi:

(4.47)

2. Обратный ход прогонки для вычисления коэффициентов ci. Вычислим коэффициенты ci:

(4.48)

3. Вычисление коэффициентов ai, bi, di:

(4.49)

4. Вычисление значения функции с помощью сплайна. Для этого найти значение i такое, что данное значение переменной x принадлежит отрезку [xi – 1, xi] и вычислить

Si(x) = ai + bi(xxi – 1) + ci(xxi – 1)2 + di(xxi – 1)3. (4.50)

Пример 4.6. Построить кубический сплайн для функции f(x) = sin(πx) на отрезке [0; 2], используя разбиение отрезка на n = 10 частей. Найти значение в точке x = 0,48.

Решение. Применим для решения задачи в программе Excel формулы (4.42) — (4.46). В диапазоне A1:M1 запишем обозначения столбцов как в таблице 4.6.

0. Построим таблицу значений функции.

В ячейках A2:A12 запишем значения индекса i = 0, 1, …, 10.

Шаг изменения x равен 2/10 = 0,2. В ячейку B2 запишем 0, в B3 — число 0,2; выделим B2: B3 и маркером заполнения протянем вниз до B12. Присвоим диапазону B2:B12 имя x командой «Вставка — Имя — Присвоить — x».

В ячейку C3 запишем формулу =B3–B2; выделим C3 и маркером заполнения протянем вниз до C12.

В ячейку D2 запишем формулу =SIN(3,1415926*x); выделим D2 и маркером заполнения протянем вниз до D12.

В ячейку E3 запишем формулу =3*(D4-D3)/C4-3*(D3-D2)/C3; выделим E3 и маркером заполнения протянем вниз до E11.

1. Вычислим коэффициенты прогонки.

В ячейку F4 запишем формулу =-C4/(2*(C3+C4)); В ячейку F5 запишем формулу =(-C5-F4*C4)/(2*(C4+C5)); выделим F5 и маркером заполнения протянем вниз до F11; В ячейку F12 запишем 0.

В ячейку G4 запишем формулу =E3/(2*(C4+C5)); В ячейку G5 запишем формулу =(E4-G4*C4)/(2*(C5+C6)). Выделим G5 и маркером заполнения протянем вниз до F12.

2. Вычислим коэффициенты ci.

В ячейку H13 запишем число 0. В ячейку H12 запишем формулу =F12*H13+G12. Выделим H12 и маркером заполнения протянем вверх до H4. В ячейку H3 запишем число 0.

3. Вычислим коэффициенты сплайна.

В ячейку I3 запишем формулу =D2. Выделим I3 и маркером заполнения протянем вниз до I12.

В ячейку J3 запишем формулу =(D3-D2)/C3-(2*H3+H4)*C3/3. Выделим J3 и маркером заполнения протянем вниз до J12.

В ячейку K3 запишем формулу =(H4-H3)/(3*C3). Выделим K3 и маркером заполнения протянем вниз до K12.

4. Вычисление значения сплайна.

Точка x = 0,48 попадает в отрезок [0,4; 0,6]. Следовательно, надо использовать S3(x), т.е. строку i = 3. Поэтому в ячейку L5 запишем формулу =0,48-0,4. В ячейку M5 запишем формулу =I5+J5*L5+H5*L5^2+K5*L5^3.

Получим значение 0,997. Точное значение sin(0,48π) = 0,998.

Табл. 4.6

A

B

C

D

E

F

G

H

I

J

K

L

M

1

i

x

h

y

g

α

β

c

a

b

d

x-xi-1

S(x)

2

0

0,000

 

0,000

 

 

 

 

 

 

 

 

 

3

1

0,200

0,200

0,588

-3,37

 

 

0,00

0,00

3,14

-4,99

 

 

4

2

0,400

0,200

0,951

-5,45

-0,25

-4,21

-2,99

0,59

2,54

-3,11

 

 

5

3

0,600

0,200

0,951

-5,45

-0,19

-5,76

-4,86

0,95

0,97

0,13

0,08

0,997

6

4

0,800

0,200

0,588

-3,37

-0,20

-5,37

-4,78

0,95

-0,99

3,16

 

 

7

5

1,000

0,200

0,000

0,00

-0,20

-2,87

-2,89

0,59

-2,56

4,99

 

 

8

6

1,200

0,200

-0,588

3,37

-0,20

0,72

0,11

0,00

-3,16

4,88

 

 

9

7

1,400

0,200

-0,951

5,45

-0,20

4,03

3,04

-0,59

-2,55

3,20

 

 

10

8

1,600

0,200

-0,951

5,45

-0,20

5,80

4,96

-0,95

-0,94

-1,25

 

 

11

9

1,800

0,200

-0,588

3,37

-0,20

5,36

4,21

-0,95

0,87

2,54

 

 

12

10

2,000

0,200

0,000

 

0,00

5,74

5,74

-0,59

2,17

-9,57

 

 

13

 

 

 

 

 

 

 

0,00