- •4.Приближение функций
- •4.1.Интерполяция
- •4.1.1.Интерполяционные формулы Ньютона
- •4.1.2.Интерполяционная формула Лагранжа
- •4.1.3.Остаточный член интерполяционной формулы Лагранжа
- •4.1.4.Равномерное приближение функции. Многочлены Чебышева
- •4.1.5.Интерполяция сплайнами
- •4.2.Аппроксимация. Метод наименьших квадратов
- •4.3.Задачи для самостоятельного решения
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(x – xi – 1) + ci(x – xi – 1)2 + di(x – xi – 1)3, (4.32)
xi – 1 ≤ x ≤ xi, 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(x – xi – 1) + ci(x – xi – 1)2 + di(x – xi – 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 |
|
|
|
|
|
