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