abc Matlab - elektronski priručnik
III dio Matematika u Matlabu - 3.3. Interpolacija i ekstrapolacija
3.3.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 interpolaciju
figure
plot(x,y,'b*',xi,yi,'r-')
title('Cubic Interpolation')
% splajn interpolacija
yi=interp1(x,y,xi,'spline');
% nacrtaj podatke i interpolaciju
figure
plot(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');
figure
surf(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
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');
figure
surf(XF,YF,ZF);
title('Spline Interpolation')
.
Interpolacija sa polyfit i polyval < Index > Vjerovatnoća i statistika - Uvod
|
 |