Documente Academic
Documente Profesional
Documente Cultură
CURS 7
INTERPOLAREA DATELOR
Interpolarea unui set discret de perechi de date (xk,yk) presupune determinarea unei funcții f(x)
astfel ca f(xk)=yk, în vederea estimării setului de date în orice alt punct x≠xk. Spre exemplu, fie date
punctele de coordonate (x1,y1) și (x2,y2), se cere estimarea valorii y(x), unde x1<x<x2. Dacă punctele
sunt unite printr-o dreaptă, interpolarea se numește liniară, iar dacă sunt unite printr-un polinom de
gradul trei, interpolarea este spline cubică.
Principalele funcții MATLAB pentru interpolarea datelor sunt:
Exemplu: Cunoscând evoluția populației unui oraș între anii 1920 și 2010, din 10 în 10 ani, să se
estimeze prin toate metodele evoluția anuală a populației între anii 1900 și 2030. Să se estimeze
populația din anii 1917 și 2043 prin metoda 'pchip'.
x=1920:10:2010;
y=[75995 91972 105711 123203 131669 150697 179323 203212 226505 249633];
xi=1900:2030;
y1i=interp1(x,y,xi,'nearest','extrap');
y2i=interp1(x,y,xi,'linear','extrap');
y3i=interp1(x,y,xi,'spline');%sau y3i=interp1(x,y,xi,'spline','extrap')
y4i=interp1(x,y,xi,'pchip');%sau y4i=interp1(x,y,xi,'pchip','extrap')
plot(x,y,'o',xi,y1i,xi,y2i,xi,y3i,xi,y4i);grid;
legend({'date','nearest','linear','spline','pchip'},'Location','EastOutside','Font
Size',18);
y5i=interp1(x,y,[1917,2043],'pchip')
y5i =
1.0e+005 *
0.7078 3.2477
# 10 5
3
2.5
1.5
date
nearest
linear
spline
1
pchip
0.5
-0.5
1900 1920 1940 1960 1980 2000 2020 2040
Software de analiza numerica si simbolica 3
Exemplu: Să se reprezinte grafic o interpolare pchip și spline prin șase puncte date, pe o rețea de 10
ori mai "fină".
x=[0 1 2 3 4 5];y=[0.0 20.0 60.0 68.0 77.0 110.0];
xi=0:0.1:5;
yip=interp1(x,y,xi,'pchip');
yis=interp1(x,y,xi,'spline');
plot(x,y,'ok',xi,yip,'-b',xi,yis,'-r');grid
title('Interpolare pchip vs.spline','FontSize',18);
legend({'date','pchip','spline'},'Location','EastOutside','FontSize',16)
100
80
60
date
pchip
spline
40
20
-20
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
1. mărește matricea Z, introducând între valorile vecine din linie, respectiv coloană, valori
interpolate ale acestora; lucrează recursiv de ntimes;
2. interpolează utilizând următoarele metode:
'nearest' Nearest neighbor interpolation [interpolare de tip cel mai apropiat vecin];
'linear' Linear interpolation (default) [interpolare liniară (implicită)];
'spline' Cubic spline interpolation [interpolare spline cubică];
Software de analiza numerica si simbolica 4
'pchip' Cubic Hermite interpolation [interpolare Hermite cubică] numai dacă datele sunt
uniform spațiate; în caz contrar se realizează tot interpolare 'spline'.
Obs.: Nu permit extrapolare, returnând NaN pentru aceste elemente.
3. returnează scalarul extrapval pentru valorile din afara domeniilor inițiale.
Atenție!!! Valorile vectorilor x și y trebuie să fie ordonate crescător.
Exemplul 1: Să se interpoleze datele din tabelul bidimensional pentru xi=1:9, yi=1:10. Să se estimeze
valoarea pentru x=3.72 și y=5.68.
x
1 2 5 9
y
1 2 6 7 5
3 3 4 8 6
10 4 6 9 5
Atenție!!! Valorile vectorilor x1, x2, x3, ... trebuie să fie ordonate crescător.
Software de analiza numerica si simbolica 6
APROXIMAREA DATELOR
O altă problemă constă în aproximarea unui set de date cu o funcție care constituie "cea mai bună
aproximare". În acest caz nu este neapărat necesar ca funcția determinată să treacă prin toate
punctele date, însă aceasta trebuie să reprezinte "cea mai bună aproximare într-un anumit sens”
(după un anumit criteriu de eroare impus). De exemplu, metoda celor mai mici pătrate furnizează cea
mai bună aproximare în sensul minimizării pătratului distanțelor dintre punctele date și funcția de
aproximare. Pentru ca aproximarea să fie considerată "cea mai bună", suma pătratelor distanțelor de
la fiecare punct al setului de date la curba de aproximare (linie sau polinom) trebuie să fie minimă.
Cu această condiție este posibil ca nici un punct al setului de date să se găsească pe curba de
aproximare. Acest aspect diferențiază clar aproximarea datelor de interpolarea datelor, în cazul
căreia toate punctele sunt situate pe curba de interpolare.
Determinarea celei mai bune aproximări a unui set de date (xk,yk) cu un polinom de ordin n folosește
funcția polyfit. Se apelează cu sintaxa:
p=polyfit(x,y,n)
și returnează coeficienții ai ai polinomului p(x) de grad n, care în punctele precizate de vectorul x are,
în sensul celor mai mici pătrate, valorile date de vectorul y; n este gradul polinomului.
Evaluarea polinomului în mai multe puncte se face utilizând funcția polyval. Se apelează cu sintaxa:
val=polyval(p,x)
Exemplu: Să se aproximeze în sensul celor mai mici pătrate cu o regresie liniară setul de date:
x=[0 1 2 3 4 5];y=[0.0 20.0 60.0 68.0 77.0 110.0];
p=polyfit(x,y,1);
y1=polyval(p,x);
plot(x,y1,x,y,'o');grid
2. Regresia polinomială
Regresia polinomială reprezintă aproximarea unui set de date cu N valori printr-un polinom de forma:
a) dacă gradul polinomului n = N – 1 (unde N este numărul de valori ale setului de date), toate
valorile setului se vor afla pe curba de "aproximare";
b) pentru n < N – 1, aproximarea este cu atât mai bună cu cât gradul polinomului este mai apropiat
de N – 1;
c) pentru n > N – 1, aproximarea poate conduce la erori de aproximare considerabile; în acest caz
Matlab-ul va da un mesaj de eroare.
Exemplu: Aproximați în sensul celor mai mici pătrate următorul set de date:
x=[0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4];
y=[-4.51, -0.466, 1.417, 1.046, -1.207, 0.342, 1.630, 2.364, 7.035];
xi=0:0.01:4;
p3=polyfit(x,y,3);
poli3=polyval(p3,xi);
p6=polyfit(x,y,6);
Software de analiza numerica si simbolica 8
poli6=polyval(p6,xi);
p8=polyfit(x,y,8);
poli8=polyval(p8,xi);
plot(x,y,'o',xi,poli3,xi,poli6,xi,poli8);grid;
legend('date','polinom grd.3','polinom grd.6','polinom grd.8',
'Location','NorthEastOutside');
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA