0% au considerat acest document util (0 voturi)
13 vizualizări15 pagini

Mat Cap 15

Documentul prezintă metode de interpolare și aproximare a datelor, precum și funcțiile MATLAB corespunzătoare. Sunt descrise interpolarea liniară, spline cubică și polinomială pentru funcții de o singură variabilă, precum și căutarea datelor în tabele unidimensionale și bidimensionale.

Încărcat de

Userfromromania
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
13 vizualizări15 pagini

Mat Cap 15

Documentul prezintă metode de interpolare și aproximare a datelor, precum și funcțiile MATLAB corespunzătoare. Sunt descrise interpolarea liniară, spline cubică și polinomială pentru funcții de o singură variabilă, precum și căutarea datelor în tabele unidimensionale și bidimensionale.

Încărcat de

Userfromromania
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd

16.

INTERPOLAREA Şl APROXIMAREA DATELOR


Funcţiile MATLAB pentru interpolarea şi aproximarea datelor sunt:
tablei Interpolează liniar şi citeşte date din tabele unidimensionale;
spline Interpolează prin metoda spline date din tabele unidimensionale;
interpft Interpolează prin metoda transformatei Fourier datele din tabele
unidimensionale;
polyfit Aproximează un set de date cu un polinom de gradul n;
interpi Interpolează liniar, spline sau cubic date din tabele unidimensionale;
table2 Interpolează liniar şi citeşte date din tabele bidimensionale;
interp2 Interpolează biliniar sau bicubic date din tabele bidimensionale; interp3
Interpolează biarmonic valorile unei funcţii de două variabile; interp4 Interpolează
biliniar valorile unei funcţii de două variabile; interp5 Interpolează bicubic valorile
unei funcţii de două variabile; griddata Interpolează prin metoda distanţei inverse
valorile unei funcţii de două variabile.

Interpolarea unui set discret de date [x,, y,] presupune determinarea unei funcţii
f(x) astfel ca f(x,)=yj, în vederea completării setului de date în orice alt punct xo^xr Spre
exemplu, fie date punctele de coordonate (x^y^ şi (x2,y2). Se cere estimarea valorii
y(x), unde x,<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ă.
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ă trebuie să fie „cea mai bună
aproximare" într-un anumit sens (după un anumit criteriu de eroare impus). Metoda
celor mai mici pătrate furnizează de exemplu cea mai bună aproximare în sensul
minimizării pătratului distanţelor dintre punctele date şi funcţia de aproximare.

16.1. Căutarea datelor în tabele


Prin căutarea datelor în tabele se înţelege operaţia prin care o anumită valoare
este citită dintr-un tabel predefinit. Aceste operaţii sunt utile în proiectare, când trebuie
căutate elemente normalizate de dimensiuni sau parametri ai unor dispozitive, de
exemplu alegerea unei secţiuni de conductor, alegerea unui dispozitiv electronic cu
anumiţi parametri, dimensiuni mecanice ale unui profil etc.

16.1.1. Căutarea datelor în tabele unidimensionale


Căutarea datelor în tabele unidimensionale se face cu funcţia tabiet, se
apelează cu sintaxa:
z=teWe7(tab,x) Tabelul „tab" din care se citesc datele trebuie să fie
organizat ca o matrice care are în prima
coloană valorile lui x (abscisa ordonată crescător), iar în coloanele 2:n+1 cele n variabile
căutate. Dacă valoarea x se găseşte între două valori din prima coloană a tabelului „tab",
funcţia returnează o valoare interpolată liniar.

Exemplul 16.1.1. Să se citească valorile y care corespund lui x1=-1 şi x2=3, din
tabelul unidimensional de mai jos:
x - 2 - 1 0 2 4
y 6 2 3 17

Se creează matricea coloană M, care are ca primă coloană elementele lui x ordonate
crescător, iar a doua coloană elementele lui y în ordinea de asociere la x. Citirea din acest
tabel a valorilor y1 şi y2, ce corespund lui x1=-1 şi x2=3, se face cu instrucţiunile:
M = [-2 -l 0 2 4; 6 * 2 3 - 1 7 ];
M=M' ;
yl=tablel(M,-1) y2=tablel(M,3)
obţinându-se rezultatele:
y1 = 2 y2 = 3

Observaţie: Pentru a utiliza funcţia tablei, prima coloană a tabelului unidimensional din care
se citesc datele trebuie să fie monotonă, iar valoarea lui x trebuie să se afle între prima şi
ultima valoare din prima coloana a acestuia (între xmln şi xmax).

16.1.2. Căutarea datelor în tabele bidimensionale


Căutarea datelor în tabele bidimensionale se face cu funcţia table2; se
apelează cu sintaxa:
z=table2(tab,x,y)
Tabelul bidimensional „tab" din care se citesc datele trebuie să fie organizat ca o matrice care
are în prima coloană valorile x (ordonate crescător), iar în prima linie valorile y (ordonate
crescător). Celelalte elemente din tabel sunt valorile z asociate perechilor (x,y). Elementul
z(1,1) = 0.
Dacă valoarea x sau y se găseşte între două valori din prima coloană sau linie a tabelului
„tab", funcţia retumează o valoare interpolată liniar.

Exemplul 16.1.2. Să se citească valorile care corespund perechilor (x,y); (2, 3),
(2.5, 3) şi (2.5, 3.5), din următorul tabel bidimensional:
x\y 12 3 41
2 3 4 52 3
4 5 63 4 5
6 7
Se creează mai întâi matricea N care constituie tabelul din care se citeşte:
• elementul primei linii din prima coloană:
N(1,1) = 0
• prima linie, mai puţin primul element, conţine elementele lui y ordonate crescător:
N(1,2:n+1) = y(1:n).
• prima coloană, mai puţin primul element, vor fi elementele lui x ordonate crescător:
N(2:n+1,1) = x(1:n).
• celelalte elemente ale matricei, sunt elementele asociate perechilor (x,y).
Prin urmare matricea N este:

Cu următoarea secvenţă MATLAB:


N=[ 0 , 1 , 2,3,4;1,2,3,4,5;2,3,4,5,6;3, 4, 5, 6, 7];
cl=table2(N, 2, 3) c2=table2(N, 2 . 5 , 3) c3=table2(N,
2 . 5 , 3 . 5 ) se obţin rezultatele:
d= 5c2= 5.5000 c3= 6

Observaţie: Pentru a utiliza funcţia table2, prima linie şi prima coloană a tabelului
bidimensional din care se citesc datele trebuie să fie monotone. Valorile utilizate pentru x
trebuie să se afle între prima şi ultima valoare din prima coloană (între xmin şi xmax) iar cele
pentru y trebuie să se afle între prima şi ultima valoare din prima linie (între ymin şi ymax).

16.2. Interpolarea funcţiilor de o singură variabilă


în acest subcapitol se prezintă trei tipuri de interpolări: liniară, spline cubică şi
polinomială. în toate cazurile se presupune că există un set de date care reprezintă
coordonatele (x„yj). Obiectivul îl constituie estimarea valorilor funcţiei f(x), pentru orice
punct xe[x1t x2]. Curba de interpolare trece prin toate punctele care o definesc, legea de
interpolare între puncte putând fi liniară, cubică sau polinomială. în figura 16.1 este dat
un exemplu grafic de interpolare liniară şi spline cubică a datelor. Valorile estimate prin
interpolare între punctele date depind de tipul de interpolare ales.
16.2.1. Interpolarea liniară
Dacă se presupune că funcţia dintre cele două puncte din figura 16.2 poate fi
estimată printr-o linie dreaptă, atunci valoarea funcţiei în orice punct x dintre cele două
valori se deduce cu expresia:

Interpolarea liniară a funcţiilor de o singură variabilă se face cu funcţia tablei


care se apelează cu sintaxa:
y=fa£>/e7(nume_tabel,x)
Primul argument al funcţiei este numele tabelului care conţine datele ce se
referă la coordonatele (x,^). Dacă acesta este un fişier pe disc, atunci nume_fişier
trebuie să fie mai întâi încărcat cu funcţia load.
Al doilea argument se referă la valorile lui x pentru care se dore şte
determinarea valorilor interpolate y. Datele din prima coloană a tabelului (valorile lui x)
trebuie să fie în ordine crescătoare, iar valorile x trebuie să se găsească între prima şi
ultima valoare a primei coloane; în caz contrar se afişează un mesaj de eroare.
Dacă tabelul din care se citesc datele conţine mai mult de două coloane, funcţia
tablei returnează un vector linie cu N-1 elemente unde IM este numărul de coloane ale
tabelului. Fiecare valoare returnată este interpolată din coloana corespunzătoare a
datelor.

Exemplul 16.2.1. Estimaţi valorile temperaturii la momentele de timp 2.5 sec şi


4.9 sec, cu datele din tabelul de mai jos.
Timp [s] Temperatură [°C]
0. 0 0. 0 1.0
20.0 2. 0 60. 0 3. 0
68. 0 4. 0 77. 0 5.0
110.0
. Se introduc datele din tabel într-o matrice care are în prima coloană valorile
timpului şi în a doua coloană temperaturile corespunzătoare:
templ(:,l)=[0.0,1.0,2.0,3.0,4.0,5.0] ' ;
templ(:,2)= [ 0 . 0 , 2 0 . 0 , 6 0 . 0 , 6 8 . 0 , 8 0 . 0 , 1 1 0 . 0 ] '; Cu
instrucţiunea MATLAB:
y=tablel(templ,[ 2 . 5 4.9])
se obţin rezultatele:
y=[64.0 107.0] °C

16.2.2. Interpolarea spline cubică


Curba spline cubică este o curbă netedă, definită de un set de polinoame de
gradul trei. Curba dintre fiecare pereche de puncte este un polinom de gradul trei,
calculat astfel încât să conducă la tranziţii netede de la un polinom de gradul trei la altul.
Spre exemplu, şase puncte sunt conectate cu cinci curbe diferite de gradul trei, ce
constituie o funcţie netedă între toate cele şase puncte.
Curba de interpolare spline cubică este calculată cu funcţia spline; se apelează
cu sintaxa:
yi = sp//>?e(x,y,xi)
unde:
x şi y sunt vectorii care conţin abscisele şi ordonatele datelor (cu pas „mare"); xi este un
vector care conţine noile abscise, de regulă cu pas mai „fin"; yi este vectorul returnat,
asociat lui xi. Valorile x trebuie să fie ordonate crescător.

Exemplul 16.2.2. Să se determine valoarea y de interpolare spline cubică pentru


x = 2.6. Cu secvenţa MATLAB:
x=[0, 1, 2, 3, 4, 5 ] ;
y= [ 0 . 0 , 2 0 . 0 , 60.0, 68.0, 77.0, 110.0 ]
t e m p a = s p l i n e ( x , y, 2 . 6 ) se obţine rezultatul:
tempa= 67.3013 °C Pentru calculul a două valori interpolate,
se poate utiliza secvenţa MATLAB:
tempb=spline( x , y,[2.6, 4 . 9 ] )
obţinându-se rezultatul:
tempb= [67.3013 105.2020] °C

Exemplul 16.2.3. Să se reprezinte grafic o interpolare liniară şi spline cubică prin


şase puncte. Cu secvenţa MATLAB:
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,•
yi=spline(x,y,xi);
axis ([-l, 6, -20, 120])
plot(x,y,xi,yi,x,y,'o')
title('Interpolarea liniara si spline')
xlabel('Timp [s]');
ylabel ('Temperatura [grade C]'); grid
se obţine graficul din figura 16.3.

Exemplul 16.2.4. Fiind date 10 perechi de puncte în planul xOy, să se traseze


graficul rezultat prin interpolarea spline pe o reţea de 4 ori mai fină. Cu secvenţa de program:
x = 0:10; y = sin(x); xi = 0:.25:10; yi =
spline(x,y,xi); p l o t ( x , y, ' o ' , x i , y i ) se determină vectorul yi al
celor 40 de puncte corespondente valorilor xi.

16.2.3. Interpolarea prin metoda transformatei Fourier


Funcţia interpft interpolează datele cu o singură variabilă utilizând metoda FFT (Fast
Fourier Transform); se apelează cu sintaxa:
y=interpft(x,n)
care returnează un vector y de lungime n obţinut din vectorul x. Numărul n trebuie să fie mai
mare decât numărul de elemente al vectorului x, iar rezultatul are periodicitate circulară dată
de utilizarea transformatei Fourier.

Exemplul 16.2.5. Fie datele obţinute dintr-un sinus eşantionat cu 8 paşi pe


perioadă:

Interpolaţi datele cu un pas dublu şi verificaţi valorile obţinute.


Cu secvenţa MATLAB:
k=0:7;
x=sin(2*pi*k/8);
yi=interpft(x,16);
kl=0:15;
yr= sin(2*pi*kl/16);
d=max(yi-yr)
se obţine rezultatul: d = 5.5511e-016
Diferenţa maximă între valorile interpolate şi cele reale este egală cu ordinul de mărime
al celui mai mic număr reprezentabil în calculator (eroarea de trunchiere).

16.2.4. Interpolarea multiplă


Funcţia interpi poate interpola datele după o lege liniară, cubică sau spline cubică;
se apelează cu sintaxa:
yi=//7te/p/(x,y,xi, 'regula') unde „regula" este
unul din cuvintele cheie: linear- pentru interpolare
liniară; spline - pentru interpolare spline cubică;
cubic - pentru interpolare cubică.
Toate legile de interpolare necesită ca x să fie ordonat monoton. în plus, metoda 'cubic' cere
ca punctele pe axa x să fie egal distanţate.
Dacă y este o matrice cu numărul de linii egal cu cel al vectorului x şi cu N coloane,
interpi retumează o matrice cu un număr de linii egal cu cel al vectorului xi şi cu N coloane.

Exemplul 16.2.6.. Fie următoarele date ale unei funcţii de o singură variabilă:
x - 2 - 1 0 1 2
y 6 2 3 17

Să se estimeze cu funcţia interpi valoarea y care corespunde lui x1=-1 şi x2=1.5, folosind
interpolarea liniară, cubică şi spline cubică. Cu secvenţa MATLAB:
x=[-2 - 1 0 1 2 ] ; y=[
6 2 3 17];
y i l = i n t e r p l ( x , y, [ - 1 , 1 . 5 ] , ' l i n e a r ' )
y i s = i n t e r p l ( x , y, [ - 1 , 1 . 5 ] , ' s p l i n e ' )
y i c = i n t e r p l ( x , y, [ - 1 , 1 . 5 ] , ' c u b i c ' ) se obţin
rezultatele:
yil = [ 2 4 ] - interpolare liniară
yis = [ 2.0000 2.0156 ] - interpolare spline
yic = [ 2 3 ] - interpolare cubică
16.3. Interpolarea funcţiilor de două variabile
Funcţiile MATLAB pentru interpolarea datelor care reprezintă funcţii de două
variabile (suprafeţe) sunt interp3, interp4, interpS şi griddata.

16.3.1. Interpolarea după o lege biarmonică


Funcţia interp3 interpolează datele funcţie de două variabile după o lege biarmonică;
se apelează cu sintaxa:
zi=/nte/p3(x,y,z,xi,yi)
care retumează în matricea zi valorile interpolate corespunzătoare lui xi şi yi. Matricele x şi y
specifică punctele în care sunt date valorile lui z.
Dacă x şi y sunt vectori, punctele trebuie să fie egal distanţate şi monotone.
Apelată cu sintaxa:
zi=/nte/p3(z,m,n)
funcţia returnează o matrice zi cu dimensiunea m x n, care reprezintă interpolarea datelor din
matricea z.

16.3.2. Interpolarea după o lege biliniară


Funcţia interp4 interpolează datele funcţie de două variabile după o lege biliniară; se
apelează cu sintaxa:
zi=//7te/p4(x,y,z,xi,yi)
care returnează în matricea zi valorile corespunzătoare lui xi şi yi. Matricele x şi y specifică
punctele în care sunt date valorile lui z.
Dacă x şi y sunt vectori, punctele trebuie să fie egal distanţate şi monotone. Valori în
afara intervalelor de definiţie pentru x şi y, retumează NaN pentru zi. Apelată cu sintaxa:
zi=/>7fe/p4(z,xi,yi)
funcţia presupune x=1:n şi y=1:m, unde m x n este dimensiunea matricei z.
Dacă se foloseşte sintaxa:
z\=interp4(z,k)
funcţia retumează o matrice zi care expandează matricea z prin întreţeserea unei coloane şi
a unei linii interpolate bilinear între cele existente, operând recursiv de k ori. Prin urmare,
pentru o matrice z cu dimensiunea 3x4 şi pentru k=2, rezultă la prima interpolare matricea zi
cu dimensiunea 5x7, iar după a doua interpolare o matrice cu dimensiunea 9x13. Prin acest
procedeu pasul devine de p=2k ori mai fin.
Spre deosebire de funcţiile care citesc din tabele prin interpolare valorile precizate,
această funcţie retumează o matrice a tuturor valorilor interpolate.

Interpolaţi biliniar matricea A folosind întreţeserea cu k=2 nivele de date interpolate.


Verificaţi dacă valoarea interpolată care corespunde la jumătatea intervalului dintre ultimele
două coloane şi ultimele două linii după prima interpolare este media aritmetică a numerelor
care definesc dreptunghiul de interpolare, adică (8+6+9+5)/4=7. Cu secvenţa MATLAB:
A=[ 2,6,6,5;3,4,8,6/4,6,9,5]
Ai=interp4(A,2)
Al= interp4 (A, 1);
V=A1 (4, 6)
se obţine matricea Ai care interpolează de două ori matricea A, A1 care interpolează o
singură dată elementele matricei A şi valoarea cerută prin enunţ V=A1 (4,6)=7.

16.3.3. Interpolarea după o lege bicubică


Funcţia interp5 interpolează datele funcţie de două variabile după o lege bicubică; se
apelează cu sintaxa:
zi=/nte/p5(x,y,z,xi,yi)
care retumează în matricea zi valorile corespunzătoare lui xi şi yi. Matricele x şi y specifică
punctele în care sunt date valorile lui z.
Dacă x şi y sunt vectori, punctele trebuie să fie egal distanţate şi monotone. Valori în
afara intervalelor de definiţie pentru x şi y retumează NaN pentru zi.
Apelată cu sintaxa:
zi=/bfe/p5(z,xi,yi) funcţia presupune x=1 :n şi y=1 :m, unde m
x n este dimensiunea matricei z.
Dacă se foloseşte sintaxa:
z\=interp5{z,k)
funcţia retumează o matrice zi care expandează matricea z prin întreţeserea unei coloane şi
a unei linii interpolate bicubic între cele existente, operând recursiv de k ori. Prin urmare,
pentru o matrice z cu dimensiunea 3x4 şi pentru k=2, rezultă la prima interpolare matricea zi
cu dimensiunea 5x7, iar după a doua interpolare o matrice cu dimensiunea 9x13. Prin acest
procedeu pasul devine de p=2k ori mai fin.

Interpolaţi bicubic matricea A folosind întreţeserea cu k=2 nivele de date interpolate.


Calculaţi valoarea interpolată care corespunde la jumătatea intervalului dintre ultimele două
coloane şi ultimele două linii. Cu secvenţa MATLAB:
A=[ 2,6,6,5;3,4,8,6/4,6,9,5]
Ai=interp5(A,2)
Al= interp5(A,1);
V=A1(4,6)
se obţine matricea Ai care interpolează de două ori matricea A, matricea A1 care
interpolează o singură dată matricea A şi valoarea cerută prin enunţ V=A1(4,6)=8.06257.
Rezultatul obţinut cu funcţia interp5 este diferit de acela obţinut prin interpolarea biliniară.
16.3.4. Interpolarea prin metoda distanţei inverse
Interpolarea datelor funcţie de două variabile prin metoda distanţei inverse se
realizează cu funcţia griddata; se apelează cu sintaxa:
zi=griddate(x,y,z,xi,yi)
Valorile matricei zi corespund elementelor matricelor xi şi yi. Matricea z asociază fiecărei
perechi (x„y,) cate o valoare zM.
Dacă x este un vector linie, acesta se aplică fiecărei coloane a matricei z (este o
matrice cu coloane constante). Similar, dacă y este un vector coloană, acesta se aplică
fiecărei linii a matricei z (este o matrice cu linii constante).
Apelată cu sintaxa:
[xi, yi, z\]-griddata(x, y, z, xi, yi)
funcţia griddata retumează şi matricele xi şi yi.

Exemplul 16.3.3. Să se reprezinte grafic funcţia de două variabile z=x(x"2+y"2) pe


intervalul xe[-1, 1], ye[-1, 1]. Cu secvenţa MATU\B:
x=-l:.5:l; y=-l:.5:l;y=y' ;
[x,y]=meshgrid(x,y)
z=x.*(x.A2+y.A2);
xi=-l:.1:1; yi=-l:.1:1;
[xi, yi]=meshgrid(xi,yi)
zi=griddata(x,y,z,xi,yi)
mesh(x,y,z); hold on; mesh(xi,yi,zi-5)
se obţine reprezentarea din figura 16.4. (Pentru comparaţie rezultatul interpolării a fost
deplasat pe axa z cu d=-5 faţă de reprezentarea neinterpolată.)
16.3.5. Interpolarea multiplă
Funcţia interp2 interpolează datele funcţiilor de două variabile după lege biliniară sau
bicubică; se apelează cu sintaxa:
zi=/>?te/p2(x,y,z,xi,yi, 'regula') unde
„regula" este unul dintre cuvintele cheie: linear-
pentru interpolare biliniară; cubic - pentru
interpolare bicubică.
Matricea zi conţine valorile interpolate corespunzătoare lui xi şi yi. Ambele legi de
interpolare necesită ca x şi y să fie ordonate monoton. în plus, metoda 'cubic' cere ca
punctele pe axele x şi y să fie egal distanţate.
Dacă x este un vector linie, acesta se aplică fiecărei coloane a matricei z. Similar,
dacă y este un vector coloană, acesta se aplică fiecărei linii a matricei z.

Exemplul 16.3.4. Fie următorul tabel bidimensional:


y\x 1 2 3 4
12 6 6 5 2
3 4 8 63 4
6 9 5

Să se estimeze valorile zi care corespund perechii (x,y)= (3.5, 2.5), cu funcţia


interp2, folosind interpolarea biliniară şi bicubică. Cu secvenţa MATLAB:
x=[l 2 3 4];%vectorul liniilor constante y=[l 2 3]';
%vectorul coloanelor const. z=[2,6,6,5;3,4 , 8 , 6 ; 4 , 6 , 9 , 5 ] ;
zil=interp2( x , y , z , 3 . 5 , 2 . 5 , 'linear')
zic=interp2( x , y , z , 3 . 5 , 2 . 5 , 'cubic') se obţin rezultatele:
zil= 7 zic= 8.0625

16.4. Aproximarea prin metoda celor mai mici pătrate


în acesta secţiune se prezintă mai întâi aproximarea unui set de date printr-o
linie dreaptă şi apoi aproximarea printr-un polinom. Pentru ca aproximarea să fie
considerată „cea mai bună" suma pătratelor distanţelor de la fiecare punct la curba
aproximantă (linie sau polinom) trebuie să fie minimă. Cu această condiţie este posibil
ca nici un punct al setului de date să nu se găsească pe curba aproximantă. Acest lucru
separă net aproximarea de interpolare, la care toate punctele sunt situate pe curbă.

16.4.1. Regresia liniară


Regresia liniară este 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 distanţelor
de la fiecare punct la estimaţia liniară, distanţe prezentate în figura 16.6, mărime dată
de expresia:
sum_p=sum((y-yl). A 2)
Determinarea parametrilor m şi n ai dreptei de aproximare y=mx+n se face
utilizând funcţia polyfit.

Exemplul 16.4.1. 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, 20, 60,68, 77, 110];
Cu următoarea secvenţă MATLAB:
x=[0, 1, 2, 3, 4, 5];
y = [ 0 , 20, 60, 6 8 , 77, 110];
coef=polyfit (x, y, 1);
m = coef(1);
n=coef (2);
yl=m*x+n;
sum_p=sum((y-yl).A2)
axis ( [-1, 6, -20, 120] )
plot(x, yl, x, y, 'o')
grid se obţine
graficul din figura 16.5.
16.4.2. Regresia polinomială
Regresia polinomială este o aproximare a unui set de date printr-un polinom de
forma:

Dacă setul de date are N elemente, toate datele se afl ă pe curba de


„aproximare". Pentru un grad al polinomului mai mic dec ât numărul de date,
aproximarea este cu atât mai bună cu cât gradul polinomului este mai apropiat de
numărul de date. Utilizarea unui polinom de aproximare cu grad mai mare decât setul
de date poate conduce la erori de aproximare considerabile.
Determinarea celei mai bune aproximări a unui set de date (x,y) cu un polinom de ordin
n foloseşte funcţia polyfit, se apelează cu sintaxa: p=polyfit(x,y,n)
Funcţia polyfit returnează coeficienţii a, ai polinomului p(x), care în punctele precizate
de vectorul x are, în sensul celor mai mici pătrate, valorile date de vectorul y.

Exemplul 16.4.2. Fie polinomul p(x) = x3-6x2+11x-6, peste care este suprapus un
zgomot cu distribuţie normală. Aproximaţi în sensul celor mai mici pătrate datele rezultate cu
un polinom de gradul 3. Reprezentaţi grafic datele cu zgomot şi polinomul aproximant. Cu
secvenţa MATLAB:
p=[l, -6, 11, -6];
x=0:. 2 5 : 4 ;
y=polyval(p,x)+randn(size(x)) ;
c=polyfit(x,y, 3) ; poli3=polyval( c , x ) ;
p l o t ( x , p o l i 3 , x , y, ' o ' ) ; g r i d se obţine graficul din
figura 16.6.

Exemplul 16.4.3. Să se determine coeficienţii polinoamelor de grad 3 şi 5 care


aproximează punctele (x,y) precizate în tabelul de mai jos:

x -2 -1 0 2 4y
-15 -3 2 -3 10

Cu următoarea secvenţă de program:


x = [ -2 -l 0 2 4];
y = [-15 -3 2 -3 10];
xn = -2: .1:4;
c3 = polyfit(x,y, 3)
y3 = polyval(c3,xn);
c5 = polyfit(x,y, 5)
y5 = polyval(c5,xn); se
obţin coeficienţii:
c3 = [ 0.7719 -2.5526 0.0439 1.2105] c5 = [ -0.0958 0.4042
1.1333 -4.3667 0 2.0000] care reprezintă polinoamele:
y3(x) = 0.7719x3 - 2.5526x2 + 0.0439x + 1.2105
y5(x) = -0.0958x5 + 0.4042x4 + 1.1333x3 - 4.3667x2 + 2

Exemplul 16.4.4. Să se scrie o secvenţă de program care să aproximeze prin


polinoame de gradul 2, 5 şi 7 şi prin funcţii spline 5 perechi de puncte de coordonate
cunoscute. Să se reprezinte grafic aproximările determinate. Cu secvenţa MATLAB:
x = [ -2 -l 0 2 4 ] ; y=
[-19 -3 1 -3 17 ];
c2 = polyfit(x,y,2); % coef. [Link] grad 2 c5 =
polyfit(x,y,5); % coef. [Link] grad 5 c7 =
polyfit(x,y,7); % coef. [Link] grad 7 xl =
-2:.1:4; % noul pas de interpolare y2 =
polyval(c2,xl); % eval. polinom de grad 2 y5 =
polyval(c5,xl); % eval. polinom de grad 5 y7 =
polyval(c7,xl); % eval. polinom de grad 7 yi =
spline(x,y,xl); % interpoleaza spline
plot(xl,yi,xl,y2,xl,y5,xl,y7,x,y,'o') grid Se obţine
graficul din figura 16.7.

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