Використання однієї інтерполяційної формули для великого числа вузлів, як у випадку інтерполяційних формул Ньютона чи Лагранжа являється недоцільним. Такий інтерполяційний многочлен сильно проявляє свої коливальні властивості, і його значення між вузлами можуть сильно відрізнятися від значень інтерпольованої функції. Однією з можливостей обійти такий недолік є застосування сплайн-інтерполяції. Ідея сплайн-інтерполяції полягає в побудові поліномів між парами сусідніх вузлів інтерполяції, причому для кожної пари вузлів будується свій поліном. Найпоширеніший у практиці є кубічний сплайн, для побудови якого необхідно побудувати n многочленів третьої степені:
Для визначення невідомих многочлена (1) необхідно 4n рівняннь. Частина з них, а саме 2n, може бути отримана з умови проходження сплайна через вузли інтерполяції :
де . Науступні (2n-2) рівняння знайдемо з умови неперервності перших і других похідних у вузлах інтерполяції, тобто з умови гладкості кривої в усіх точках. Для цього знайдемо першу і другу похідну тричлена (1):
після чого прирівняємо отримані похідні в точці , обчисленні через лівий і правий інтервал від ():
Замінивши у формулах (4), (5) з урахуванням , отримаємо:
На даному етапі ми маємо 4n невідомих і (4n-2) рівняння. Тобто, необхідно знайти ще два рівняння. Їх отримаємо прирівнявши до нуля другі похідні в першому і останньому вузлах інтерполяції: . В результаті будемо мати:
Таким чином ми отримали систему лінійних алгебраїчних рівнянь, яка складається з рівнянь (2), (3), (6)-(9) і з допомогою якої легко можна знайти невідомі коефіцієнти . Для цього приведемо її до більш зручного вигляду. З умови (2) знаходимо всі коефіцієнти . Далі, з (7)- (9) отримуємо:
Підставляючи (2), (8) і (9) у формулу (3), отримаємо розрахункові формули для обчислення коефіцієнтів :
Підставимо тепер формули (10), (11) у формулу (7), і таким чином виключимо з неї невідомі та . В рузультаті отримуємо систему рівнянь з трьохдіагональною матрицею у якій невідомими являються тільки коефіцієнти :
Розв’язавши її методом прогонки, за знайденими коефіцієнтами знаходимо і . Тобто, для того, щоб знайти наближене значення таблично заданої функції у вузлах відмінних від заданих, використовуючи для цього кубічну сплайн-інтерполяцію, необхідно в першу чергу знайти коефіцієнти , в наступній послідовності: спочатку з формули (2) знаходимо коефіцієнти ; далі, розв’язавши систему (12) знаходимо ; та знаходимо з допомогою формул (10) та (11) відповідно. Наступним кроком є визначення інтервалу в який потрапляє аргумент після чого, в якості наближеного значення в цій точці береться значення: .
Кубічна сплайн-інтерполяція – приклад:
Знайти наближене значення функції в точці , якщо відома наступна таблиця її значень:
Розв’язок даної задачі будемо здійснювати використовуючи формулу кубічної сплайн-інтерполяції (1). Для цього, в першу чергу, необхідно відшукати значення її коефіцієнтів при невідомих.
Отже, як уже зазначалось вище, на першому кроці, скориставшись формулою (2) знаходимо коефіцієнти :
Далі, використовуючи формулу (12), запишемо рівняння системи з трьохдіагональною матрицею. Розв’язавши дану систему, отримаємо значення коефіцієнтів :
На останньому кроці, скориставшись формулами (10) та (11) знаходимо коефіцієнти та:
Після того, як значення всіх коефіцієнтів відомі, переходимо до відшукання наближеного значення функції у заданій точці. Для цього, визначемо між якими вузлами фіксованих значень міститься точка . В нашому випадку вона міститься між вузлами та . Далі, для даної пари сусідніх вузлів, побудуємо інтерполяційний поліном. В результаті отримаємо:
Підставляючи в дану формулу , отримуємо наближене значення функції у заданій точці:
Було би добре, якщо можна було побачити, якою вийшла тридіагональна матриця для тестових даних, що тут є. Це зекономить величезну кількість часу на розуміння алгоритму.
Доброго дня paul. Не зовсім зрозумілою являється Ваша репліка “Було би добре, якщо можна було побачити, якою вийшла тридіагональна матриця для тестових даних, що тут є”. Якщо мова йде про приклад, що розглядається в параграфі, а якщо бути більш точним, то про процес знаходження коефіцієнтів ci, то у розміщеному вище рішенні, все це міститься.
У формулі (12) помилка. Якщо комірки нумеруються від 1 до n,то вираз y_{i-1}-y_{i-2},де y_{0} це неіснуючий елемент для i=2, хоча індексація починається з 1.Мабудь там повинно бути 3*((y_{i+1}-y_{i})/h_{i}-(y_{i}-y_{i-1})/h_{i-1})
Шановний noadmin, формула (12) є безпомилковою (індексація елементів таблично заданої функції починається з нуля).
Так, як і всіх решту масивів з блок схеми?
Ні Богдан. Індексація решти масивів з блок-схеми починається з одиниці.