7
Interpolacija i ekstrapolacija Pošto Matlab predstavlja funkcije samo kao nizove vrijednosti, problem koji se javlja je kako pronaći vrijednosti funkcija u tačkama koje nisu u nizovima. Pronalaženje vrijednosti funkcija između datih tačaka u nizu se naziva interpolacija; pronalaženje vrijednosti funkcije izvan krajnjih tačaka niza se naziva ekstrapolacija. Uobičajeni način da se urade obe ove stvari je da se koriste okolne vrijednosti funkcije da definišu polinomsku aproksimaciju funkcije koja je dovoljno dobra na malom regionu. Ovdje će biti razmotrene aproksimacije pomoću linearne i kvadratne funkcije. 1. Linearna interpolacija i ekstrapolacija Linearna aproksimacija se može dobiti sa samo dve tačke, napr. (x 1 ,y 1 ) i (x 2 ,y 2 ). Kao što je poznato dve tačke definišu pravu i formula za pravu kroz dve tačke je y=y 1 + ( y 2 y 1 ) ( x 2 x 1 ) ( xx 1 ) (1) Ova formula se može upotrijebiti između bilo koje dve tačke za linearnu interpolaciju. Napr. ako je x u ovoj formuli na sredini između x 1 i x 2 tj. x= (x 1 +x 2 )/2 tada je lako pokazati da linearna interpolacija daje očigledan rezultat y= (y 1 +y 2 )/2. Prilikom korišćenja ovog metoda treba biti oprezan jer tačke moraju biti dovoljno blizu jedna drugoj da bi se dobile dobre vrijednosti.

Interpolacija i Ekstrapolacija

Embed Size (px)

DESCRIPTION

Interpolacija i ekstrapolacija

Citation preview

Page 1: Interpolacija i Ekstrapolacija

Interpolacija i ekstrapolacijaPošto Matlab predstavlja funkcije samo kao nizove vrijednosti, problem koji se javlja je kako pronaći vrijednosti funkcija u tačkama koje nisu u nizovima. Pronalaženje vrijednosti funkcija između datih tačaka u nizu se naziva interpolacija; pronalaženje vrijednosti funkcije izvan krajnjih tačaka niza se naziva ekstrapolacija. Uobičajeni način da se urade obe ove stvari je da se koriste okolne vrijednosti funkcije da definišu polinomsku aproksimaciju funkcije koja je dovoljno dobra na malom regionu. Ovdje će biti razmotrene aproksimacije pomoću linearne i kvadratne funkcije.

1. Linearna interpolacija i ekstrapolacija

Linearna aproksimacija se može dobiti sa samo dve tačke, napr. (x1,y1) i (x2,y2). Kao što je poznato dve tačke definišu pravu i formula za pravu kroz dve tačke je

y= y1+( y2− y1 )(x2−x1 )

(x−x1) (1)

Ova formula se može upotrijebiti između bilo koje dve tačke za linearnu interpolaciju. Napr. ako je x u ovoj formuli na sredini između x1 i x2 tj. x= (x1+x2)/2 tada je lako pokazati da linearna interpolacija

daje očigledan rezultat y= (y1+y2)/2.

Prilikom korišćenja ovog metoda treba biti oprezan jer tačke moraju biti dovoljno blizu jedna drugoj da bi se dobile dobre vrijednosti.

Slika 1. Linearna interpolacija radi dobro samo na intervalima gdje je funkcija ravna

Na Slici 1. napr. linearna aproksimacija zakrivljene funkcije predstavljena crtkanom linijom „a“ je prilično loša jer su tačke x= 0 i x= 1 na kojima je ova linija zasnovana dosta udaljene. Dodavanjem još jedne tačke između na x= 0.5 dobijamo dvo-segmentnu aproksimaciju „c“ koja je dosta bolja. Primijetimo takođe da je linija „b“ dosta dobra aproksimacija zato što funkcija nije mnogo zakrivljena.

Page 2: Interpolacija i Ekstrapolacija

Ova linearna formula se može upotrijebiti i za ekstrapolaciju. Uobičajeni i često korišćeni način ekstrapolacije je da se nađe samo još jedna vrijednost funkcije izvan kraja skupa funkcijskih parova na istom rastojanju na x. Ako su dve posljednje vrijednosti funkcije u nizu fN−1 i fN, lako je pokazati da iz prethodne formule slijedi jednostavno pravilo

fN+1 = 2fN− fN−1 (2)

Treba biti oprezan i u sljedećem: segment „d“ na Slici 1. je linearna ekstrapolacija segmenta „b“, ali pošto funkcija počinje ponovo da se zakrivljuje „d“ je loša aproksimacija osim u slučaju kada je x vrlo blizu x= 2.

2. Kvadratna interpolacija i ekstrapolacija

Kvadratna interpolacija i ekstrapolacija su mnogo tačnije od linearne zato što kvadratni polinom ax2 + bx+ c može mnogo lakše da se uklopi (fituje) u zakrivljene funkcije nego linearni polinom ax+ b.

Slika 2. Kvadratna interpolacija bolje slijedi krivine ako zakrivljenost ne mijenja znak.

Razmotrimo Sliku 2. Ona pokazuje dva kvadratna fitovanja zakrivljene funkcije. Ono koje je označeno sa „a“ koristi samo tačke x= 0, 1, 2 i nije naročito tačno pošto su te tačke suviše međusobno udaljene. Ali aproksimacija koja koristi x = 0,0.5, 1, označena sa „b“, je zaista veoma dobra, mnogo bolja nego dvo-segmentno linearno fitovanje koje koristi iste tri tačke.

Nažalost, formule za kvadratno fitovanje su mnogo teže za izvođenje. (Lagranževe interpolacione formule koje se mogu naći u knjigama elementarne numeričke analize služe za ta izvođenja). Ali za jednako razmaknute podatke na x, Tejlorova teorema zajedno sa aproksimacijama prvog i drugog izvoda, olakšava izvođenje i upotrebu kvadratne interpolacije i ekstrapolacije. Ova tehnika se široko primjenjuje u numeričkoj analizi.

Po Tejlorovoj teoremi aproksimacija funkcije f(x) u okolini tačke x= aje data sa

Page 3: Interpolacija i Ekstrapolacija

f ( x )≈ f (a )+ f ' (a ) ( x−a )+ 12f ' ' (a ) ( x−a )2+… (3)

Upotrijebićemo ovu aproksimaciju (ignorišući sve članove poslije kvadratnog člana za (x−a)) u blizini tačke (xn,fn) u nizu jednako razmaknutih vrijednosti x. Razmak na x označimo sa h.

Aproksimacija po Tejlorovoj teoremi koja koristi numeričke izvode u ovom nizu je tada data sa

f ( x )≈ f n+f n+1−f n−12h

(x−xn )+f n−1−2 f n+ f n+1

2h2(x−xn)

2 (4)

Ova formula je vrlo korisna za dobijanje onih vrijednosti funkcije koje nisu u nizu. Napr. ova formula se može lako upotrijebiti za nalaženje interpolacione aproksimacije za f(xn+ h/2)

f n+1 /2=−18f n−1+

34f n+

38f n+1 (5)

a takođe i za nalaženje kvadratnog ekstrapolacionog pravila.

fN+1 = 3fN− 3fN−1 + fN−2 (6)

3. Interpolacija sa polyfit i polyval

Moguće je upotrijebiti Matlabove polinomske naredbe da bi se izgradio interpolacioni polinom. Ovdje je primjer kako se one koriste da bi se našlo fitovanje polinomom 5-og reda za grubo predstavljanje sinusne funkcije.

clear; close all;

% napravi grubi skup podataka sa dx suvise velikim za dobru tacnost

dx=pi/5;

x=0:dx:2*pi;

y=sin(x);

% napravi fit polinomom 5-og reda za ove podatke

p=polyfit(x,y,5);

% napravi finu x-resetku

xi=0:dx/20:2*pi;

% izracunaj fiting polinom na finoj resetki

yi=polyval(p,xi);

% i prikazi fit, podatke i egzaktnu sinusnu funkciju

plot(x,y,'b*',xi,yi,'r-',xi,sin(xi),'c-')

Page 4: Interpolacija i Ekstrapolacija

legend('Podaci','Fit','Egzaktna sinusna funkcija')

% prikazi razliku izmedju polinomskog fita i egzaktne sinusne funkcije

figureplot(xi,yi-sin(xi),'b-')title('Error in fit')

4. Matlab-ove naredbe Interp1 i Interp2

Matlab ima svoju sopstvenu interpolacionu rutinu interp1 koja izvršava gore navedene stvari automatski. Pretpostavimo da imamo skup tačaka {x, y} i da imamo različit skup x-vrijednosti {xi} za

koje želimo da nađemo odgovarajuće {yi} vrijednosti interpolirajući u {x, y} skup podataka. Potrebno je jednostavno upotrijebiti bilo koju od ove tri interp1 naredbe:

yi=interp1(x,y,xi,'linear')yi=interp1(x,y,xi,'cubic')yi=interp1(x,y,xi,'spline')

Ovdje je primjer kako svaki od ova tri tipa interpolacije radi sa grubim skupom podataka koji predstavlja sinusnu funkciju.

clear; close all;

% napravi grubi skup podataka sa dx suvise velikim za dobru tacnost

dx=pi/5; x=0:dx:2*pi; y=sin(x);

% napravi finu x-resetku

xi=0:dx/20:2*pi;

% interpoliraj na gruboj resetki da bi dobio fine yi vrijednosti

% linearna interpolacija

yi=interp1(x,y,xi,'linear');

% nacrtaj podatke i interpolaciju

plot(x,y,'b*',xi,yi,'r-')title('Linear Interpolation')

% kubna interpolacija

yi=interp1(x,y,xi,'cubic');

% nacrtaj podatke i interpolacijufigureplot(x,y,'b*',xi,yi,'r-')title('Cubic Interpolation')

% splajn interpolacija

Page 5: Interpolacija i Ekstrapolacija

yi=interp1(x,y,xi,'spline');

% nacrtaj podatke i interpolacijufigureplot(x,y,'b*',xi,yi,'r-')title('Spline Interpolation')

Matlab takođe može da uradi dvodimenzionalnu interpolaciju na skupu podataka {x, y, z} da bi dobio aproksimirane vrijednosti z(x,y) u tačkama {xi, yi} koje ne leže na tačkama podataka {x, y}. Može se upotrijebiti bilo šta od sljedećeg:

zi = interp2(x,y,z,xi,yi,'linear')zi = interp2(x,y,z,xi,yi,'cubic')zi = interp2(x,y,z,xi,yi,'spline')

Ovo će dobro raditi za 1-dimenzionalne parove podataka {xi, yi}, ali ako se želi uraditi ova interpolacija za čitavu grupu tačaka u 2-d ravni, tada treba napraviti površinsko crtanje (surface plot) interpolirane funkcije z(x,y). Ovdje je kod koji to radi i moguće je uporediti ova tri interpolaciona metoda (linearni, kubni i splajn).

clear; close all;

x=-3:.4:3; y=x;

% napravi punu 2-d resetku za grube x i y podatke i napravi surface plot [X,Y]=meshgrid(x,y);Z=cos((X.^2+Y.^2)/2);surf(X,Y,Z);title('Crude Data')

%*********************************************************% sada napravi finiju 2-d resetku, interpoliraj linearno da bi% napravio finiji z(x,y) i napravi surface plot.% Primijetimo da posto je interpolacija linearna, mreza (mesh) je finija% ali grubi uglovi su jos prisutni%*********************************************************

xf=-3:.1:3;yf=xf;[XF,YF]=meshgrid(xf,yf);ZF=interp2(X,Y,Z,XF,YF,'linear');figuresurf(XF,YF,ZF);title('Linear Interpolation')

%*********************************************************% Sada koristi kubnu interpolaciju da zaoblis uglove. Primijeti da jos % postoji problem blizu ivice zato sto ove tacke imaju podatke samo na jednoj% strani sa kojima treba raditi, tako da interpolacija ne funkcionise dobro%*********************************************************

ZF=interp2(X,Y,Z,XF,YF,'cubic');figure

Page 6: Interpolacija i Ekstrapolacija

surf(XF,YF,ZF);title('Cubic Interpolation')

%*********************************************************% Sada koristimo spline interpolaciju da zaoblimo uglove i vidimo koliko% je ona razlicita od kubne. Treba primijetiti da ona izgleda bolje,% posebno blizu ivica. Spline interpolacija je cesto najbolja.%*********************************************************

ZF=interp2(X,Y,Z,XF,YF,'spline');figuresurf(XF,YF,ZF);title('Spline Interpolation')