Читайте также: |
|
Пусть задана таблица значений функции yi в узлах x 0 < x 1 < … < 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 + cihi 2 + dihi 3 = 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)
Всего имеем 4 n – 2 уравнений для определения 4 n неизвестных. Чтобы получить еще два уравнения используют дополнительные краевые условия, например, требование нулевой кривизны интерполяционной кривой в концевых точках, т.е. равенства нулю второй производной на концах отрезка [ a, b ], a = x 0, 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) методом прогонки. Из первого уравнения выразим c 2 через c 3:
(4.43)
Подставим (4.43) во второе уравнение (4.42):
и выразим c 3 через c 4:
(4.44)
Предполагая, что из i -го уравнения (4.42) получим
(4.45)
Сформулируем алгоритм интерполяции с помощью сплайна:
Исходные данные:
Значения функции y 0, y 1, …, yn в узлах x 0, x 1, …, xn (x 0 < x 1 < … < 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). В диапазоне A 1: M 1 запишем обозначения столбцов как в таблице 4.6.
0. Построим таблицу значений функции.
В ячейках A 2: A 12 запишем значения индекса i = 0, 1, …, 10.
Шаг изменения x равен 2/10 = 0,2. В ячейку B 2 запишем 0, в B 3 — число 0,2; выделим B 2: B 3 и маркером заполнения протянем вниз до B 12. Присвоим диапазону B 2: B 12 имя x командой «Вставка — Имя — Присвоить — x».
В ячейку C 3 запишем формулу =B3–B2; выделим C 3 и маркером заполнения протянем вниз до C 12.
В ячейку D 2 запишем формулу =SIN(3,1415926*x); выделим D 2 и маркером заполнения протянем вниз до D 12.
В ячейку E 3 запишем формулу =3*(D4-D3)/C4-3*(D3-D2)/C3; выделим E 3 и маркером заполнения протянем вниз до E 11.
1. Вычислим коэффициенты прогонки.
В ячейку F 4 запишем формулу =-C4/(2*(C3+C4)); В ячейку F 5 запишем формулу =(-C5-F4*C4)/(2*(C4+C5)); выделим F 5 и маркером заполнения протянем вниз до F 11; В ячейку F 12 запишем 0.
В ячейку G 4 запишем формулу =E3/(2*(C4+C5)); В ячейку G 5 запишем формулу =(E4-G4*C4)/(2*(C5+C6)). Выделим G 5 и маркером заполнения протянем вниз до F 12.
2. Вычислим коэффициенты ci.
В ячейку H 13 запишем число 0. В ячейку H 12 запишем формулу =F12*H13+G12. Выделим H 12 и маркером заполнения протянем вверх до H 4. В ячейку H 3 запишем число 0.
3. Вычислим коэффициенты сплайна.
В ячейку I 3 запишем формулу =D2. Выделим I 3 и маркером заполнения протянем вниз до I 12.
В ячейку J 3 запишем формулу =(D3-D2)/C3-(2*H3+H4)*C3/3. Выделим J 3 и маркером заполнения протянем вниз до J 12.
В ячейку K 3 запишем формулу =(H4-H3)/(3*C3). Выделим K 3 и маркером заполнения протянем вниз до K 12.
4. Вычисление значения сплайна.
Точка x = 0,48 попадает в отрезок [0,4; 0,6]. Следовательно, надо использовать S 3(x), т.е. строку i = 3. Поэтому в ячейку L 5 запишем формулу =0,48-0,4. В ячейку M 5 запишем формулу =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 | |
i | x | h | y | g | α | β | c | a | b | d | x-xi-1 | S(x) | |
0,000 | 0,000 | ||||||||||||
0,200 | 0,200 | 0,588 | -3,37 | 0,00 | 0,00 | 3,14 | -4,99 | ||||||
0,400 | 0,200 | 0,951 | -5,45 | -0,25 | -4,21 | -2,99 | 0,59 | 2,54 | -3,11 | ||||
0,600 | 0,200 | 0,951 | -5,45 | -0,19 | -5,76 | -4,86 | 0,95 | 0,97 | 0,13 | 0,08 | 0,997 | ||
0,800 | 0,200 | 0,588 | -3,37 | -0,20 | -5,37 | -4,78 | 0,95 | -0,99 | 3,16 | ||||
1,000 | 0,200 | 0,000 | 0,00 | -0,20 | -2,87 | -2,89 | 0,59 | -2,56 | 4,99 | ||||
1,200 | 0,200 | -0,588 | 3,37 | -0,20 | 0,72 | 0,11 | 0,00 | -3,16 | 4,88 | ||||
1,400 | 0,200 | -0,951 | 5,45 | -0,20 | 4,03 | 3,04 | -0,59 | -2,55 | 3,20 | ||||
1,600 | 0,200 | -0,951 | 5,45 | -0,20 | 5,80 | 4,96 | -0,95 | -0,94 | -1,25 | ||||
1,800 | 0,200 | -0,588 | 3,37 | -0,20 | 5,36 | 4,21 | -0,95 | 0,87 | 2,54 | ||||
2,000 | 0,200 | 0,000 | 0,00 | 5,74 | 5,74 | -0,59 | 2,17 | -9,57 | |||||
0,00 |
Дата добавления: 2015-07-20; просмотров: 136 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Равномерное приближение функции. Многочлены Чебышева | | | Аппроксимация. Метод наименьших квадратов |