Вы находитесь на странице: 1из 14

Численные методы.

Практическое решение задач (вторая часть)

ОНУ им. И. И. Мечникова, факультет физики и математики, докладчик


Боровский Д.В., Одесса, 2021. - 19 с.

Специальность - Прикладная математика.

Предмет – Численные методы.

Интерполяционный многочлен Лагранжа.

Интерполяционный многочлен Ньютона.

Интерполяционный многочлен Эрмита (кратные узлы).

Интерполирование по равномерной сетке.

Численное дифференцирование. Погрешность численного


дифференцирования.

Глобальный интерполяционный кубический сплайн.


1. Вычислить значения заданной функции в указанных узлах интерполяции.
Построить интерполяционный многочлен Лагранжа. Оценить погрешность
интерполяции. Вычисления производить с четырьмя цифрами:
𝑓(𝑥) = 6 sin(𝑥 ) + 8
𝑥𝑖 0 0,1 0,3
𝑓(𝑥𝑖 ) 8 8,58 9,76
Вариант І:
Имеем задачу интерполяции. Так как число узлов 3, то степень
многочлена будет 𝑛 = 2. Сам многочлен Лагранжа имеет следующий
вид:
𝑛
∏𝑖=0,𝑗≠𝑖(𝑥 − 𝑥𝑗 )
𝐿 𝑛 (𝑥 ) = ∑ =
∏𝑖=0,𝑗≠𝑖 𝑥𝑖 − 𝑥𝑗
𝑖=0
𝑛
(𝑥 − 𝑥0 )(𝑥 − 𝑥1 ) … (𝑥 − 𝑥𝑖+1) … (𝑥 − 𝑥𝑛 )
= ∑ 𝑓(𝑥𝑖 ) .
(𝑥𝑖 − 𝑥0 )(𝑥𝑖 − 𝑥1 ) … (𝑥𝑖 − 𝑥𝑖+1) … (𝑥𝑖 − 𝑥𝑛 )
𝑖=0
Тогда имеем:
(𝑥 − 0,1)(𝑥 − 0,3) (𝑥 − 0)(𝑥 − 0,3)
𝐿2 (𝑥 ) = 8 + 8,58
(0 − 0,1)(0 − 0,3) (0,1 − 0)(0 − 0,3)
(𝑥 − 0)(𝑥 − 0,1)
+ 9,76 = 0,333𝑥 2 + 5,767𝑥 + 8.
(0,3 − 0)(0,3 − 0,1)

Вариант II:
Построим многочлен 𝑛 = 2 степени:
𝐿2(𝑥 ) = 𝑎𝑥 2 + 𝑏𝑥 + 𝑐;
Тогда найдем коэффициенты, если решим СЛАУ:
𝑐 = 𝑓1,
0,01𝑎 + 0,1𝑏 + 𝑐 = 𝑓2 ,
{
0,09𝑎 + 0,3𝑏 + 𝑐 = 𝑓3 .

𝑎 = 0,333;
𝑏 = 5,767;
{
𝑐 = 8.

Тогда искомый многочлен будет иметь вид:


𝐿2(𝑥 ) = 0,333𝑥 2 + 5,767𝑥 + 8.
Теперь найдем погрешность интерполирования:
𝑓 (𝑛+1)(𝑥𝑖∗ ) 1
1( )
𝑅2 𝑥 = ∏ (𝑥𝑖 ) , где 𝑥𝑖∗ ∈ ( 𝑥0 , 𝑥𝑛 ),
(𝑛 + 1)! 𝑛+1
𝑛

∏ (𝑥𝑖 ) = ∏ (𝑥𝑖 − 𝑥𝑗 ) = (𝑥 − 𝑥0 )(𝑥 − 𝑥1) … (𝑥 − 𝑥𝑛−1 )(𝑥 − 𝑥𝑛 ).


𝑛+1
𝑖=0,𝑖≠𝑗

𝑥(𝑥 − 0,1)(𝑥 − 0,3)(−6 cos(𝑥𝑖∗ ))


𝑅21(𝑥 ) = 𝑠𝑖𝑛 − 𝐿2(𝑥 ) = .
3!
Так как точка 𝑥𝑖∗ ∈ (0,0,3) неизвестна, можно делать лишь оценки |𝑅21(𝑥 )|,
полагая 𝑀3 = max | − 6cos(𝑥)| = 6, 𝑥 ∈ (0; 0,3). Найдем максимальное
значение |𝑥 (𝑥 − 0,1)(𝑥 − 0,3)|, реализовав в двух точках данного отрезка:

𝑥1 = 0,2215; 𝑥2 = 0,0451.

∏ (𝑥 ) = 𝑥 (𝑥 − 0,1)(𝑥 − 0,3) = 𝑥 3 − 0,4𝑥 2 + 0,03𝑥.


3

∏ (𝑥1 ) = −0,2215;
3

∏ (𝑥2 ) = −0,0451;
3

𝑅21(𝑥 ) = 8,0153 − 0,8262 = 7,1891.

2. Построить интерполяционный многочлен Ньютона по следующим


данным:
Вариант І:
𝑥𝑖 −1 0 1 2
𝑓(𝑥𝑖 ) −1,5 1,2 1,6 3,2
Данная задача – это задача интерполяции. Так как имеется 4 узла, то
искомый многочлен будет 𝑛 = 3 степени.
Введем понятие разделенной разности:
𝑓(𝑥𝑗 ) − 𝑓(𝑥𝑖 )
𝑓(𝑥𝑖 ; 𝑥𝑗 ) = , 𝑖, 𝑗 = 0,1, … , 𝑛, 𝑖 ≠ 𝑗
𝑥𝑗 − 𝑥𝑖
Таблица разделенных разностей для многочлена 3 степени будет иметь вид:
𝑓(𝑥0 )
𝑓(𝑥0 ; 𝑥1 )
𝑓(𝑥1 ) 𝑓(𝑥0 ; 𝑥2 )
𝑓(𝑥1 ; 𝑥2 ) 𝑓(𝑥0 ; 𝑥3 )
𝑓(𝑥2 ) 𝑓(𝑥1 ; 𝑥3 )
𝑓(𝑥2 ; 𝑥3 )
𝑓(𝑥3 )
Построим таблицу разделенных разностей по данным:
−1,5
3
1,2 −1,45
0,1 0,73
1,6 0,75
1,6
3,2
Интерполяционный многочлен Ньютона:
𝑃𝑛 (𝑥 ) =
𝑓(𝑥0 ) + (𝑥 − 𝑥0 )𝑓(𝑥0 ; 𝑥1 ) + (𝑥 − 𝑥0 )(𝑥 − 𝑥1 )𝑓(𝑥0 ; 𝑥2 )+. . . +(𝑥 − 𝑥0 )(𝑥 − 𝑥1)
+ (𝑥 − 𝑥𝑛−1)𝑓(𝑥0 ; 𝑥𝑛 ).
𝑃3 (𝑥 ) = −1,5 + 3(𝑥 + 1) − 1,45(𝑥 + 1)(𝑥 − 0) + 0,73(𝑥 + 1)(𝑥 − 0)(𝑥 − 1);
𝑃3 (𝑥 ) = 0,73𝑥 3 − 1,45𝑥 2 + 0,82𝑥 + 1,5.
Вариант II:
Построим многочлен 3 степени:
𝑃3 (𝑥 ) = 𝑎𝑥 3 + 𝑏𝑥 2 + 𝑐𝑥 + 𝑑;
Тогда найдем коэффициенты, если решим СЛАУ:
−𝑎 + 𝑏 − 𝑐 + 𝑑 = 𝑓1,
𝑑 = 𝑓2 ,
{
𝑎 + 𝑏 + 𝑐 + 𝑑 = 𝑓3 ,
8𝑎 + 4𝑏 + 2𝑐 + 𝑑 = 𝑓4.

𝑎 = 0,73;
𝑏 = −1,45;
{
𝑐 = 0,82;
𝑑 = 1,5.
Тогда искомый многочлен будет иметь вид:
𝑃3 (𝑥 ) = 0,73𝑥 3 − 1,45𝑥 2 + 0,82𝑥 + 1,5.
3. Построить интерполяционный многочлен Эрмита по следующим данным:
𝑥𝑖 −1 0 1
𝑓(𝑥𝑖 ) −1,5 1,2 1

𝑓 (𝑥𝑖 ) 0,5
′′
𝑓 (𝑥𝑖 ) 0,25
Вариант I:
Данная задача – это задача интерполяции с кратными узлами.
Кратным узлом называется узел, в котором заданы не только значения
функции, но и значения её производных до определенного порядка.
Введем понятие разделенной разности:
𝑓(𝑥𝑗 )−𝑓(𝑥𝑖 )
𝑓(𝑥𝑖 ; 𝑥𝑗 ) = , 𝑖, 𝑗 = 0,1, … , 𝑛, 𝑖 ≠ 𝑗
𝑥𝑗 −𝑥𝑖
Необходимо построить многочлен степени 𝑛, совпадающий в узлах со
значениями функции и её производных:
𝐻𝑛 (𝑖) (𝑥𝑖 ) = 𝑓 (𝑖)(𝑥𝑖 ), 𝑖 = 0, 𝑛𝑖 , 𝑗 = 0, 𝑚.
А сам многочлен называется интерполяционным многочленом Эрмита или
интерполяционным многочленом с кратными узлами:
𝐻𝑛 (𝑥 ) =
𝑓(𝑥0 ) + (𝑥 − 𝑥0 )𝑓(𝑥0 ; 𝑥0 )
+ (𝑥 − 𝑥0 )2𝑓(𝑥0 ; 𝑥0 ; 𝑥0 )+. . . +(𝑥 − 𝑥0 )𝑛0 −1𝑓(𝑥0 ; 𝑥0 ; … ; 𝑥0 )
+ 𝑓(𝑥0 ; 𝑥0 ; … ; 𝑥0 ; 𝑥1 )(𝑥 − 𝑥0 )𝑛0
+ 𝑓(𝑥0 ; 𝑥0 ; … ; 𝑥0 ; 𝑥1 ; 𝑥1 )(𝑥 − 𝑥0 )𝑛0 (𝑥 − 𝑥1 ) + ⋯
+ 𝑓(𝑥0 ; 𝑥0 ; … ; 𝑥0 ; 𝑥1 ; 𝑥1 ; … ; 𝑥𝑛 )(𝑥 − 𝑥0 )𝑛0 (𝑥 − 𝑥1 )𝑛1 … (𝑥
− 𝑥𝑚 )𝑛𝑚 −1.
Каждому узлу 𝑥𝑘 кратности 𝑛𝑘 поставим в соответствие 𝑛𝑘 простых узлов
𝑥𝑘𝑖 :
𝑥𝑘𝑖 = 𝑥𝑘 + 𝑖, 𝑖 = 0, 𝑛𝑘 − 1,
где  > 0 –некоторое малое число. Тогда стоит отметить:
lim 𝑓(𝑥𝑘𝑖 ) = 𝑥𝑘 , 𝑖 = 0, 𝑛𝑘 − 1.
𝜀→0
Считая, что в узлах 𝑥𝑘𝑖 ( 𝑖 = 0, 𝑛𝑘 − 1) известны значения функции 𝑦 =
𝑓 (𝑥 ), построим таблицу разделенных разностей для этих узлов. Учитывая
связь разделенных разностей с производной функции, имеем:
𝑓 (𝑗−𝑖) (𝑥𝑘 )
𝑓(𝑥𝑘 ; … ; 𝑥𝑘 ) = lim 𝑓(𝑥𝑘𝑖 ; 𝑥𝑘,𝑖+1 … ; 𝑥𝑘𝑗 ) = , 0 ≤ i < j ≤ 𝑛𝑘 − 1,
𝜀→0 (𝑗 − 𝑖)!
То есть имеем такое равенство:
𝑓(𝑝) 𝑥𝑘
𝑓(𝑥𝑘 ; … ; 𝑥𝑘 ) = .
𝑝!
Построим таблицу разделенных разностей по данным:
𝑥𝑘 𝑓(𝑥𝑘 )
𝑓(𝑥𝑘 ; 𝑥𝑘 )
𝑥𝑘 𝑓(𝑥𝑘 ) 𝑓(𝑥𝑘 ; 𝑥𝑘 ; 𝑥𝑘 )
𝑓(𝑥𝑘 ; 𝑥𝑘 ) 𝑓(𝑥𝑘 ; 𝑥𝑘 ; 𝑥𝑘 ; 𝑥𝑘 )
𝑥𝑘 𝑓(𝑥𝑘 ) 𝑓(𝑥𝑘 ; 𝑥𝑘 ; 𝑥𝑘 )
𝑓(𝑥𝑘 ; 𝑥𝑘 )
𝑥𝑘 𝑓(𝑥𝑘 )
𝑓(𝑥0 ) = −1,5;
𝑓(𝑥1) = 1,2;
𝑓(𝑥2 ) = 1;
𝑓(𝑥1 ) − 𝑓(𝑥0 ) 1,2 − (−1,5)
𝑓(𝑥0 ; 𝑥1 ) = = = 2,7;
𝑥1 − 𝑥0 0 − (−1)
𝑓 (𝑝)𝑥𝑘 0,5
𝑓(𝑥1 ; 𝑥1 ) = = = 0,5;
𝑝! 1!
𝑓(𝑥2 ) − 𝑓(𝑥1 ) 1 − 1,2
𝑓(𝑥2 ; 𝑥1 ) = = = −0,2;
𝑥2 − 𝑥1 1−0
𝑓(𝑥1 ) − 𝑓(𝑥0 ; 𝑥1 ) 0,5 − 2,7
𝑓(𝑥0 ; 𝑥1 ; 𝑥1 ) = = = −2,2;
𝑥1 − 𝑥0 1−0
𝑓 (𝑝) 𝑥𝑘 0,25
𝑓(𝑥1; 𝑥1 ) = = = 0,125;
𝑝! 2!
−1,5
2,7
1,2 −2,2
0,5 2,325
1,2 0,125 −1,575
0,5 −0,825
1,2 −0,7
−0,2
1
𝐻4 (𝑥 ) = −1,5 + 2,7(𝑥 + 1) − 2.2(𝑥 + 1)𝑥 + 2,325(𝑥 + 1)𝑥 2
− 1,575(𝑥 + 1)𝑥 3 = −1,575𝑥 4 + 0,75𝑥 3 + 0,125𝑥 2 + 0,5𝑥 + 1,2.

5. Путем дифференцирования интерполяционного многочлена, построить


разностную формулу для приближенного вычисления 𝑓(𝑥0 ) по трём точкам
( 𝑥0 , 𝑥1 = 𝑥0 + ℎ, 𝑥2 = 𝑥1 + ℎ). Определить погрешность разностной
формулы двумя способами.
Пусть известны значения функции в узлах 𝑥0 , 𝑥1 , … , 𝑥𝑛 и требуется
вычислить значение производной 𝑓 𝑘 (𝑥) в точке 𝑥, которая может совпадать с
узлом 𝑥𝑖 . Построим интерполяционный многочлен Лагранжа:
𝑛
∏𝑗=0,𝑗≠𝑖(𝑥 − 𝑥𝑗 )
𝐿 𝑛 (𝑥 ) = ∑ =
∏𝑗=0,𝑗≠𝑖 𝑥𝑖 − 𝑥𝑗
𝑖=0
𝑛
(𝑥 − 𝑥0 )(𝑥 − 𝑥1 ) … (𝑥 − 𝑥𝑖+1) … (𝑥 − 𝑥𝑛 )
= ∑ 𝑓(𝑥𝑖 ) .
(𝑥𝑖 − 𝑥0 )(𝑥𝑖 − 𝑥1 ) … (𝑥𝑖 − 𝑥𝑖+1) … (𝑥𝑖 − 𝑥𝑛 )
𝑖=0

Из условия интерполяционной задачи: значения функции 𝑓(𝑥𝑖 ) должны


совпадать со значениями интерполяционного полинома 𝐿𝑛 (𝑥𝑖 ) в некоторых
узлах 𝑥𝑖 :
𝑓 (𝑥𝑖 ) = 𝐿𝑛 (𝑥𝑖 ) ,
где 𝑖 = 0,1, … , 𝑛,будем полагать:
𝑓 ′ (𝑥𝑖 ) ≈ 𝐿′𝑛 (𝑥𝑖 ).
Продифференцировав интерполяционный многочлен Лагранжа 𝐿𝑛 (𝑥𝑖 ) при
𝑛 = 2, где 𝑖 = 0,1, … , 𝑛, мы найдем формулу для приближенного вычисления
𝑓 ′ (𝑥) на произвольной сетке. Имеем:
𝑓 (𝑥 ) = 𝐿2 (𝑥 ) =
(𝑥 − 𝑥1)(𝑥 − 𝑥2 ) (𝑥 − 𝑥0 )(𝑥 − 𝑥2 )
= 𝑓(𝑥0 ) + 𝑓(𝑥1 )
(𝑥0 − 𝑥1)(𝑥0 − 𝑥2 ) (𝑥1 − 𝑥0 )(𝑥1 − 𝑥2 )
(𝑥 − 𝑥0 )(𝑥 − 𝑥1 )
+ 𝑓(𝑥2 ) .
(𝑥2 − 𝑥0 )(𝑥2 − 𝑥1 )

𝑓 ′ (𝑥) ≈ 𝐿′2 (𝑥 ) =
𝑓(𝑥0 )(2𝑥 − 𝑥1 − 𝑥2 ) 𝑓(𝑥1 )(2𝑥 − 𝑥0 − 𝑥2 )
= −
(𝑥0 − 𝑥1 )(𝑥0 − 𝑥2 ) (𝑥1 − 𝑥0 )(𝑥1 − 𝑥2 )
𝑓(𝑥2 )(2𝑥 − 𝑥0 − 𝑥1)
+ .
(𝑥2 − 𝑥0 )(𝑥2 − 𝑥1 )
Тогда при 𝑥 = 𝑥0 получаем формулу для приближенного вычисления 𝑓 ′ (𝑥0 )
на произвольной сетке:

𝑓 ′ (𝑥0 ) ≈ 𝐿′2 (𝑥0 ) =


𝑓(𝑥0 )(2𝑥0 − 𝑥1 − 𝑥2 ) 𝑓(𝑥1 )(2𝑥0 − 𝑥0 − 𝑥2 )
= −
(𝑥0 − 𝑥1 )(𝑥0 − 𝑥2 ) (𝑥1 − 𝑥0 )(𝑥1 − 𝑥2 )
𝑓(𝑥2 )(2𝑥0 − 𝑥0 − 𝑥1)
+ .
(𝑥2 − 𝑥0 )(𝑥2 − 𝑥1 )

Предположим, в узлах равномерной сетки промежутка [𝑎, 𝑏]


𝑏−𝑎
𝜔ℎ = {𝑥𝑖 = 𝑎 + 𝑖ℎ, 𝑖 = ̅̅̅̅̅
0, 𝑛}, где ℎ = ,
𝑛
Известны значения некоторой функции 𝑓(𝑥𝑖 ) = 𝑓𝑖 , (𝑖 = ̅̅̅̅̅
0, 𝑛). Тогда имеем
разностную формулу для приближенного вычисления 𝑓 ′ (𝑥) на равномерной
сетке. Имеем:

𝑓 ′ (𝑥) ≈ 𝐿′2 (𝑥 ) =
𝑓(𝑥0 )(2𝑥 − 𝑥1 − 𝑥2 ) 𝑓(𝑥1 )(2𝑥 − 𝑥0 − 𝑥2 )
= +
−ℎ ∗ (−2ℎ) ℎ2
𝑓(𝑥2 )(2𝑥 − 𝑥0 − 𝑥1)
+ .
2ℎ ∗ ℎ
При 𝑥 = 𝑥0 получаем формулу для приближенного вычисления 𝑓 ′ (𝑥0 ) на
равномерной сетке:
𝑓 ′ (𝑥0 ) ≈ 𝐿′2(𝑥0 ) =
𝑓(𝑥0 )(2𝑥0 − 𝑥1 − 𝑥2 ) 𝑓 (𝑥1 )(2𝑥0 − 𝑥0 − 𝑥2 )
= −
−ℎ ∗ (−2ℎ) ℎ2
𝑓(𝑥2 )(2𝑥0 − 𝑥0 − 𝑥1 )
+ =
2ℎ ∗ ℎ
1
= 2
2ℎ
∗ [𝑓 (𝑥0 )(2𝑥0 − 𝑥1 − 𝑥2 ) − 2𝑓 (𝑥1 )(2𝑥0 − 𝑥0 − 𝑥2 )
1
+ 𝑓(𝑥2 )(2𝑥0 − 𝑥0 − 𝑥1 )] = (−3𝑓 (𝑥0 ) + 4𝑓 (𝑥1 ) − 𝑓(𝑥2 )).
2ℎ
Также можно получить данное выражение методом неопределенных
коэффициентов. Пусть в узлах равномерной сетки
𝜔ℎ = {𝑥𝑖 = 𝑎 + 𝑖𝑏, 𝑖 = ̅̅̅̅̅
0, 𝑛},
известны значения функции. Тогда формулу численного дифференцирования
будем искать в виде:
𝑛
𝑓 𝑘 (𝑥 ) ≈ ∑ 𝑐𝑖 𝑓(𝑥𝑖 ), 𝑘 ∈ 𝑁.
𝑖=0

Коэффициенты 𝑐𝑖 ищем так, чтобы формула была точна для произвольных


многочленов некоторой фиксированной степени.
Предположим, что нужно найти приближённую формулу при 𝑛 = 2, 𝑘 = 1
вида:

𝑓 ′ (𝑥 ) ≈ 𝑐0𝑓 (𝑥𝑖 ) + 𝑐1𝑓(𝑥𝑖 + ℎ) + 𝑐2𝑓 (𝑥𝑖 + 2ℎ),


Будем подставлять в неё вместо 𝑓 (𝑥 ) последовательно степенные функции 1,
𝑥, 𝑥 2 , вторые производные которых при любом 𝑥 соответственно равны
0, 1, 2𝑥. Тогда получаем систему:
𝑐0 + 𝑐1 + 𝑐2 = 0,
{ 𝑐0𝑥𝑖 + 𝑐1(𝑥𝑖 + ℎ) + 𝑐2 (𝑥𝑖 + 2ℎ) = 1,
𝑐0𝑥𝑖2 + 𝑐1(𝑥𝑖 + ℎ)2 + 𝑐2(𝑥𝑖 + 2ℎ)2 = 2𝑥𝑖 .
Предположим, что в качестве 𝑥𝑖 можем выбрать любое число, пусть 𝑥𝑖 = 0:
𝑐0 + 𝑐1 + 𝑐2 = 0,
{ 𝑐1ℎ + 𝑐22ℎ = 1,
𝑐1 ℎ2 + 𝑐24ℎ2 = 0.

𝑐0 + 𝑐1 + 𝑐2 = 0,
𝑐1 1
+ 𝑐2 = ,
2 2ℎ
𝑐1
+ 𝑐2 = 0.
{ 4
3
𝑐0 = − ,
2ℎ
2
𝑐1 = ,

1
𝑐
{ 2 = − .
2ℎ

Получаем следующее выражение:

−3𝑓 (𝑥𝑖 ) + 4𝑓 (𝑥𝑖+1) − 𝑓 (𝑥𝑖+2)


𝑓 ′ (𝑥 ) ≈ .
2ℎ
При 𝑥 = 𝑥0 , получаем формулу для приближенного вычисления 𝑓 ′ (𝑥0 ) на
равномерной сетке:
−3𝑓 (𝑥0 ) + 4𝑓 (𝑥1 ) − 𝑓 (𝑥2 )
𝑓 ′ (𝑥0 ) ≈ .
2ℎ
Подставив наши условия в формулу ( 𝑥0 , 𝑥1 = 𝑥0 + ℎ, 𝑥2 = 𝑥1 + ℎ),
получим следующее выражение:

−3𝑓 (𝑥0 ) + 4𝑓 ( 𝑥0 + ℎ) − 𝑓(𝑥1 + ℎ)


𝑓 ′ (𝑥0 ) ≈ .
2ℎ
Произведем оценку погрешности формул численного дифференцирования.
Формулу погрешности можно получить двумя способами:
дифференцированием функции и разложением функции в ряд Тейлора.
Рассмотрим первый случай. Имеем равенство:
(𝑘) (𝑘)
𝑓 (𝑘) (𝑥 ) − 𝐿𝑛 (𝑥 ) = 𝑅𝑛 (𝑥 ), где

(𝑘) 𝑓 (𝑛+1)(𝑥𝑖∗ ) ′
𝑅𝑛 (𝑥 ) = ∏ (𝑥𝑖 ) , где 𝑥𝑖∗ ∈ ( 𝑥0 , 𝑥𝑛 ),
(𝑛 + 1)! 𝑛+1
𝑛

∏ 𝑥𝑖 = ∏ (𝑥𝑖 − 𝑥𝑗 ) = (𝑥 − 𝑥0 )(𝑥 − 𝑥1) … (𝑥 − 𝑥𝑛−1)(𝑥 − 𝑥𝑛 ).


𝑛+1
𝑖=0,𝑖≠𝑗

Если же имеем равномерную сетку при 𝑘 = 1:



∏ (𝑥𝑖 ) = (−1)𝑛−𝑖 𝑖! (𝑛 − 𝑖)! ℎ𝑛 , где 𝑥𝑖 = 𝑥0 + 𝑖ℎ.
𝑛+1

Тогда получаем следующее выражение:


𝑓 (𝑛+1)(𝑥𝑖∗)
𝑅𝑛1 (𝑥 ) = (−1)𝑛−𝑖 𝑖! (𝑛 − 𝑖)! ℎ𝑛 .
(𝑛 + 1)!

Тогда запишем формулу численного дифференцирования с остаточным


членом при 𝑛 = 2, 𝑘 = 1, 𝑥 = 𝑥0 :

′(
−3𝑓 (𝑥0 ) + 4𝑓 (𝑥1 ) − 𝑓 (𝑥2 ) ℎ2 ′′′ ∗
𝑓 𝑥0 ) ≈ + 𝑓 (𝑥 ), где 𝑥 ∗ ∈ ( 𝑥0 , 𝑥𝑛 ).
2ℎ 3
Теперь оценим погрешность с помощью разложения функции 𝑓 (𝑥 ) в ряд
Тейлора в окрестности точки 𝑥𝑖 при 𝑛 = 2, 𝑘 = 1, ℎ = 𝑥 − 𝑥𝑖 . Укажем, что
𝑥1 = 𝑥0 + ℎ, 𝑥2 = 𝑥1 + ℎ = 𝑥0 + 2ℎ. Имеем:
4 ′′ 8
𝑓( 𝑥𝑖 + 2ℎ) = 𝑓( 𝑥𝑖 ) + 2𝑓 ′ ( 𝑥𝑖 )ℎ + 𝑓 ( 𝑥𝑖 )ℎ2 + 𝑓 ′′′ ( 𝑥𝑖 )ℎ3 …
2! 3!
𝑓 ( 𝑥𝑖 + 2ℎ) − 𝑓 ( 𝑥𝑖 ) 2 4
= 𝑓 ′ ( 𝑥𝑖 ) + 𝑓 ′′ ( 𝑥𝑖 )ℎ + 𝑓 ′′′ ( 𝑥𝑖 )ℎ2 …
2ℎ 2! 3!
1 ′′ 1
𝑓 ( 𝑥𝑖 + ℎ) = 𝑓( 𝑥𝑖 ) + 𝑓 ′ ( 𝑥𝑖 )ℎ + 𝑓 ( 𝑥𝑖 )ℎ2 + 𝑓 ′′′ ( 𝑥𝑖 )ℎ3 …
2! 3!
𝑓 ( 𝑥𝑖 + ℎ) − 𝑓 ( 𝑥𝑖 ) 1 1
= 𝑓 ′ ( 𝑥𝑖 ) + 𝑓 ′′ ( 𝑥𝑖 )ℎ + 𝑓 ′′′ ( 𝑥𝑖 )ℎ2 …
ℎ 2! 3!
𝑓 ( 𝑥𝑖 + ℎ) − 𝑓 ( 𝑥𝑖 ) 𝑓( 𝑥𝑖 + 2ℎ) − 𝑓 ( 𝑥𝑖 )
2 −
ℎ 2ℎ
2 6
= 𝑓 ′ ( 𝑥𝑖 ) − 𝑓 ′′′ ( 𝑥𝑖 )ℎ2 − 𝑓 ′′′′ ( 𝑥𝑖 )ℎ3 −. ..
3! 4!
−3𝑓 ( 𝑥𝑖 ) + 4𝑓 ( 𝑥𝑖 + ℎ) − 𝑓 ( 𝑥𝑖 + 2ℎ)
=
2ℎ
1 1
= 𝑓 ′ ( 𝑥𝑖 ) − 𝑓 ′′′ ( 𝑥𝑖 )ℎ2 − 𝑓 ′′′′ ( 𝑥𝑖 )ℎ3−. . . = 𝑓 ′ ( 𝑥𝑖 ) + 𝑂 (ℎ2 ).
3 4
6. Вычислить глобальный интерполяционный кубический сплайн для
функции, заданной на равномерной сетке из 3 узлов.

Сплайн – кусочно-полиномиальная функция, определенная на отрезке [𝑎, 𝑏]


и имеющая на этом отрезке несколько её непрерывных производных.

Определим сплайн с помощью многочлена третьей степени (кубический


сплайн). Пусть на отрезке [𝑎, 𝑏] задана непрерывная функция 𝑓 (𝑥 ). Введем
сетку
𝑏−𝑎
𝜔ℎ = {𝑥𝑖 = 𝑎 + 𝑖ℎ, 𝑖 = ̅̅̅̅̅
0, 𝑛}, .где ℎ =
𝑛
Сплайном, соответствующим, данной функции 𝑓(𝑥) и данным узлам
называется функция 𝑠(𝑥 ), удовлетворяющая следующим условиям:

1. на каждом сегменте [ 𝑥𝑖−1, 𝑥𝑖 ], 𝑖 = ̅̅̅̅̅


0, 𝑛, функция 𝑠(𝑥 ), является
многочленом третьей степени;
2. функция 𝑠 (𝑥 ), а также ее первая и вторая производные непрерывны на
[𝑎, 𝑏], то есть непрерывны по внутренним узлам сетки;
3. 𝑠(𝑥𝑖 ) = 𝑓(𝑥𝑖 ), = ̅̅̅̅̅0, 𝑛.
На каждом из отрезков [ 𝑥𝑖−1, 𝑥𝑖 ], 𝑖 = ̅̅̅̅̅0, 𝑛, будем искать функцию
𝑠(𝑥 ) = 𝑠(𝑥𝑖 ) в виде многочлена третьей степени.
𝑐𝑖 𝑑𝑖
𝑠𝑖 (𝑥 ) = 𝑎𝑖 + 𝑏𝑖 (𝑥 − 𝑥𝑖 ) + (𝑥 − 𝑥𝑖 )2 + (𝑥 − 𝑥𝑖 )3,
2 6
̅̅̅̅̅
𝑥𝑖−1 ≤ 𝑥 ≤ 𝑥𝑖 , 𝑖 = 0, 𝑛,
где 𝑎𝑖 , 𝑏𝑖 , 𝑐𝑖 , 𝑑𝑖 − коэффициенты подлежащие опредлению.

Тогда продифференцируем 𝑠𝑖 (𝑥 ). Имеем:


𝑑𝑖
𝑠𝑖 ′ (𝑥 ) = 𝑏𝑖 + 𝑐𝑖 (𝑥 − 𝑥𝑖 ) + (𝑥 − 𝑥𝑖 )2 ,
2
𝑠𝑖 ′′ (𝑥 ) = 𝑐𝑖 + 𝑑𝑖 (𝑥 − 𝑥𝑖 ),

𝑠𝑖 ′′′ (𝑥 ) = 𝑑𝑖 ,

Тогда, соответственно:

𝑠𝑖 (𝑥𝑖 ) = 𝑎𝑖 , 𝑖 = ̅̅̅̅̅
0, 𝑛.

Учитывая тот факт, что значение функции 𝑓(𝑥𝑖 ) должны быть равны
значению сплайна 𝑠(𝑥𝑖 ), то имеем:

𝑠𝑖 (𝑥𝑖 ) = 𝑓(𝑥𝑖 ) = 𝑎𝑖 .

Примем во внимание условие непрерывности сплайна по внутренним узлам:

𝑠𝑖 (𝑥𝑖 ) = 𝑠𝑖+1(𝑥𝑖 ), 𝑖 = ̅̅̅̅̅


0, 𝑛.
𝑐𝑖+1 2 𝑑𝑖+1
−ℎ𝑏𝑖+1 + ℎ + ℎ = 𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖+1), 𝑖 = ̅̅̅̅̅̅̅̅̅̅
1, 𝑛 − 1.
2 6
Тогда условие

𝑠1(𝑥0) = 𝑓(𝑥0 ) = 𝑎1
порождает уравнение:
𝑐1 2 𝑑1
−ℎ𝑏1 + ℎ + ℎ = 𝑓(𝑥0 ) + 𝑓(𝑥1 ).
2 6
Условия непрерывности первой производной сплайна во внутренних узлах
сетки,

𝑠𝑖 ′ (𝑥𝑖 ) = 𝑠𝑖+1′ (𝑥𝑖 ), 𝑖 = ̅̅̅̅̅̅̅̅̅̅


1, 𝑛 − 1,

сводятся к уравнениям:
𝑑𝑖+1 2
−ℎ𝑐𝑖+1 + ℎ = 𝑏𝑖 + 𝑏𝑖+1, 𝑖 = ̅̅̅̅̅̅̅̅̅̅
1, 𝑛 − 1.
2
Из условий непрерывности второй производной сплайна во внутренних узлах
сетки,

𝑠𝑖 ′′ (𝑥𝑖 ) = 𝑠𝑖+1′′ (𝑥𝑖 ), 𝑖 = ̅̅̅̅̅̅̅̅̅̅


1, 𝑛 − 1,

имеем следующее:

−ℎ𝑑𝑖+1 = 𝑐𝑖 −𝑐𝑖+1 𝑖 = ̅̅̅̅̅̅̅̅̅̅


1, 𝑛 − 1.
При условии,

𝑠 ′′ (𝑥0 ) = 𝑠 ′′ (𝑥𝑛 ) = 0, 𝑖 = ̅̅̅̅̅̅̅̅̅̅


1, 𝑛 − 1,

получаем:

𝑐1 − ℎ𝑑1 = 0,
𝑐𝑛 = 0.

Тогда сможем найти

1 ℎ2
𝑏𝑖 + 𝑏𝑖+1 = [2𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖−1) − 𝑓(𝑥𝑖+1) + ((𝑐𝑖 − 𝑐𝑖+1)
ℎ 2
ℎ3
− (𝑑𝑖 − 𝑑𝑖+1)) , 𝑖 = ̅̅̅̅̅̅̅̅̅̅
1, 𝑛 − 1.
6
Получаем систему уравнений:

Имеем систему уравнений:


𝑐𝑖−1 + 4𝑐𝑖 + 𝑐𝑖+1 = (6𝑓(𝑥𝑖−1) − 2𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖+1))/ℎ2 , 𝑖 = ̅̅̅̅̅̅̅̅̅̅̅
0, 𝑛 − 1,
{
𝑐0 = 𝑐𝑛 = 0.
Имеем для нашей задачи следующее. Пусть на отрезке [𝑎, 𝑏] задана
непрерывная функция 𝑓 (𝑥 ) = 𝑥 3 , 𝑥 ∈ [1,3]. Построим таблицу соответсвий:

𝑥𝑖 1 2 3
𝑓(𝑥𝑖 ) 1 8 27
Введем сетку
3−1
𝜔ℎ = {𝑥𝑖 = 𝑎 + 𝑖ℎ, 𝑖 = ̅̅̅̅̅
0, 𝑛}, где ℎ = = 1.
2
𝑠 (𝑥 ), 𝑥 ∈ [1,2],
𝑠(𝑥 ) = { 1
𝑠2(𝑥 ), 𝑥 ∈ [2,3].
Имеем систему уравнений:
𝑐 + 4𝑐𝑖 + 𝑐𝑖+1 = (6𝑓(𝑥𝑖−1) − 2𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖+1))/ℎ2 , 𝑖 = ̅̅̅̅̅̅̅̅̅̅̅
0, 𝑛 − 1,
{ 𝑖−1
𝑐0 = 𝑐𝑛 = 0.
Матрица этой системы симметрична, трёхдиагональная и
положительно определена. Значит система однозначно разрешима.
Так как
𝑐0 = 𝑐𝑛 = 0;
𝑐0 + 4𝑐1 + 𝑐2 = 6(1 − 2 ∗ 23 + 33 ) = 72;
4𝑐1 = 72;
𝑐1 = 𝑑1 = 18;
𝑑𝑖+1 = (𝑐𝑖+1 − 𝑐𝑖 )/ℎ, 𝑖 = ̅̅̅̅̅̅̅̅̅̅̅
0, 𝑛 − 1.
0 − 18
𝑑2 = = −18;
1
ℎ2 ℎ3
ℎ𝑏𝑖+1 = 𝑐𝑖+1 − 𝑑𝑖+1 + 𝑓(𝑥𝑖+1) − 𝑓(𝑥𝑖 ), 𝑖 = ̅̅̅̅̅̅̅̅̅̅̅ 0, 𝑛 − 1.
2 6
1 1
𝑏1 = ∗ 18 − ∗ 18 + (8 − 1) = 9 − 3 + 7 = 13;
2 6
ℎ2
−𝑏2 = −𝑏1 − 𝑐2+ 𝑑2;
2
1
−𝑏2 = −13 − 0 + (−18) = −22;
2
𝑏2 = 22.
Теперь можем определить интерполяционный кубический сплайн:
𝑐𝑖 𝑑𝑖
𝑠𝑖 (𝑥 ) = 𝑎𝑖 + 𝑏𝑖 (𝑥 − 𝑥𝑖 ) + (𝑥 − 𝑥𝑖 )2 + (𝑥 − 𝑥𝑖 )3 .
2 6
18 18
𝑠1(𝑥 ) = 23 + 13(𝑥 − 2) + (𝑥 − 2)2 + (𝑥 − 2)3 =
2 6
3 2
= 3𝑥 − 9𝑥 + 13𝑥 + 42.
𝑠2(𝑥 ) = 27𝑥 3 − 59𝑥 + 42 .
Тогда имеем:
3𝑥 3 − 9𝑥 2 + 13𝑥 + 42, 𝑥 ∈ [1,2],
𝑠 (𝑥 ) = {
27𝑥 3 − 59𝑥 + 42 , 𝑥 ∈ [2,3].

Вам также может понравиться