Sunteți pe pagina 1din 10

Software de analiza numerica si simbolica 1

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:

interp1 Interpolează date din tabele unidimensionale


interp2 Interpolează date din tabele bidimensionale
interp3 Interpolează date din tabele tridimensionale
interpn Interpolează date din tabele N-dimensionale

1. Interpolarea datelor din tabele unidimensionale


Se presupune că există un set de date care reprezintă coordonatele (xk,yk). Obiectivul îl constituie
estimarea valorilor funcției f(x), pentru orice punct x  ( xk, xk + 1 ) printr-o curbă de interpolare
care trece prin toate punctele (xk,yk) care o definesc.
Se realizează cu funcția interp1, care se apelează cu una din sintaxele:
yi=interp1(x,y,xi,'metoda')
yi=interp1(x,y,xi,'metoda','extrap')
yi=interp1(x,Y,xi,'metoda',extrapval)

1. 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ă: este considerat tot
domeniul valorilor];
'pchip' Cubic Hermite interpolation [interpolare pe porțiuni Hermite cubică: sunt
considerate doar intervale din domeniul valorilor].
Obs.: Cu această sintaxă, interpolările de tip 'nearest' și 'linear' nu permit extrapolare,
returnând NaN pentru aceste elemente; interpolările de tip 'spline' și 'pchip' realizează și
extrapolarea.
2. interpolează și extrapolează indiferent de metoda specificată;
3. returnează scalarul extrapval pentru valorile din afara domeniului inițial.
Atenție!!! Valorile elementelor vectorului x trebuie să fie ordonate crescător.
Software de analiza numerica si simbolica 2

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)

Interpolare pchip vs.spline


120

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

2. Interpolarea datelor din tabele bidimensionale


Funcția interp2 interpolează datele funcțiilor de două variabile și se apelează cu una din sintaxele:
Zi=interp2(Z,ntimes)
Zi=interp2(x,y,Z,xi,yi,'metoda')
Zi=interp2(x,y,Z,xi,yi,'metoda',extrapval)

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

x=[1 2 5 9];y=[1 3 10]';


Z=[2,6,7,5;3,4,8,6;4,6,9,5];
xi=1:9;yi=[1:10]';
Zil=interp2(x,y,Z,xi,yi,'linear');
surf(x,y,Z);hold on;surf(xi,yi,Zil+25);
Zil=interp2(x,y,Z,3.72,5.68,'linear')
Zic=interp2(x,y,Z,3.72,5.68,'spline')
Zil =
6.8395
Zic =
5.7064
Software de analiza numerica si simbolica 5

Exemplul 2: Să se mărească matricea Z introducând-se câte un element nou prin interpolare.


Z=[2,6,7,5;3,4,8,6;4,6,9,5]
Z =
2 6 7 5
3 4 8 6
4 6 9 5
Zi=interp2(Z,1)
Zi =
2.0000 4.0000 6.0000 6.5000 7.0000 6.0000 5.0000
2.5000 3.7500 5.0000 6.2500 7.5000 6.5000 5.5000
3.0000 3.5000 4.0000 6.0000 8.0000 7.0000 6.0000
3.5000 4.2500 5.0000 6.7500 8.5000 7.0000 5.5000
4.0000 5.0000 6.0000 7.5000 9.0000 7.0000 5.0000

3. Interpolarea datelor din tabele tridimensionale


Funcția interp3 interpolează datele funcțiilor de trei variabile.
Se apelează cu una din sintaxele:
Vi=interp3(V,ntimes)
Vi=interp3(x,y,z,V,xi,yi,zi,'metoda')
Vi=interp3(x,y,z,V,xi,yi,zi,'metoda',extrapval)

Atenție!!! Valorile vectorilor x, y și z trebuie să fie ordonate crescător.

4. Interpolarea datelor din tabele N-dimensionale


Funcția interpn interpolează datele funcțiilor de N variabile.
Se apelează cu una din sintaxele:
Vi=interpn(V,ntimes)
Vi=interpn(x1,x2,x3,...,V,x1i,x2i,x3i,...,'metoda')
Vi=interpn(x1,x2,x3,...,V,x1i,x2i,x3i,...,'metoda',extrapval)

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)

Funcția polyval evaluează polinomul definit de vectorul p al coeficienților polinomului, în punctul x.


Dacă x este vector sau matrice, polinomul este evaluat pentru fiecare dintre elementele acestuia.
1. Regresia liniară
Regresia liniară reprezintă aproximarea unui set de date printr-o dependență liniară care minimizează
suma pătratelor dintre dreapta de aproximare și punctele date. Măsura calității unei aproximări
liniare este dată de suma pătratelor erorilor (distanțelor) de la fiecare punct dat la estimația liniară
(distanțe prezentate în figura următoare), mărime dată de expresia:
n
tot =  k2 , unde k = yk − y .
k =1

Determinarea coeficienților a și b ai dreptei de aproximare y1=ax+b se face utilizând funcția polyfit


pentru n=1 (polinom de gradul1):
p=polyfit(x,y,1)
Software de analiza numerica si simbolica 7

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:

p ( x ) = a1xn + a2xn−1 + ... + an−1x 2 + anx + an+1

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');

Exemplu: Evaluarea polinomului p pentru x = -2, 0, 0.5, 1, 3


p=[1 0 2 0.5 -6.5];
x=[-2 0 0.5 1 3];
y=polyval(p,x)
y =
16.5000 -6.5000 -5.6875 -3.0000 94.0000
Software de analiza numerica si simbolica 9

TRANSFORMAREA SISTEMELOR DE COORDONATE

1. Transformarea coordonatelor carteziene în/din coordonate polare (2D) și cilindrice (3D)


Sintaxe:
[theta,rho]=cart2pol(x,y) [theta,rho,z]=cart2pol(x,y,z)
[x,y]=pol2cart(theta,rho) [x,y,z]=pol2cart(theta,rho,z)

unde x, y, z sunt vectorii coordonatelor carteziene.

2. Transformarea coordonatelor carteziene în/din coordonate sferice


Sintaxă:
[theta,phi,r]=cart2sph(x,y,z) [x,y,z]=sph2cart(theta,phi,r)
Software de analiza numerica si simbolica 10

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

S-ar putea să vă placă și