- •Розділ 5 Апроксимація функцій
- •5.1 Поняття про наближення функцій
- •5.2 Iнтерполювання функції
- •5.2.1 Інтерполювання за Лагранжем
- •1 Лінійна інтерполяція
- •2 Квадратична інтерполяція
- •5.2.2. Інтерполювання за Ньютоном
- •5.2.3 Інтерполювання за Ермітом
- •5.2.4 Похибка інтерполяції та способи її зменшення
- •5.2.5 Збіжність процесу інтерполяції
- •5.2.6 Інтерполяція за допомогою сплайнів
- •Лінійний інтерполяційний сплайн
- •Кубічний інтерполяційний сплайн
- •Випадки використання кубічного сплайна
- •Приклад реалізації алгоритмів інтерполяції функцій на псевдокоді
- •Апроксимаційні властивості кубічного сплайна
- •5.2.7 Застосування інтерполяції для складання таблиць
- •5.3 Метод найменших квадратів
- •Приклад реалізації методу найменших квадратів на псевдокоді.
- •Питання і завдання до розділу 5
Випадки використання кубічного сплайна
При побудові інтерполяційного
кубічного сплайна найчастіше
використовуються граничні (крайові)
умови трьох типів. Вибір граничних
(крайових) умов є однією з центральних
проблем при інтерполяції функцій. Він
особливо важливий за необхідності
забезпечити високу точність апроксимації
функції
сплайном
поблизу кінців відрізка
.
Граничні значення суттєво впливають
на поведінку сплайна
поблизу точок а та
b. Цей
вплив швидко слабшає при відході від
них.
Отже, якщо
(
),
,
то кубічний сплайн на цьому відрізку
можна представити формулою
Тут
.
Для їх визначення накладають умови
неперервності другої похідної в точках
та обмеження на значення сплайна і його
похідних на кінцях проміжку
- крайові умови. Тобто потрібна додаткова
інформація про функцію, для якої є
потреба в інтерполюванні.
Якщо на кінцях відрізка
відомі значення 1-ї похідної
,
то природно скористатися граничними
(крайовими) умовами 1-го типу.
Граничні (крайові) умови 1-го типу. Якщо відомо, що
,
то для визначення
маємо систему рівнянь
(5.36)
Якщо на кінцях відрізка
відомі значення 2-ї похідної
,
то природно скористатися граничними
(крайовими) умовами 2-го типу.
Граничні (крайові) умови 2-го типу. Якщо відомо
,
то є система рівнянь
.
(5.37)
Якщо є можливість вибору між граничними (крайовими) умовами 1-го та 2-го типів, то перевагу потрібно надати умовам 1-го типу.
У випадку, коли ніякої
додаткової інформації про поведінку
апроксимованої функції немає, часто
використовують так звані природні
граничні (крайові) умови
.
Однак варто мати на увазі, що при такому виборі граничних (крайових) умов точність апроксимації функції сплайном поблизу кінців відрізка різко знижується. Іноді користуються граничними (крайовими) умовами 1-го або 2-го типу, але не з точними значеннями відповідних похідних, а з їх різницевими апроксимаціями. Точність такого підходу невисока.
Практичний досвід розрахунків показує, що в такій ситуації найбільш доцільним є вибір природних граничних ( крайових) умов. Якщо - періодична функція, то потрібно зупинитися на граничних (крайових) умовах 3-го типу.
Граничні (крайові) умови 3-го типу. Якщо - періодична функція
,
то
і система рівнянь має вигляд
. (5.38)
Приклад реалізації алгоритмів інтерполяції функцій на псевдокоді
//розв’язує СЛАР методом Гауса
//M – матриця системи і вільні члени
//X – вектор відповідей
//n – кількість невідомих
linequ(M,n,e,X):
//доступна в модулі naz.pas
end
//X – значення аргумента
//Y – значення функції
//xi – значення аргумента, для якого потрібно знайти значення
// функції
//h – крок
//змінні DY, D2Y і т.д. – скінченні різниці
//змінні SDY, SD2Y і т.д. – розділені різниці
//відшукуємо значення інтерполюючого многочлена при x=xi
Find_PX(X,Y,n,h):
n:=X.length;
for i:=1 to n do
DY[i]:=Y[i+1]-Y[i]
done
for i:=1 to (n-1) do
D2Y[i]:=DY[i+1]-DY[i]
done
for i:=1 to (n-2) do
D3Y[i]:=D2Y[i+1]-D2Y[i]
done
for i:=1 to (n-3) do
D4Y[i]:=D3Y[i+1]-D3Y[i]
done
for i:=1 to n do
SDY[i]:=Y[i+1]-Y[i]/(X[i+1]-X[i])
done
for i:=1 to (n-1) do
D2Y[i]:=SDY[i+1]-SDY[i]/(X[i+2]-X[i])
done
for i:=1 to (n-2) do
D3Y[i]:=SD2Y[i+1]-SD2Y[i]/(X[i+3]-X[i])
done
for i:=1 to (n-3) do
D4Y[i]:=SD3Y[i+1]-SD3Y[i]/(X[i+4]-X[i])
done
t:=(xi-X[1])/h
return X[1]+(t/factorial(1))*DY[1]+((t*(t-1))/factorial(2))*D2Y[1]+((t*(t-1)*(t-2))/factotrial(3))*D3Y[1]+((t*(t-1)*(t-2)*(t-3))/factorial(4))*D4Y[1];
end
//R – дані сплайна
//eps – точність обчислень
//xi – значення аргумента, при якому потрібно знайти значення функції //
//відшукуємо значення кубічного сплайна в точці xi
Find_Spline(R,eps,xi)
linequ(R,R.length,1E-6,М)
k:=2
s31:=(X[k+1]-xi)*(X[k+1]-xi)*(2*(xi-X[k])+1)*Y[k]+(xi-X[k])*(xi-X[k])*(2*(X[k+1]-xi)+1)*Y[k+1]
s32:=(X[k+1]-xi)*(X[k+1]-xi)*(xi-X[k])*M[k]+(xi-X[k])*(xi-X[k])*(xi-X[k+1])*М[k+1]
return s31+s32
end
Оцінка похибки та збіжності при інтерполяції кубічними сплайнами
Якщо , то похибка інтерполяції кубічним сплайном
,
де
,
.
Якщо
,
r=1,2,3,4,
то оцінка має вигляд для
.
Із цих оцінок треба встановити збіжність інтерполяційного процесу на послідовності сіток .
Для простоти обчислень або при труднощах у пошуку першої та другої похідних заданої функції можна застосувати таку оцінку похибок:
.
Приклад.
Апроксимувати функції
на відрізку [-2;2] , використовуючи лінійний
сплайн і природний кубічний сплайн.
Дослідження проведемо на рівномірних сітках з кількістю вузлів інтерполяції : 5, 7, 9, 15 , 51 , 101 відповідно. Визначимо відносну похибку інтерполяції сплайнами на різних сітках. Результати занесемо до таблиці.
Аналіз результатів показує, що точність апроксимації істотно залежить від кількості вузлових точок.
Число вузлів |
Лінійний сплайн |
Кубічний сплайн |
Куб. сплайн по другій похідній |
5 |
0,0625 |
0,024 |
0,0092 |
7 |
0,0278 |
0,011 |
0,0038 |
9 |
0,0156 |
0,0061 |
0,002 |
15 |
0,0051 |
0,002 |
0,0007 |
51 |
0,0004 |
0,00016 |
0,000055 |
101 |
0,0001 |
0,000036 |
0,000014 |
