Documente Academic
Documente Profesional
Documente Cultură
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
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);
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
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);
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
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')
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)
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])
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);
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')
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);
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