8: Інтерполяція
Розглянемо наступну задачу: За даними значень відомої функціїy=f(x) в послідовності впорядкованих точокx0,x1,…,xn знайдітьf(x) для довільногоx. Колиx0≤x≤xn, задача називається інтерполяцією. Колиx<x0 абоx>xn, проблема називається екстраполяцією.
Зyi=f(xi), проблема інтерполяції в основному полягає в тому, щоб промальовувати плавну криву через відомі точки(x0,y0),(x1,y1),…,(xn,yn). Це не та сама проблема, що малювання гладкої кривої, яка наближає набір точок даних, які мають експериментальну помилку. Ця остання задача називається наближенням найменших квадратів, яка розглядається в наступному розділі.
Можна інтерполюватиn+1 відомі точки унікальним поліномом ступеняn. Колиn=1, многочлен є лінійною функцією; колиn=2, многочлен є квадратичною функцією. Хоча поліноми низького порядку іноді використовуються, коли кількість точок мало, інтерполяції поліномів вищого порядку, як правило, нестабільні і не мають особливого практичного використання.
Тут ми розглянемо більш корисну кусково-поліноміальну інтерполяцію. Двома найбільш використовуваними є кусково-лінійна інтерполяція та кубічна інтерполяція сплайнів. Перший використовує лінійні многочлени, а другий кубічні поліноми.
Кусково-лінійна інтерполяція
Тут ми використовуємо лінійні многочлени. Це типова інтерполяція, яка зазвичай використовується при побудові даних.
Припустимоy=g(x), що функція інтерполяції є, і, як і раніше, єn+1 точки для інтерполяції. Побудовано функціюg(x) зn локальних лінійних многочленів. пишемо
g(x)=gi(x), for xi≤x≤xi+1,
де
gi(x)=ai(x−xi)+bi
іi=0,1,…,n−1
Тепер миy=gi(x) вимагаємо пройти через кінцеві точки(xi,yi) і(xi+1,yi+1). Ми маємо
yi=biyi+1=ai(xi+1−xi)+bi
Тому коефіцієнтиgi(x) визначаються як
ai=yi+1−yixi+1−xi,bi=yi
Хоча кусково-лінійна інтерполяція широко використовується, особливо в побудові процедур, вона страждає від розриву похідної в кожній точці. Це призводить до функції, яка може виглядати не гладкою, якщо точки занадто широко розташовані. Далі ми розглянемо більш складний алгоритм, який використовує кубічні многочлени.
Кубічна інтерполяція сплайнів
n+1Точки, які потрібно інтерполювати, знову
(x0,y0),(x1,y1),…(xn,yn).
Тут ми використовуємоn кусково-кубічні многочлени для інтерполяції,
gi(x)=ai(x−xi)3+bi(x−xi)2+ci(x−xi)+di,i=0,1,…,n−1,
з функцією глобальної інтерполяції, записаною як
g(x)=gi(x), for xi≤x≤xi+1.
Для досягнення плавної інтерполяції ми накладаємо, щоg(x) і його перша та друга похідні є безперервними. Вимога, якаg(x) є безперервною (і проходить через всіn+1 пункти) призводить до двох обмежень
gi(xi)=yi,i=0 to n−1gi(xi+1)=yi+1,i=0 to n−1
Вимога, якаg′(x) є безперервним, призводить до
g′i(xi+1)=g′i+1(xi+1),i=0 to n−2
І вимога, якаg′′(x) є постійною, призводить до
g′′i(xi+1)=g′′i+1(xi+1),i=0 to n−2.
Існуютьn кубічні многочлени,gi(x) і кожен кубічний многочлен має чотири вільних коефіцієнта; тому існує загальна кількість4n невідомих коефіцієнтів. Число стримуючих рівнянь з (8.7) - (8.10) дорівнює2n+2(n−1)=4n−2. При4n−24n обмеженнях і невідомих для унікального рішення потрібні ще дві умови. Зазвичай вони вибираються як додаткові умови на першомуg0(x) та останньомуgn−1(x) многочленах. Ці додаткові умови ми обговоримо пізніше.
Тепер перейдемо до визначення рівнянь для невідомих коефіцієнтів кубічних многочленів. Поліноми та їх перші дві похідні задаються
gi(x)=ai(x−xi)3+bi(x−xi)2+ci(x−xi)+dig′i(x)=3ai(x−xi)2+2bi(x−xi)+cig′′i(x)=6ai(x−xi)+2bi
Ми розглянемо чотири умови (8.7) - (8.10) по черзі. З (8.7) і (8.11) ми маємо
di=yi,i=0 to n−1,
який безпосередньо вирішує для всіхd -коефіцієнтів.
Щоб задовольнити (8.8), ми спочатку визначаємо
hi=xi+1−xi,
і
fi=yi+1−yi.
Тепер з (8.8) і (8.11), використовуючи (8.14), отримаємоn рівняння
aih3i+bih2i+cihi=fi,i=0 to n−1.
З (8.9) і (8.12) отримуємоn−1 рівняння
3aih2i+2bihi+ci=ci+1,i=0 to n−2
З (8.10) і (8.13) отримуємоn−1 рівняння
3aihi+bi=bi+1i=0 to n−2.
Корисно буде включити визначення коефіцієнтаbn, якого зараз немає. (Індекс коефіцієнтів кубічних поліномів тільки піднімається доn−1.) Ми просто розширюємо (8.19) доi=n−1 і так пишемо
3an−1hn−1+bn−1=bn,
які можна розглядати як визначенняbn.
Тепер ми приступимо до усунення множинa - і c-коефіцієнтів (зd -коефіцієнтами, які вже усунені в (8.14)), щоб знайти систему лінійних рівнянь дляb -коефіцієнтів. З (8.19) і(8.20), ми можемо вирішити дляna -коефіцієнтів, щоб знайти
ai=13hi(bi+1−bi),i=0 to n−1.
З (8.17) ми можемо вирішити дляn c-коефіцієнтів наступним чином:
ci=1hi(fi−aih3i−bih2i)=1hi(fi−13hi(bi+1−bi)h3i−bih2i)=fihi−13hi(bi+1+2bi),i=0 to n−1
Тепер ми можемо знайти рівняння дляb -коефіцієнтів шляхом підстановки(8.21) і(8.22) в(8.18):
3(13hi(bi+1−bi))h2i+2bihi+(fihi−13hi(bi+1+2bi))=(fi+1hi+1−13hi+1(bi+2+2bi+1)),
що спрощує
13hibi+23(hi+hi+1)bi+1+13hi+1bi+2=fi+1hi+1−fihi
рівняння, яке є дійснимi=0 дляn−2. Тому (8.23) представляютьn−1 рівняння дляn+1 невідомихb -коефіцієнтів. Відповідно, запишемо матричне рівняння дляb -коефіцієнтів, залишивши перший і останній рядок відсутніми, як
(………… missing ……13h023(h0+h1)13h1…000⋮⋮⋮⋱⋮⋮⋮000…13hn−223(hn−2+hn−1)13hn−1………… missing ……)(b0b1⋮bn−1bn)( missing f1h1−f0h0⋮fn−1hn−1−fn−2hn−2 missing ).
Після того, як задані відсутні перше та останнє рівняння, матричне рівняння дляb -коефіцієнтів може бути вирішено шляхом гаусової елімінації. І як тількиb -коефіцієнти визначені,a - іc -коефіцієнти також можуть бути визначені з (8.21) і (8.22), зd -коефіцієнтами, вже відомими з (8.14). Кусково-кубічні многочлени, отже, відомі іg(x) можуть бути використані для інтерполяції до будь-якогоx задовольняє значенняx0≤x≤xn.
Відсутні перше і останнє рівняння можуть бути вказані декількома способами, і тут ми покажемо два способи, які дозволені функцією MATLAB spline.m. Перший спосіб слід використовувати, коли похіднаg′(x) відома в кінцевих точках,x0 іxn; тобто припустимо, ми знаємо значенняα іβ такі, що
g′0(x0)=α,g′n−1(xn)=β.
З відомого значенняα і використання (8.12) і (8.22), ми маємо
α=c0=f0h0−13h0(b1+2b0)
Тому відсутнє перше рівняння визначається як
23h0b0+13h0b1=f0h0−α
Від відомого значенняβ, і використання(8.12),(8.21), і(8.22), ми маємо
β=3an−1h2n−1+2bn−1hn−1+cn−1=3(13hn−1(bn−bn−1))h2n−1+2bn−1hn−1+(fn−1hn−1−13hn−1(bn+2bn−1)),
що спрощує
13hn−1bn−1+23hn−1bn=β−fn−1hn−1
буде використано як відсутнє останнє рівняння.
Другий спосіб вказівки відсутніх першого і останнього рівнянь називається умовою not-a-knot, яке передбачає, що
g0(x)=g1(x),gn−2(x)=gn−1(x)
Розглядаючи перше з цих рівнянь, з (8.11) ми маємо
a0(x−x0)3+b0(x−x0)2+c0(x−x0)+d0
=a1(x−x1)3+b1(x−x1)2+c1(x−x1)+d1.
Тепер два кубічні многочлени можуть бути ідентичніx, якщо при певному значенні поліноми та три їх перші похідні ідентичні. Наші умови безперервностіx=x1 вже вимагають, щоб при цьому значенніx цих двох поліномів і їх перших двох похідних були однаковими. Самі многочлени будуть ідентичними, то, якщо їх треті похідні теж ідентичні приx=x1, або якщо
a0=a1.
З (8.21) ми маємо
13h0(b1−b0)=13h1(b2−b1),
або після спрощення
h1b0−(h0+h1)b1+h0b2=0,
який надає нам наше відсутнє перше рівняння. Подібний аргументx=xn−1 також надає нам наше останнє рівняння,
hn−1bn−2−(hn−2+hn−1)bn−1+hn−2bn=0.
Підпрограми MATLAB spline.m і ppval.m можуть бути використані для кубічної інтерполяції сплайнів (див. також interp1.m). Я проілюструю ці процедури в класі і розмістити зразок коду на веб-сайті курсу.
Багатовимірна інтерполяція
Припустимо, ми інтерполяція значення функції двох змінних,
z=f(x,y).
Відомі значення задаються
zij=f(xi,yj),
зi=0,1,…,n іj=0,1,…,n. Зверніть увагу, що(x,y) точки, в якихf(x,y) відомі, лежать на сітці вx−y площині.
z=g(x,y)Дозволяти інтерполяція функція,zij=g(xi,yj). задовольняє двовимірну інтерполяцію, щоб знайти значенняg в точці(x,y) може бути зроблено шляхом першого виконанняn+1 одновимірних інтерполяцій в yзнайти значенняg вn+1 точках(x0,y),(x1,y),…(xn,y), з подальшою одновимірною інтерполяцієюx в знайти значенняg at(x,y).
Іншими словами, двовимірна інтерполяція на розмірній сітці(n+1)×(n+1) виконується спочаткуn+1 одновимірними інтерполяціями до значення зy подальшою одновимірною інтерполяцією до значенняx. Двовимірна інтерполяція може бути узагальнена до більш високих вимірів. Функціями MATLAB для виконання дво- і тривимірної інтерполяції є interp2.m і interp3.m.