Sunteți pe pagina 1din 9

Laborator 7

Regresii si interpolari
1. Obiectivul lucrrii
Fie o colectie de date experimentale. Reprezantarea grafica a acestui set de date conduce la un
nor de puncte in spatiu bidimensional cartezian. Acest nor de puncte de coordonate (xi,yi) poate fi
aproximat printr-o reprezentare grafica y f x care sa treaca printe ele cu o eroare de

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

aproximare cat mai mica posibil , caz in care reprezentarea grafica poarta numele de regresie sau
prin ele, caz in care reprezentarea grafica poarta numele de interpolare.

2. Mersul lucrrii

2.1 Noiuni elementare

In cele ce urmeaza se prefera expunerea notiunilor teoretice in raport cu un lot de date


masurat in practica si specific domeniului de inginerie. Fie un lot de date experimentale obtinute
pentru studiul costului unei unitati (un kw) de energie eoliana CPU (cost per unit). Aceste costurile
per unitatea de kw sunt obtinute functie de inaltimea hub-ului turbinei si diametrul parcurs de palele
turbine in miscarea de rotatie. Atele sunt:
Table 4. Calculation of CPU for the location Jarandagh

Pr (kw)

D (m)

1.5

3.2

10

Hhub m
10
12
15
18
20
10
12
15
18
20
10
12
15
18
20
10
12
15
18
20
10
12
15
18
20

CPU(/kW)
0.4086
0.3623
0.3131
0.2782
0.2599
0.3889
0.3449
0.2980
0.2647
0.2473
0.2254
0.1999
0.1727
0.1534
0.1433
0.2557
0.2267
0.1959
0.1741
0.1626
1.2452
1.1043
0.9543
0.8478
0.9720

Unde Pr reprezinta putere nominal (rated), D este diametrul rotorului si H hub este inaltimea la care
se afla hubul turbinei fata de sol. D si H hub sunt doi parametrii care influenteaza WECS din punct de
vederea al ratei de consum si al circumstantelor climatice. Se considera cazul cand se analizeaza
CPU functie de H hub cand D este fix. Reprezentarea grafica a colectiei de date specifice acestui caz
este:
CPU /kW
0.42

D=1.5 m

0.4

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

0.38
0.36
0.34
0.32
0.3

0.28
0.26

0.24
10

12

14

16

18

20

Hhub m
Se pune problema sa se gaseasca acea reprezentare grafica care aproximeaza cel mai bine acest nor
de puncte. Aproximarea se poate face prin metoda celor mai mici patrate. Aceasta metoda se bazeaza
pe minimizarea sumei ptratelor distanelor de la punctele experimentale la punctele curbei y = f(x).
n

S a, b f xi yi

i 1

Curba reprezinta expresia unui polinom. Daca polinomul este de grad unu atunci aproximarea este o
regresie liniara a carei ecuatie este:
yreg _ lin a0 x a1
unde a1 si a0 sunt coeficientii ce trebuie aproximati. Pentru aceasta exista instructiunea Matlab
polifit. Sintaxa de apelare a acestei instructiuni este:
coef =polifit(x,y,n)

unde x si y sunt coordonatele punctelor ce compun norul de puncte ce trebuie aproximat, iar n
reprezinta gradul polinomului ce va descrie curba ce trece printre aceste puncte. Rezultatul returnat
va fi un vector coef care va contine valorile coeficientilor polinomului aproximat. In cazul
polinomului de gradul unu vectorul are doua pozitii:
coef=[coef(1) coef(2)]

deci:

a0 =coef(1) si a1 =coef(2)
Pentru norul de puncte considerat ca studiu, daca se aplica cele prezentate pentru regresia liniara se
obtin urmatoarele:

close all
Hhub=[10 12 15 18 20];
CPU=[0.4086 0.3623 0.3131 0.2782 0.2599];
figure(1);
plot(Hhub,CPU,'go','LineWidth',1.5,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','r',...
'MarkerSize',7);
x=Hhub;
y=CPU;

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

coef=polyfit(x,y,1);
%regresie liniara = aproximarea prin linie: y_reg_lin=a*xx+b
a0=coef(1);
a1=coef(2);
y_reg_lin=a0*x+a1;
sum_p=sum((y-y_reg_lin).^2)%eroarea de aproximare
figure(3);
plot(x,y_reg_lin,'k',x,y,'go','LineWidth',1.5,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','r',...
'MarkerSize',7);

Rezultatul returnat in linia de comanda este:


sum_p =
3.6582e-004

Rezultatul grafic este:

0.42

x=CPU /kW

0.4

d0

0.38
0.36

d1

yreg _ lin x

0.34
0.32
0.3

0.28
0.26

0.24
10

y =Hhub m
Regresia polinomiala este o regresie de ordin superior (n>1). Este o aproximare a unui set de date
printr-un polinom de forma:
12

14

16

18

20

yreg _ pol ai x ni a0 x n a1x n1 ... an1x an


i 0

Daca setul de date are n elemente, toate datele se afla pe curba de aproximare. Pentru un grad al
polinomului mai mic decat numarul de date, aproximarea este cu atat mai buna cu cat gradul
polinomului este mai apropiat de numarul de date. Utilizarea unui polinom de aproximare cu grad
mai mare decat setul de date poate conduce la erori de aproximare considerabile.

Sa consideram ca aproximam norul de puncte din studiul de caz considerat printr-un polinom de
ordinul doi. Se apeleaza instructiunea polifit cu n=2, iar polinomul obtinut va fi un polinom de
gradul doi si poarta numele si de regresie parabolica.

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

coef=polyfit(x,y,2);
a0=coef(1);
a1=coef(2);
a2=coef(3);
y_reg_par=a0*x.^2+a1*x+a2;
sum_p=sum((y-y_reg_par).^2)
hold on;
plot(x,y_reg_par,'k--','LineWidth',1.5);

Urmatoarele rezultate se obtin:

n4

n3

0.2783

0.42

x=CPU /kW

0.2783

n2

0.38

0.2782

0.4

0.2781

0.38

0.2781

17.8

0.36

0.36

yreg _ lin

0.34

18

0.34

yreg _ par

0.3

0.3

0.28

0.28

0.26

0.26
12

14

16

18

20

y =Hhub m
Eroarea de aproximare pentru n=2

0.24
10

12

14

16

18

sum_p =
2.2095e-007

sum_p =

1.0785e-031

pentru n=6
Warning: Polynomial is not unique; degree >= number of data points.
> In polyfit at 72
In regresii at 74
sum_p =

20

y =Hhub m

sum_p =
9.8586e-006

pentru n=4

18.2

0.32

0.32

pentru n=3

n 1

0.2782

0.4

0.24
10

0.42

x=CPU /kW

18.4

5.6568e-027

Eroarea de aproximare devine din ce in ce mai mica pe masura ce gradul polinomului se apropie de
numarul maxim de elemente al lotului de date. Se poate observa de asemenea ca deja se obtine o
eroare de aproximare atunci cand gradul polinomului depaseste numarul de date ce alcatuiesc norul
de puncte.

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

Aproximarea cu un model exponential


Se utilizeaza instructiunea fit care este dedicata gasirii unui model exponetial ce sa se potriveasca cat
mai bine distributiei de date experimentale. Acest model poate fi descris de una din urmatoarele
expresii matematice:
y aebx

y aebx cedx
Prima expresie este valabila pentru modelul exponential cu un singur termen (Single-Term
Exponential Model), iar cea de a doua expresie este valabila pentru modelul exponential cu doi
termeni (Two-Term Exponential Model). Daca coeficientul b returnat este negativ atunci
exponentiala este negativa, altfel exponentiala este pozitiva.
Pentru a obtine aceste modele instructiunea fit se apeleaza astfel:
nume_functie=fit(x,y,exp1);
respectiv
nume_functie=fit(x,y,exp2);
Pentru exemplul nostru codul Matlab are structura:

x=Hhub;
x1=x'; %vectorul linie se transforma in vector coloana
y=CPU;
y1=y';
f=fit(x1,y1,'exp1')
figure(101)
plot(f,x,y);
hold on;

f1=fit(x1,y1,'exp2')
plot(f1,'k')

iar rezultatul returnat este:


f =

General model Exp1:


f(x) = a*exp(b*x)
Coefficients (with 95% confidence bounds):
a =
0.6375 (0.5619, 0.7131)
b =
-0.046 (-0.05433, -0.03767)
f1 =
General model Exp2:
f1(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a =
0.654 (0.1985, 1.109)
b =
-0.1624 (-0.9275, 0.6027)
c =
0.3328 (-1.413, 2.078)
d =
-0.01751 (-0.1993, 0.1643)

Curbele de aproximare date de modelele exponentiale:


0.42

x=CPU /kW
data
fitted curve
fitted curve

0.4
0.38

f x

0.36

0.34
0.32

f1 x

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

0.3

0.28
0.26

0.24
10

12

14

16

Interpolarea

y =Hhub m
18

20

Exista trei tipuri de interpolari: liniara, spline cubica si polinomiala. In toate aceste cazuri
exista un set de date de coordonate xi , yi . Obiectivul este estimarea valorilor functiei f x , pentru

orice puncte x x1 , x2 . Curba de interpolare trece prin toate punctele pe care o definesc, legea de
interpolare intre puncte putand fi liniara, cubica sau polinomiala.
Interpolarea spline cubica

Curba spline cubica este o curba neteda definita de un set de polinoame de gradul trei. Curba
dintre fiecare pereche de puncte este un polinom de gradul trei calculat astfel incat sa conduca la
tranzitii netede de la un polinom de gradul trei la altul. Spre exemplu, sase puncte sunt conectate cu
cinci curbe diferite de gradul trei, ce constituie o functie neteda in toate cele sase puncte.
Curba de interpolare spline cubica este calculata cu functia spline, se apeleza cu sintaxa:
yi=spline(x,y,xi)

unde:
x si y sunt vectorii care contin coordonatele (absicise si ordonate) datelor (cu pas mare de
parcurgere al vectorului);
xi este un nou vector care contine abscisele vectorului x, dar care este parcurs cu un pas mult mai
mic;
yi este vectroul returnat asociat lui xi.
Obs: Aceasta abordare merge doar daca valorile lui x sunt ordonate crescator
Sa se determine valoarea lui y=CPU de interpolare splin cubica pentru x = 13.
Hhub=[10 12 15 18 20];
CPU=[0.4086 0.3623 0.3131 0.2782 0.2599];
x=Hhub;
y=CPU;
y_interp_spline=spline(x,y,13)

Rezultatul returnat este:

y_interp_spline =
0.3437

Daca se doreste obtinerea a doua valori de interpolare pentru x=11 si x=21, se apleaza in linia de
comanda:
y_interp_spline=spline(x,y,[11 21])

Rezultatul returnat este:

0.3838

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

y_interp_spline =
0.2517

Daca se doreste realizarea unei reprezentari grafice a curbei de interpolare obtinuta folosind 10
puncte de interpolare, se apeleaza secventa Matlab:
x_interp_spline=linspace(min(x),max(x),10);
y_interp_spline=spline(x,y,x_interp_spline);
figure(102)
plot(x_interp_spline,y_interp_spline,'k',x,y,'go','LineWidth',1.5,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','r',...
'MarkerSize',7);

Rezultatul returnat este:

x=CPU /kW

0.42
0.4

0.38

yinterp_spline

0.36
0.34
0.32
0.3

0.28
0.26

0.24
10

12

14

16

18

20

y =Hhub m

Interpolarea multipla

Functia interp1 existenta in Matlab poate interpola datele dupa o lege liniara, cubica sau spline
cubica. Se apeleaza cu sintaxa:
yi=interp1(x,y,xi,regula)
unde regula este unul din cuvintele cheie:
liniar pentru interpolarea liniara;
spline pentru interpolarea spline cubica;
cubic pentru interpolare cubica.
Toate legile de interpolare necesita ca x sa fie ordonat monoton. In plus, methoda cubic cere ca
punctele pe axa x sa fie egal distantate.

Daca y este o matrice cu numarul de linii egal cu cel al vectorului x si cu N coloane, interp1
retruneaza o matrice cu un numar de linii egal cu cel al vectroului xi si cu N coloane.
Exemplu: Fie urmatorele date ale unei functii de o singura variabila:
x
y

-2
6

-1
2

0
3

1
1

2
7

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

Sa se estimeze cu functia interp1 valoarea y care corespunde lui x1=-1 si x2=1.5, folosind
interpolarea liniara, cubica si spline cubica.
Cu secventa Matlab:
x=[-2 -1 0 1 2];
y=[6 2 3 1 7];
yil=interp1(x,y,[-1,1.5],'linear')
yisc=interp1(x,y,[-1,1.5],'spline')
yic=interp1(x,y,[-1,1.5],'cubic')

rezultatul returnat este:


yil =
2
yisc =
2.0000
yic =
2.0000

2.0156
2.7500

Cu secventa Matlab:

xi=linspace(min(x),max(x),40);
yil=interp1(x,y,xi,'linear');
yisc=interp1(x,y,xi,'spline');
yic=interp1(x,y,xi,'cubic');
figure(103);
plot(xi,yil,'k',xi,yisc,'r--',xi,yic,'g:',x,y,'go','LineWidth',1.5,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','r',...
'MarkerSize',7);

rezultatul returnat este:

7
6
5

yil

yic

3
2

yisc

1
0
-2

-1.5

-1

-0.5

0.5

1.5

3. Cerine

cop
adr
y
ian righ
a.b t re
url
s
iba erve
sa@ d to
ug
al.r
o

Sa se parcurga exemplele prezentate in laborator:


a) pentru celalte doua loturi de date, functie de D fix
b) pentru urmatorul lot de date:
p=[1, -6, 11, -6]
x=0:0.25:4;
y=polyval(p,x)+randn(size(x));

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