Sunteți pe pagina 1din 26

12.

INTERPOLAREA I APROXIMAREA
DATELOR
12.1. Cutarea n tabele
La ora actual, din ce n ce mai muli parametri ai unor echipamente i
dispozitive sunt normalizai i prezentai tabelar, astfel nct, de multe ori, este
necesar cutarea valorilor n tabele de date. Cu att mai mult, tabelele sunt
utilizate n calcule economice.
Operaia prin care, o anumit valoare este citit dintr-un tabel existent, este
cunoscut sub denumirea de cutarea n tabele.
Pentru calculele termodinamice se utilizeaz frecvent tabelele
termodinamice de proprieti. n aceste tabele, parametrii termodinamici pot fi
exprimai n funcie de o singur mrime (de regul presiune sau temperatur)
domeniul saturat, sau funcie de doi parametri (de obicei presiunea i temperatura)
domeniul apei sau al aburului.
Cutarea datelor n aceste tabele unidimensionale se realizeaz cu funcia
table1, care se apeleaz cu sintaxa:
Z = table1 (tab, x), unde x este valoarea pentru care se citesc datele din
tabelul tab.
Tabelul tab trebuie s fie organizat ca o matrice, care are n prima coloan
valorile lui x (abcisa ordonat cresctor), iar cele n variabile oarecare sunt n
coloanele de la 2 la n + 1. Dac valoarea x se gsete ntre dou valori din prima
coloan a tabelului tab, funcia returneaz o valoare interpolat liniar.
Pentru a utiliza funcia table1, 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 coloan a acestuia, adic ntre x
min
i x
max
.
Fiind dat tabelul,

x -5 -3 -1 0 2 5 7 10 15
y 14 12 9 7 4 8 10 15 20

Pentru a citi valorile y, care corespund lui x1 = -3 i x2 = 6, din tabelul
unidimensional de mai sus, se creeaz matricea coloan M, care are ca prim
coloan elementele lui x, ordonate cresctor, iar a doua coloan elementele lui y, n
ordinea de asociere cu x. Citirea din acest tabel al valorilor y1 i y2, ce corespund
lui x1 i x2, se face cu instruciunile:
M = [-5 -3 -1 0 2 5 7 10 15 ; 14 12 9 7 4 8 10 15 20];
y1=table1(M',-3); y1=table1(M',6),
obinndu-se: y1 = 12, y2 = 9, din care se observ c pentru valorile ce nu se regsesc
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 254
n tabel, se utilizeaz o interpolare liniar.
De menionat c n ultimele variante de Matlab s-a renunat la aceast
funcie, fiind nlocuit cu interp1 sau interp1q.

Cutarea datelor n tabele bidimensionale se face cu funcia table2 care se
apeleaz cu sintaxa:
Z = table2 (tab, x, y),
n care tab este tabelul bidimensional ,din care se citesc datele corespunztoare perechii
x i y.
Tabelul bidimensional tab, din care se citesc datele, trebuie s fie organizat
ca o matrice, care are n prima coloan valorile x (ordonate cresctor), iar n prima
linie valorile y (ordonate cresctor). Celelalte elemente din tabel sunt valorile Z,
asociate perechilor (x, y), iar elementul Z(1, 1) = 0.
Dac valoarea x sau y se gsete ntre dou valori din prima coloan sau linie
a tabelului tab, funcia table2 returneaz o valoare interpolat liniar.
Fie tabelul bidimensional,

y
x
1 2 3 4 5
1 7 9 11 13 15
2 8 10 14 15 17
3 4 5 8 4 6
4 1 5 7 9 11

Formarea acestui tabel se poate face cu
M=[0 1 2 3 4 5; 1 7 9 11 13 15; 2 8 10 14 15 17; 3 4 5 8 4 6; 4 1 5 7 9 11],
iar cutarea valorilor ce corespund perechilor x=2, y=3 i x=3.5, y=2.5, se face cu
table2(M,2,3); table2(M,3.5,2.5),
rezultnd valoarea 14 i respectiv 6.25, de unde se verific faptul c, pentru valori
intermediare se procedeaz la o interpolare liniar.

Pentru a utiliza funcia table2, prima linie i prima coloan a tabelului
bidimensional M, 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 x
min
i x
max
), iar cele pentru y trebuie s se afle ntre prima i ultima valoare
din prima linie (ntre y
min
i y
max
).
De menionat c n ultimele variante de Matlab s-a renunat la aceast
funcie, fiind nlocuit cu interp2, care este o funcie de interpolare bidimensional.

Interpolarea datelor este similar cutrii n tabele, cu deosebirea c, pentru
valori intermediare se folosesc alte metode de estimare, altele dect cea liniar
utilizat n cadrul cutrii n tabele.

Interpolarea i aproximarea datelor 255
12.2. Interpolarea datelor
Multe metode numerice se refer la calculul unor funcii prin elaborri de
tabele de valori discrete sau prin rezolvri aproximative ale unor ecuaii
funcionale, prin algoritmi adaptai convenabil, n care un rol deosebit l au
controlul propagrii erorilor, viteza de convergen, ca i stabilitatea algoritmilor
respectivi. n plus, pentru calculele dinamice i de conducere n timp real a
proceselor energetice, timpul de calcul este foarte important.
n multe astfel de probleme se folosesc instrumente matematice profunde,
chiar dac acestea se traduc n ultim instan n programe de efectuare succesiv a
ctorva operaii fundamentale aritmetice sau logice. Un loc aparte, n cadrul
metodelor numerice, l au interpolrile de funcii, utilizate curent n diverse tipuri
de msurtori i prelucrri de date.
Pentru un interval fixat, R I i
p
x x x x < < < < L
2 1 0
puncte aparinnd lui
I, se poate defini o funcie teoretic R I f : , ale crei valori
i
y , sunt cunoscute
numai n nodurile
i
x , p i x f y
i i
= 0 ), ( .
Orice funcie R I F : astfel nct, ( ) p i y x F
i i
= 0 , , se numete
funcie de interpolare a lui f, sau echivalent, funcie de interpolare asociat tabelei
de p+1 valori,

0
x
1
x
2
x ...
p
x
0
y
1
y
2
y ...
p
y

Evident c o astfel de funcie nu este unic, iar graficul ei trece prin punctele
( ) p i y x
i i
0 , , . De exemplu, n cazul interpolrii liniare, graficul lui F este linia
poligonal cu vrfurile ( ) p i y x
i i
0 , , .
O alt funcie de interpolare asociat tabelei anterioare este polinomul lui
Lagrange de interpolare, care este un polinom P, de p P grad , cu coeficieni
reali, astfel nct ( ) p i y x P
i i
= 0 , i ( ) ) (x P x f pentru orice I x .
Se demonstreaz uor c polinomul Lagrange de interpolare, asociat unei
tabele de valori, exist i este unic. Pentru orice j, p j 0 , notnd
cu
j
L polinomul
( )
( ) ( )( ) ( )
( ) ( )( ) ( )
n j j j j j j
n j j
j
x x x x x x x x
x x x x x x x x
x L


=
+
+
L L
L L
1 1 0
1 1 0
,
atunci polinomul Lagrange ( ) x P , asociat tabelei de interpolare este
( ) ( )

=
=
p
j
j j
x L y x P
0
.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 256
Un avantaj al reprezentrii prin polinoamele Lagrange o constituie faptul c
polinoamele
j
L depind numai de alegerea nodurilor de interpolare, dar la adugarea
unor noi noduri, calculul lui
j
L trebuie refcut, ceea ce este un defect.
Polinomul
j
L depinde de x, ca i polinomul ( ) x P , i, prin urmare, funcia de
aproximare este un polinom de x, pentru care se pot apoi calcula valorile n orice
punct x, nu numai n noduri, ci i ntre noduri, justificnd astfel termenul de
interpolare.
Pentru tabela,
0 1 2 4
1 0 0 -3
avem 3 , 0 , 0 , 1 , 3
3 2 1 0
= = = = = y y y y p i
( )
( )( )( )
( )( )( )
( )( )( )
( )( )( ) 8
8 14 7
4 2 1
4 2 1
2 3
3 0 2 0 1 0
3 2 1
0
+
=


=


=
x x x x x x
x x x x x x
x x x x x x
x L ,
( )
( )( )( )
( )( )( )
( )( )
3
4 2
3 1 2 1 0 1
3 2 0
1

=


=
x x x
x x x x x x
x x x x x x
x L ,
( )
( )( )
4
4 1
2

=
x x x
x L , ( )
( )( )
24
2 1
3

=
x x x
x L .
Cu acestea, polinomul de interpolare este
( ) ( ) ( ) 4 8 5
4
1
) ( 3 ) (
2 3
3 0
0
+ = = =

=
x x X x L x L x L y x P
p
j
j j
.
Pe baza algoritmului de mai sus, se poate scrie relativ uor o funcie care s
interpoleze prin metoda polinoamelor lui Lagrange.

n ultimii ani a aprut o noiune nou, strns legat de interpolarea
polinomial, anume cea de funcie spline, polinomial pe poriuni i suficient de
neted. Mai precis, dac [ ] b a I , = este un interval i b x x x a
n
= < < < =
+1 1 0
: L
este o diviziune cu n noduri interioare, o funcie R I s : se numete spline de
ordinul k ( 1 k ), relativ la , dac funcia s este de clas ) (
1
I C
k
i n orice
interval [ ]
1
,
+ i i
x x , cu n i 0 , s coincide cu un polinom (funcie polinomial) cu
coeficieni reali de grad k.
Ca urmare, orice polinom este funcie spline, nu i reciproc. De exemplu,
pentru R fixat, funcia
( )

pentru 0,
pentru ,

>
=


x
x x
f
k

este spline de ordinul k i nu este polinom, deoarece are o infinitate de zerouri, fr a fi
funcie nul.
Deoarece mulimea funciilor spline, de ordinul k, relativ la o diviziune
Interpolarea i aproximarea datelor 257
b x x x a
n
= < < < =
+1 1 0
L , este un spaiu vectorial real de dimensiune 1 + + k n ,
pentru determinarea unei funcii spline se impun 1 + + k n condiii.
Aplicnd acest fapt, rezult c, dac R I f : este o funcie de clas
) (
1
I C
k
, atunci exist o funcie spline unic s, de ordin 2k-1, astfel nct s fie
verificate urmtoarele n+2k condiii:
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )

= = =
= = =
= =


b f b s b f b s b f b s
a f a s a f a s a f a s
x f x s x f x s
k k
k k
n n
) 1 ( ) 1 (
) 1 ( ) 1 (
1 1
, , ,
, , ,
, ,
L
L
L
.
Aproximarea ( ) ( ) x s x f pentru orice I x este mult mai precis dect cea
cu polinoame Lagrange.

Funcia Matlab spline realizeaz interpolarea cubic spline i se apeleaz cu
sintaxa:
yy = spline(x,y,xx),
n care x sunt valorile n care este dat funcia, un interval [a, b] mai rar, y valorile
funciei sau nsi funcia, xx este o diviziune interioar b x x x a
n
= < < < =
+1 1 0
: L
cu n noduri, iar yy sunt valorile funciei spline calculate n punctele xx, interioare
intervalului [a, b]. Vectorul x specific punctele n care este dat valoarea lui y i
trebuie s fie ordonate cresctor. Dac y este o matrice, atunci interpolarea este
realizat pentru fiecare linie a lui y i, n acest caz, length(x) trebuie s fie egal cu
size(y, 2) , iar yy este size(y, 1) cu length(xx ).
Aceast funcie este opusul funciei interp(x, y, xx, 'spline ), care realizeaz
interpolarea pentru fiecare coloan a matriciei y i la care, length(x) trebuie s fie
egal cu size(y,1), iar yy-ul, care rezult, are length (xx) cu size(y,2).
Dac y conine dou valori n plus dect numrul de intrri ale lui x, atunci
prima i ultima valoare ale lui y sunt folosite ca pant pentru funcia 'spline' cubic.
Cu alte cuvinte:
f(x) = y(:,2:end-1), df(min(x)) = y(:,1), df(max(x)) = y(:,end)

Pentru exemplificare, se genereaz o curb sinus, apoi se realizeaz o curb
spline pe o reea mai fin de 4 ori i se traseaz graficul din figura 12.1. Secvena
Matlab este:
x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx);
plot(x,y,'o',xx,yy); xlabel('x') ; ylabel('y').

Urmtorul exemplu ilustreaz folosirea canelurilor complete, acolo unde
sunt recomandate pantele finale. Sunt impuse pante egale cu zero la capatele
interpolantului, la valori ale unei anumite distribuii,
x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0]; cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-') ; xlabel('x') ; ylabel('y'),
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 258
avnd graficul redat n figura 12.2.

Fig. 12.1. Interpolarea spline a funciei sin

Fig. 12.2. Interpolarea spline cu pante finale
Extrapolarea populaiei SUA, la nivelul anului 2000, pe baza datelor de
recensmnt, din perioada 19001990 ,se face cu secvena:
t = 1900:10:1990;
p = [ 75.995 91.972 105.711 123.203 131.669 ...
150.697 179.323 203.212 226.505 249.633 ]; spline(t,p,2000),
rezultnd 270.606 persoane. Dup cum se observ din acest exemplu, xx pot fi i
punctele n care se calculeaz funcia spline.
Interpolarea i aproximarea datelor 259
Secvena Matlab,
x = pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1];
pp = spline(x,y); yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or'), axis equal
genereaz graficul din figura 12.3 sub forma unui cerc, cu 5 puncte: y(:,2),...,y(:,6)
notate cu o- uri. Se observ c y-ul conine cu dou valori mai multe dect x, iar
acestea, y(: , 1) i y ( : , end) sunt folosite ca pante finale.

Fig. 12.3. Interpolarea spline a unui cerc prin 5 puncte

Evaluarea polinomului de interpolare spline, n nodurile reelei, se face cu
funcia ppval, apelat cu,
v = ppval (pp, xx)
care restituie valoarea n punctele xx ale polinomului coninut de pp, aa cum este
construit de funcia spline.
Apelat sub forma,
v = ppval (xx, pp)
restituie acelai rezultat, dar poate fi folosit i pentru a fi chemat ca funcie argument de
ctre alte funcii, ca de exemplu fminbnd, fzero i quand.
Pentru exemplificare, comparm rezultatele integrrii funciei cos,
a = 0; b = 10; int1 = quad(@cos,a,b,[],[]),
care are ca rezultat,
int1 = -0.5440,
cu rezultatul integrarii polinomului pp, ce aproximeaz funcia cos prin interpolarea
spline a valorilor x i y,
x = a:b; y = cos(x); pp = spline(x,y); int2 = quad(@ppval,a,b,[],[],pp),
avnd ca rezultat,
int2 = -0.5485,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 260
cu observaia c int1 calculeaz integrala funciei cosinus pe intervalul [a, b], n timp ce
int2 furnizeaz integrala pe acelai interval, dar a polinomului pp.

Interpolarea periodic utilizeaz polinoame Hermite de interpolare i se
realizeaz cu funcia pchip, care se apeleaz cu una dintre sintaxele:
yi=pchip(x,y,x) restituie vectorul yi, ce conine elemente ce corespund
elementelor lui xi, determinate prin metoda interpolrii spline cubice
dintre vectorul x, vectorul punctelor de calcul, i vectorul y, vectorul
datelor y cunoscute, iar dac y este o matrice, atunci interpolarea este
efectuat pentru fiecare coloan a lui y i yi, length(xi)-x-size(y,2);
pp=pchip(x,y) returneaz o structur polinomial, care este folosit de
funcia ppva1, unde x poate fi un vector linie sau coloan, y este un
vector linie sau coloan cu aceeai lungime ca i x, sau o matrice cu
coloane length(x).

Funcia pchip gsete valori ale funciei interpolate, de la baza P(x) la
punctele intermediare, ca de exemplu:
pe fiecare subinterval x
k
x x
k+1
, P(x) este o interpolare cu polinoame
Hermite cubice, care dau valori i pante precise pentru cele dou puncte
mrginae;
P(x) interpoleaz y, de exemplu P(x
j
)=y
j
, i prima derivat P(x) este
continu, derivata a doua P(x) este probabil necontinu, putnd sri la
x
j
;
pantele pentru x
j
sunt alese astfel nct, P(x) conserv forma i ine cont
de monotonicitate, ceea ce nseamn c, pe intervalele n care datele sunt
monotone, exist P(x), iar n punctele n care variabila are punct de
extrem local, P(x) nu exist.

De menionat c, dac y este o matrice, P(x) se aplic pentru fiecare coloan
a lui y.
Comparnd funcia spline cu funcia pchip se desprind urmtoarele:
polinoamele spline S(x,) sunt construite n acelai mod ca i P(x);
spline alege pantele x
j
diferite, cu alte cuvinte fcnd ca S(x) continu,
dar determin un rezultat incert, pentru S(x) continu;
spline determin multe rezultate corecte, dac datele conin o funcie
incert;
pchip nu depete cea mai mic oscilaie, dac data este incert;
pchip este mai puin costisitoare, ca timp de calcul, de reglat;
cele dou funcii sunt la fel de costisitoare de evaluat.

Pentru compararea funciei spline cu pchip, respectiv a interpolrii spline
cubic cu cea cu polinoamele lui Hermite, se prezint grafic n figura 12.4, att
valorile iniiale, ct i funciile spline s i pchip p, realizate cu secvena Matlab:
Interpolarea i aproximarea datelor 261
x = -3:3; y = [-1 -1 -1 0 1 1 1]; t = -3:.01:3;
p = pchip(x,y,t); s = spline(x,y,t); plot(x,y,'o',t,p,'-',t,s,'-.') ;
legend('date','p - pchip','s - spline',4); xlabel('x'); ylabel('y').

Fig. 12.4. Comparea interpolrii cu funciile spline i pchip

Realizarea unei interpolri de tip unidimensional sau pe baza unui tabel, se
face cu funcia interp1, care poate fi apelat cu una dintre secvene:
yi = interp1(x,y,xi) restituie vectorul yi, ce conine elementele
corespunztoare lui x,i determinate prin metoda interpolrii cubice dintre
vectorul x, care specific abscisa i y, care specific ordonata, iar dac y
este o matrice, atunci interpolarea este executat pentru fiecare coloan a
lui y, rezultnd un yi cu length(xi)-x-size(y,2);
yi = interp1(y,xi) presupune c x=1:N, unde N este lungimea vectorului
y sau size(y,i), pentru cazul cnd y este matrice;
yi = interp1(x,y,xi, 'method') interpoleaz folosind urmtoarele metode,
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'linear' - interpolare linear, care este metoda implicit, cnd nu se
specific;
o 'spline' - interpolare spline cubic;
o 'pchip' - interpolarea cubic cu polinoamele lui Hermite;
o 'cubic' asemenea cu 'pchip';
o 'v5cubic' interpolare cubic utilizat n versiunea Matlab 5;
metodele 'nearest', 'linear' i 'v5cubic' returneaz NaN pentru fiecare
element a lui xi, care este n afara intervalului lui x, dar toate celelalte
metode extrapoleaz i n afara intervalului de valori;
yi = interp1(x,y,xi,method,'extrap') folosete metode speciale pentru
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 262
interpolarea n afara intervalului;
yi = interp1(x,y,xi,method,extrapval) determin o valoare scalar n
afara intervalului de valori, NaN i 0 sunt adesea folosite pentru
extrapval.

Funcia interp1 este o comand de interpolare ntre puncte. Ea gsete valori
pentru punctele intermediare, pentru o dimensiune a funciei f(x). Funcia f(x) este
redat n figura 12.5, prezentnd i relaia dintre vectorii x, y, xi i yi.

Fig. 12.5. Compararea interpolrii cu funciile spline i pchip
Interpolarea este acelai lucru cu cutarea n tabele. n acest sens, tabelul
este [x, y] i cutarea n elementele lui xi i x este realizat de interp1, care este
ajutat de locaia lor i returneaz valori yi, ce sunt interpolate n elementele lui y.

Funcia
yi = interp1(x,y,xi)
lucreaz asemntor cu interp1, dar este mai rapid dect aceasta, pe spaii neuniforme,
deoarece nu verific intrrile. Pentru folosirea interp1q, x trebuie s fie vector coloan
descresctor monoton i y trebuie s fie un vector coloan sau matrice ,avnd lungimea
liniei length(x).

Pentru exemplificare, se genereaz un traseu sinusoidal prin 11 puncte i
apoi se interpoleaz, pentru o abscis mai fin, cu 41 puncte, cu secvena
x = 0:10; y = sin(x); xi = 0:.25:10;
yi = interp1(x,y,xi);
plot(x,y,'o',xi,yi) ;
gtext('linear'); hold on;
yi = interp1(x,y,xi,'spline');
plot(x,y,xi,yi) ;
xlabel('x') ; ylabel('y') ; gtext('spline');
rezultnd curba din figura 12.6.
Pentru doi vectori, reprezentnd recensmntul din anii 1900 pna n 1990 ai
populaiei SUA, n milioane de oameni,
t = 1900:10:1990;
p = [ 75.995 91.972 105.711 123.203 131.669...
150.697 179.323 203.212 226.505 249.633];
Interpolarea i aproximarea datelor 263
expresia p75=interp1(t,p,1975) interpoleaz ntre datele din recensmnt, pentru a afla
populatia din 1975, obinnd p75= 214.8585.

Fig.12.6. Comparaia ntre metoda 'linear' i 'spline'
Uneori este mai convenabil s gndim interpolarea ca un tabel, unde datele
sunt stocate ntr-un singur tabel. Dac proporiile recensmntului sunt stocate ntr-
un tabel simplu, de 5 pe 2,
tab = [ 1950 150.697
1960 179.323
1970 203.212
1980 226.505
1990 249.633 ]
atunci populatia din 1975, obinut din tabel, din matricea tab, este:
p = interp1(tab(:,1),tab(:,2),1975)
p = 214.8585.

Interpolarea unidimensional, folosind metoda transformatei Fourier
(FFT - Fast Fourier Transform) se realizeaz cu funcia interpft, apelat cu una
dintre sintaxele:
y=interpft(x,n) calculeaz un vector y, ce conine valorile periodice ale
funciei x, alctuit din n egaliti;
y=interpft(x,n,dim) calculeaz doar pentru dimensiunile specificate.
Dac length(x)=m i x este n intervalul dx, atunci noua selecie pentru y este
dy=dx*m/n. De reinut este faptul c n nu poate fi mai mic dect m.
Dac x este o matrice, interpft calculeaz pe coloana lui x, returnnd
matricea y cu acelai numr de coloane ca i x, dar cu n linii.
Funcia interpft folosete metoda FFT. Vectorul originar x este transformat
ntr-un domeniu Fourier, folosind fft i apoi se transform napoi, n mai multe
puncte.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 264
Pentru exemplificare, se consider datele obinute cu funcia cosinus pentru
10 pai pe perioad, |

\
|
=
10
2
cos
k
y

i se interpoleaz pentru un k dublu,
verificnd apoi valorile obinute. Aceasta se realizeaz cu secvena,
k= 0 : 9; x = cos (2*pi*k/10); y1 = interpft (x, 20); k1 = 0 : 19;
y2 = cos (2*pi*k1/20); d = max (y1 - y2) ;
i se obine rezultatul: d = 3.3307e-016.
Diferena maxim ntre valorile interpolate i cele reale este egal cu ordinul
de mrime al celui mai mic numr reprezentabil n calculator.
Interpolarea datelor n dou dimensiuni, se realizeaz cu funcia interp2,
care se apeleaz cu una dintre sintaxe:
ZI=interp2(X,Y,Z,XI,YI) returneaz matricea ZI, ce conine elementele
corespunztoare lui XI i YI i este determinat din interpolarea n dou
dimensiuni, a funciei specifice a matricei X, Y i Z, cu observaia c X i
Y trebuie s fie monotone i regulate, ca i cum ar fi produse de funcia
meshgrid, iar matricele X i Y specific punctele la care se cunoate data
Z, iar n afara intervalului valorile returnate sunt NaN; Xi i YI pot fi
matrice, n cazul n care se returneaz valorile lui Z, corespunzatoare
punctelor (XI(i,j),YI(i,j));
ZI=interp2(Z,XI,YI) presupune X=1:n i Y=1:m, unde [m,n]=size(Z);
ZI=interp2(Z,ntimes) dezvolt Z, prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv, ntimes;
ZI=interp2(Z) comanda este similar cu interp2(Z,1);
ZI=interp2(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode,
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'linear' - interpolare bilinear, care este metod implicit, cnd nu
se specific;
o 'spline' - interpolare spline cubic;
o 'cubic' - interpolare bicubic.
Funcia interp2 realizeaz interpolarea dintre puncte. Dac gsete valori cu
dou dimensiuni a funciei f(x,y) calculeaz valoarea dintre puncte, dup cum se
prezint n figura 12.7.

Fig.12.7. Interpolarea cu interp2
Interpolarea i aproximarea datelor 265
Interpolarea face acelai lucru ca i cutarea n tabel, dar n acest caz tabelul
este tab=[NaN,Y:X,Z] i interp2 folosete valorile XI n X, YI n Y, i se obine ZI,
n Z.
Pentru exemplificare, se interpoleaz maximul unei funcii, cu o reea mai
fin i se prezint n figura 12.8,
[X,Y] = meshgrid(-3:.25:3); Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3); ZI = interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15); hold off
axis([-3 3 -3 3 -5 20]).

Fig.12.8. Interpolarea maximului unei funcii

n variantele anterioare de Matlab, mai existau funciile: interp4, care
interpola dup o lege biliniar, funcia interp5, care interpola dup o lege bicubic
i table2, care realiza cutarea n tabele bidimensionale. n versiunile mai noi,
aceste funcii au fost nlocuite de ctre interp2.

Interpolarea valorilor tridimensionale sau cutarea n tabele
tridimensionale, se realizeaz cu funcia interp3, care se apeleaz cu una dintre
sintaxele:
VI=interp3(X,Y,Z,V,XI,YI,ZI), unde X, Y, Z specific punctele unde este
dat V, interpoleaz pentru a gsi VI, valorile funciilor tridimensionale V,
la punctele vectorilor XI, YI i ZI, iar XI, YI, ZI trebuie s fie vectori de
aceeai dimensiune; argumentele vectorilor care nu au aceeai mrime
sau amndoi sunt vectori linie sau coloan, sunt trecui prin meshgrid,
creat de vectorul Y1, Y2, Y3;
VI=interp3(V,XI,YI,ZI) presupune X=1:N, Y=1:M, Z=1:P, unde
[M,N,P]=size(V);
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 266
VI=interp3(V,ntimes) dezvolt V prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv ntimes;
VI=interp3(V), comanda este similar cu interp3(V,1);
ZI=interp3(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode:
o 'linear' - interpolare bilinear, care este metoda implicit, cnd nu
se specific;
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'cubic' - interpolarea cubic;
o 'spline' - interpolare spline.

n afara domeniului specificat, funcia interp3 returneaz NaN.
Pentru exemplificare, se genereaz cu funcia Matlab flow, profilul unui jet
submersibil ntr-un rezervor infinit, se stabilesc punctele de calcul egal distanate
pe cele trei direcii, cu meshgrid i apoi se vizualizeaz fiecare volum (fagure), cu
funcia slice, fiind redat i n figura 12.9,
[x,y,z,v] = flow(10); [xi,yi,zi] = meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);
vi = interp3(x,y,z,v,xi,yi,zi); % V is 31-by-41-by-27
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]),shading flat;xlabel('x');ylabel('y'); zlabel('z');

Fig.12.9. Interpolarea cu interp3
Interpolarea n spaii n-dimensionale sau cutarea n tabele n-dimensionale
se realizeaz cu funcia interpn, care se apeleaz cu una dintre sintaxele:
VI=interpn(X1,X2,X3,...,V,Y1,Y2,Y3,...) interpoleaz, pentru a afla VI,
valorile funciei multidimesionale V, la punctele Y1, Y2, Y3 etc. i este
chemat cu 2*N+1 argumente;
VI=interpn(V,Y1,Y2,Y3,...) presupune X2=1:size(V,2), X3= 1:size(V,3),
Interpolarea i aproximarea datelor 267
etc.
VI=interpn(V,ntimes) dezvolt V, prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv ntimes,
VI=interpn(V), comanda este similar cu interpn(V,1);
ZI=interpn(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode:
o 'linear' - interpolare bilinear, care este metoda implicit, cnd nu
se specific;
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'cubic' - interpolarea cubic;
o 'spline' - interpolare spline.

Vectorii X1, X2, X3 etc. specific punctele la care este dat V. n afara
intervalului, se returneaz NaN. Vectorii Y1, Y2, Y3 etc. trebuie s aib aceeai
dimensiune. Dac vectorii nu au aceeai mrime sau au orientare mixt (de
exemplu amndoi vectori linie sau vectori coloan), se apeleaz funcia ngrid,
pentru a crea Y1, Y2, Y3 etc.
Funcia interpn lucreaz bine pentru orice tablou n-dimensional, ncepnd
de la n 2.

Interpolarea prin metoda distanei inverse a datelor, funcie de dou
variabile, se realizeaz cu funcia griddata, care se apeleaz:
ZI=griddata(x,y,z,XI,YI) caut o suprafa de forma z=f(x,y,) a datei
oarecare, specificate de spaiul vectorilor (x,y,z) i interpoleaz aceast
suprafa la puncte specificate de (XI,YI), pentru a produce ZI;
[XI,YI,ZI]=griddata(x,y,z,xi,yi) returneaz interpolarea matricei ZI i
calculeaz matricele XI i YI, formate din vectori linie xi i vectori
coloan, yi;
[]=griddata(, 'method') utilizeaz o metod specificat de
interpolare, unde 'method' poate fi:
o 'linear' - metoda implicit, care utilizeaz interpolarea liniar,
bazat pe triunghiuralizarea Delaunay;
o 'cubic' - interpolare cubic bazat pe triunghiuri Delaunay;
o 'nearest' - interpolarea vecinilor celor mai apropiai cu triunghiuri
Delaunay;
o 'v4' -interpolarea cu metoda reelei.
Valorile matricei Zi, corespund elementelor matricelor Xi i Yi. XI, poate fi
un vector linie, iar, n cazul acesta, este specificat o matrice cu coloane constante.
Similar, YI poate fi un vector coloan i atunci, este specificat o matrice cu linii
constante.
Xi i YI pot fi matrice, i, n acest caz, griddata returneaz valorile
corespunztoare punctelor (XI(i,j),YI(i,j)).
Pentru exemplificare, se consider 100 puncte aleatoare ntre -2.0 i +2 i se
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 268
afieaz n figura 12.10 funcia
2 2
y x
e x z

= , exprimat cu secvena,
rand('seed',0); x = rand(100,1)*4-2; y = rand(100,1)*4-2;
z = x.*exp(-x.^2-y.^2);
unde x, y i z sunt acum vectori ce conin date i se definete o reea de date,
ti = -2:.25:2; [XI,YI] = meshgrid(ti,ti); ZI = griddata(x,y,z,XI,YI);
cu care se traseaz graficul,
mesh(XI,YI,ZI), hold; plot3(x,y,z,'o'), hold off;
xlabel('x'); ylabel('y'); zlabel('z').

Fig.12.10. Interpolarea cu griddata

Interpolarea datelor 3-D sau hipersuprafee, se face cu funcia griddata3,
care se apeleaz similar ca i griddata.
De exemplu,
w = griddata3(x, y, z, v, xi, yi, zi)
construiete o hipersuprafa w=f(x,y,z) de date, n spaiul definit de vectorii (x, y, z, v)
i interpoleaz aceast hipersuprafa, n puncte specificate de (xi,yi,zi), pentru a
produce w, care este de aceeai mrime ca xi, yi i zi. Punctele (xi,yi,zi) sunt de obicei
uniforme, fiind realizate cu meshgrid .

Interpolarea datelor n-D sau n-suprafee, se face cu funcia griddatan, care
se apeleaz similar ca i griddata. Cu sintaxa,
yi = griddatan(X, y, xi)
se determin o hipersuprafa y=f(X) de date n spaiul vectorilor (X,y) i interpoleaz
aceast hipersuprafa, n punctele specificate de xi, pentru a determina yi. Punctele
specificate xi, pot fi neuniforme.
X, este de dimensiunea m-n, reprezentnd m puncte n spaiul n-D. Vectorul
y este de dimensiunea a m-a, reprezentnd m valori ale hipersuprafeei f(X).
Interpolarea i aproximarea datelor 269
Vectorul xi este de mrimea p-n, reprezentnd p puncte n spaiul n-D. Vectorul yi,
este de lungime p, ce aproximeaz valorile lui f(xi). Hipersuprafeele trec
ntotdeauna prin punctele (X,y). De cele mai multe ori, xi este o reea uniform,
realizat prin meshrid.
12.3. Aproximarea datelor prin regresie polinomial
Pentru ca o aproximare oarecare s fie considerat cea mai bun, suma
ptratelor distanelor de la fiecare punct, la curba aproximat, trebuie s fie
minim. Cu aceast condiie, este posibil ca nici un punct al setului de date s nu se
gaseasc pe curba aproximat, ceea ce separ net, aproximarea de interpolare, la
care unele puncte sunt situate pe curb.
La baza majoritii metodelor de aproximare st metoda celor mai mici
ptrate, care consider c cea mai bun aproximare este aceea pentru care suma
ptratelor erorilor este minim,
( ) ( )

=
= =
n
i
c i d i
x x x
1
2
, ,
min
unde
d i
x
,
, sunt valorile date (cunoscute), iar
c i
x
,
sunt valorile calculate.
Regresia polinomial este o aproximare a unui set de date printr-un polinom
de forma:


+ + + + = =
n
i
n n
n n i n
a x a x a x a x a x p
0
1
1
1 0
... , ) (
Dac setul de date are n elemente, toate datele se afl pe curba de
aproximare. Pentru un grad al polinomului mai mic dect numrul de date,
aproximarea este cu att mai bun, cu ct gradul polinomului este mai apropiat de
numrul de date. Utilizarea unui polinom de aproximare, cu grad mai mare dect
setul de date, poate conduce la erori de aproximare considerabile.
Determinarea celei mai bune aproximri a unui set de date (x, y), cu un
polinom de ordin n, folosete funcia polyfit i se apeleaz cu una dintre sintaxele:
p=polyfit(x,y,n) gsete coeficienii polinomului p(x), de grad n, care se
potrivete cu datele de intrare p(x(i)), n punctul y (i), iar rezultatul p,
este un vector linie, de lungime n+1, coninnd coeficienii polinomului
n ordine descresctoare a puterilor,
( )
1
1
2 1
...
+

+ + + + =
n n
n n
p x p x p x p x p
[p,S]=polyfit(x,y,n) restituie coeficienii p i o structur S, pentru a se
folosi cu funcia polyval, n scopul obinerii erorii estimate care, dac
erorile din datele de intrare y sunt independente de constanta variabilei,
produce erori ce conin cel puin 50 % din cele prezise;
[p,S,mu]=polyfit(x,y,n) gsete ceoficienii polinomului n
2
1


=
x
x ,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 270
unde
1
= mean(x) i
2
= std (x), mu este un vector cu dou elemente
[
1
,
2
], iar aceste transformri de centrare i gradare mbuntesc
proprietile numerice, att ale polinomului, ct i al algoritmului de
ajustare.

Pentru exemplificare, se consider ajustarea funciei de eroare, erf(x), printr-un
polinom n x. nti, se produce un vector de x puncte, aflat n intervalul [0, 2.5], iar apoi
se calculeaz funcia erf (x) n aceste puncte,
x = (0: 0.1: 2.5)'; y = erf(x);
Coeficienii polinomului de gradul 6 sunt calculai cu p=polyfit(x,y,6),
rezultnd p = [ 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004], care
sunt 7 coeficieni, iar cu acetia polinomul este:
0004 . 0 1064 . 1 1471 . 0 7435 . 0 4217 . 0 0983 . 0 0084 . 0 ) (
2 3 4 5 6
+ + + + = x x x x x x x f
Pentru a se vedea ct de bine este ajustat, se calculeaz polinomul n
punctele iniiale, cu funcia f = polyval(p,x), sau n Matlab:
f=p(1).*x.^6+p(2).*x.^5+p(3).*x.^4+p(4).*x.^3+p(5).*x.^2+p(6).*x+p(7).
Se formeaz un tabel, care afieaz datele ajustarea i eroarea, cu
instruciunea,
table=[x y f y-f],
rezultnd :
table = [ 0 0 0.0004 -0.0004
0.1000 0.1125 0.1119 0.0006
0.2000 0.2227 0.2223 0.0004
0.3000 0.3286 0.3287 -0.0001
0.4000 0.4284 0.4288 -0.0004
0.5000 0.5205 0.5209 -0.0004
0.6000 0.6039 0.6041 -0.0002
... ... ... ...
1.9000 0.9928 0.9925 0.0003
2.0000 0.9953 0.9951 0.0002
2.1000 0.9970 0.9969 0.0001
2.2000 0.9981 0.9982 -0.0001
2.3000 0.9989 0.9991 -0.0003
2.4000 0.9993 0.9995 -0.0002
2.5000 0.9996 0.9994 0.0002]
Deci, n acest interval, ajustarea este bun ntre trei i patru cifre. n afara
acestui interval, graficul arat o deteriorare rapid a comportrii polinomului, dup
cum se observ din figura 12.11, realizat cu secvena Matlab:
x=(0: 0.1: 5)'; y=erf(x); f=polyval(p,x); plot(x,y,'o',x,f,'-') ; axis([0 5 0 2]);
xlabel('x'); ylabel('y'); gtext(y); gtext('y'); gtext('f').
Interpolarea i aproximarea datelor 271

Fig.12.11. Interpolarea cu polyfit
Algoritmul de realizare a funciei polifyt formeaz matricea Vandermonde,
ale crei elemente sunt puteri ale lui x,

j n
i j i
x v

=
,

apoi folosete operatorul \ pentru a rezolva ecuaia V
p
y.
12.4. Analiz geometric utilizat n interpolare
Dup cum am artat anterior, o serie de funcii de interpolare, de dou sau
mai multe dimensiuni, utilizeaz triunghiularizarea Delaunay.
Fiind dat un set de puncte, triunghiularizarea Delaunay este un set de linii,
care conecteaz fiecare, punct cu punctul su vecin, fiind legat de diagrama
Voronoi, n sensul c cercul care delimiteaz triunghiul Delaunay are centrul n
vrful poligonului Voronoi, dup cum se observ din figura 12.12.

Fig.12.12. Triunghiul lui Delaunay i poligonul Voronoi
Funcia delaunay se apeleaz cu
TRI = delaunay (x, y)
i, pentru punctele date, definite de vectorii x i y, restituie un set de triunghiuri astfel
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 272
nct, nici un punct s nu fie coninut n oricare dintre triunghiurile care este delimitat
de cerc. Pentru fiecare linie a matriciei m x 3, TRI definete un astfel de triunghi i
conine indicii, n x i n y. Dac punctele sunt coliniare sau x este zero, triunghiurile nu
pot fi calculate, iar delaunay restituie o matrice goal.
Pentru vizualizarea triunghiurilor Delaunay se folosete una dintre funciile,
triplot - afieaz triunghiurile definite de matricea TRI de m x 3;
trisurf - afieaz fiecare triunghi definit de matricea TRI, m x 3, ca o
suprafa n spaiul 3-D, iar pentru a vedea un spaiu 2-D, se pot da
valori constante pentru dimensiunea a 3-a unui vector, ca de exemplu,
trisurf(TRI,x,y,zeros(size(x)));
trimesh - afieaz fiecare triunghi definit de matricea TRI de m x 3, ca o
reea n spatiul 3- D, iar pentru a vizualiza o suprafa n spatiul 2-D, se
poate introduce un vector, cu unele valori constante, pentru dimensiunea
a 3-a, ca de exemplu trimesh(TRI,x,y,zeros(size(x))).

Pentru exemplificare, se traseaz triunghiularizarea Delaunay pentru 10
puncte aleatoare i se compar cu diagrama Voronoi, realizat pentru aceleai
puncte, redat n figura 12.13 i realizat cu secvena Matlab:
rand('state',0); x = rand(1,10); y = rand(1,10);
TRI=delaunay(x,y); subplot(1,2,1);
trimesh(TRI,x,y,zeros(size(x))); view(2);
axis([0 1 0 1]); hold on; plot(x,y,'o'); set(gca,'box','on');hold off
[vx, vy] = voronoi(x,y,TRI); subplot(1,2,2);
plot(x,y,'r+',vx,vy,'b-'); axis([0 1 0 1])


Fig.12.13. Comparaie ntre triunghiul lui Delaunay i poligonul Voronoi
Interpolarea i aproximarea datelor 273
Realizarea unor tetraedre Delaunay n spaiu 3-D, se face cu funcia
delaunay3, care se apeleaz cu sintaxa:
TES = delaunay3(x,y,z)
i se restituie o matrice TES, n care fiecare rnd conine indicii punctelor n (x, y, z),
care realizeaz un tetraedu n spaiul tridimensional discretizat (x, y, z). TES este o
matrice de dimensiune n-fee-x-4, unde n-fee este numrul faetelor n
discretizare, iar x, y i z sunt vectori de mrimi egale. Dac punctele date sunt coliniare
sau dac x, y sau z definesc un numr insuficient de puncte, triunghiurile nu pot fi
calculate, iar funcia delaunay3 restituie o matrice goal.

Discretizarea Delaunay n dimensional se realizeaz cu funcia delaunayn,
apelat cu
T = delaunayn(X),
care calculeaz un set de discretizri n-dimensionale, astfel nct nici un punct din X s
nu fie coninut n vreo sfer circumscris acestuia. X este o matrice m-x-n, reprezentnd
m puncte n spatiul n- D, iar fiecare coloan a lui T conine indicii din X.

Gsirea triunghiularizii Delaunay pentru punctele vecine se face cu funcia
dsearch, care se poate apela:
K=dsearch (x,y TRI,xi,yi) cnd restituie indicii din x i y ai celui mai
apropiat punct de punctul (xi, yi), avnd nevoie de o triunghiularizare
TRI a punctelor x, y, obinut cu funcia delaunay, iar dac xi i yi sunt
vectori, atunci K este un vector de aceeai mrime;
K=dsearch(x,y,TRI,xi,yi,S) folosete o matrice S, n loc de a calcula de
fiecare dat,
S = sparse(TRI(:,[1 1 2 2 3 3]),TRI(:,[2 3 1 3 1 2]),1,nxy,nxy),
unde nxy = prod(size(x))

Cutarea triunghiularizrii Delaunay pentru punctele vecine din spaiul n-
D, se realizeaz cu funcia dsearchn, care se apeleaz cu:
k=dsearchn(X,T,XI) sau k=dsearchn (X,T,XI, outval ) restituie indicii k,
ai celui mai apropiat punct n X, pentru fiecare punct n XI, numai dac
un punct se situeaz n afara nfurtoarei convexe, iar dac XI (J,:)
este n afara nfurtoarei convexe, atunci lui k(J,) i este atribuit o
valoare exterioar scalar dubl (Inf este adesea folosit pentru valori
exterioare);
k=dsearchn(X,XI ) realizeaz cutarea fr a folosi discretizarea cu
tetraedre i se realizeaz mai repede, cu mult mai puin memorie;
[k,d]=dsearchn(X, ) restituie, de asemenea, distana d, pn la cel mai
apropiat punct, D fiind un vector coloan de lungime p.

Cutarea triunghiului Delaunay nchis se realizeaz cu funcia tsearch, care
se apeleaz,
T=tsearch(x,y,TRI,xi,yi) restituie un indice n rndurile TRI pentru fiecare
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 274
punct din xi, yi i restituie NaN, pentru toate punctele care se afl n afara
nfurtoarei convexe. Necesit o triunghiularizare TRI, cu funcia Delaunay a
punctelor x, y.

Cutarea triunghiurilor Delaunay n n- D se face cu funcia tsearchn, care se
apeleaz:
t=tsearchn(X,TES,XI) restituie indicii t, ai discretizrii, care nchide TES
pentru fiecare punct din XI, cu X o matrice m-x-n, reprezentnd m
puncte n spaiul n-D, iar XI este o matrice px-n, reprezentnd p puncte
n spaiul n-D;
[t,P]=tsearchn(X,TES,XI) restituie, de asemenea, o coordonat P, din
XI, care este o matrice de p pe n+1.

nfurarea convex a punctelor din spaiu se realizeaz cu funcia
convhull, care se apeleaz:
K=convhull(x,y) restituie indicii din x i vectorii y, ai punctelor din
nfurtoarea convex;
[K,A]=convhull(x,y) restituie i aria, A, a nfurtoarei convexe.

Pentru a trasa graficul ieirilor funciei convhull, se utilizeaz funcia plot,
rezultnd figura 12.14, realizat cu secvena:
xx = -1:.05:1; yy=abs(sqrt(xx)); [x,y]=pol2cart(xx,yy);
k = convhull(x,y); plot(x(k),y(k),'r-',x,y,'b+') ; xlabel('x') ; ylabel('y').

Fig.12.14. nfurtoarea convex cu convhull
nfurtoarea convex n spaiul n-D se realizeaz cu funcia convhulln,
care se apeleaz:
K=convhulln(X) restituie indicii K, ai punctelor din X, care cuprind
Interpolarea i aproximarea datelor 275
faetele nfurtoarei convexe a lui X, cu X o matrice m-x-n,
reprezentnd m puncte n spaiul n-D, iar dac nfurtoarea convex
are un numr p de faete, atunci K este de dimensiunea p-x-n;
[K,V]=convhulln(X) restituie, de asemenea, volumul V al nfurtoarei
convexe.

Se consider un set de puncte coplanare P. Pentru fiecare punct P
x,
din setul
P, se poate trasa o frontier, care s cuprind toate punctele intermediare care se
gasesc mai aproape de P
x
,

nu i de P. Acest gen de frontier se numete poligon
Voronoi, iar toate poligoanele Voronoi, pentru un anumit set de puncte, formeaz
diagrama Voronoi.
Diagrama Voronoi se realizeaz cu funcia voronoi, care se poate apela cu
una dintre sintaxele:
voronoi(x,y) traseaz celulele de delimitare a diagramei Voronoi, pentru
punctele x, y, iar celulele care conin un punct la infinit, nu sunt limitate
i nu pot fi trasate;
voronoi(x,y,TRI) folosete triunghilarizarea dat TRI, fr a o calcula
prin intermediul funciei delaunay;
voronoi(,'LineSpec') traseaz diagrama cu culori i stil, al liniilor
specificate;
[vx,vy]=voronoi(...) restituie capetele finite ale marginilor Voronoi n vx
i vy, astfel nct plot(vx,vy,'-',x,y,'.') s creeze diagrama Voronoi.

Pentru exemplificare, se folosete funcia voronoi, pentru a trasa diagrama
Voronoi pentru 10 puncte generate aleator, redat n figura 12.15:
rand('state',5); x=rand(1,10); y=rand(1,10); voronoi(x,y); xlabel('x'); ylabel('y').

Fig.12.15. Diagrama Voronoi trasat cu funcia fr argumente de ieire
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 276
Trasarea diagramei Voronoi prin utilizarea capetelor finite ale marginilor
Voronoi, pentru aceleai 10 puncte, se realizeaz cu secvena:
rand('state',5); x = rand(1,10); y = rand(1,10); [vx, vy] = voronoi(x,y);
plot(x,y,'r+',vx,vy,'b-'); axis equal; xlabel('x'); ylabel('y'),
i este redat n figura 12.16.

Fig.12.16. Diagrama Voronoi trasat prin utilizarea capetelor finite

Trasarea diagramei Voronin n spaiul n-D se realizeaz cu funcia
voronoin, care se apeleaz cu,
[V,C]=voronoin(X)
care restituie capetele Voronoi V i celulele Voronoi C, ale diagramei Voronoi
corespunztoare lui X, unde V, este un vector n-dimensional, iar C, este o celul vector,
unde fiecare element conine indicii din V ai capetelor, corespunztoare celulei
Voronoi. X este o matrice de dimensiune m-x-n, reprezentnd m puncte n n-D, unde n
> 1 i m > = n+1.
Prima linie din V, este un punct la infinit. Dac orice indice dintr-o celul
care aparine unui ir de celule este 1, atunci celula Voronoi corespunztoare
conine primul punct n V, un punct care tinde la infinit. Acest lucru nseamn c,
celula Voronoi nu este limitat.

Identificarea punctelor din cadrul unui domeniu poligonal se realizeaz cu
funcia inpolygon, care se apeleaz cu sintaxa,
IN=inpolygon(X,Y,xv,yv),
i restituie o matrice IN, de aceai dimensiune cu X i Y. Fiecrui element din IN i este
atribuit una dintre valorile 1, 0.5, 0, depinznd de faptul, dac punctul (X(p,q),Y(p,q))
este n interiorul domeniului poligonal, ale crui limite sunt specificate de vectorii xv i
yv. n particular, IN(p,q)=1, dac (X(p,q),Y(p,q)) este n interiorul poligonului,
IN(p,q)=0.5, dac (X(p,q),Y(p,q)) este pe frontiera poligonului i IN(p,q)=0, dac
Interpolarea i aproximarea datelor 277
(X(p,q),Y(p,q)) se situeaz n afara poligonului.
Pentru identificarea punctelor n cadrul unui spaiu poligonal definit de
L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)';
se utilizeaz secvena,
xv = [xv ; xv(1)]; yv = [yv ; yv(1)];
x = randn(250,1); y = randn(250,1);
in = inpolygon(x,y,xv,yv);
plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'bo'); xlabel('x') ; ylabel('y'),
rezultnd figura 12.17.

Fig.12.17. Identificarea punctelor n cadrul unui domeniu poligonal

Funcia rectint returneaz aria dreptunghiular de intersecie i se apeleaz
cu sintaxa:
area = rectint(A,B),
unde cele dou dreptunghiuri intersectate sunt specificate cu A i B.
n cazul n care A si B specific doar un dreptunghi, atunci aria de intersecie
rezultat va fi un scalar.
De asemenea, A i B pot fi matrice, unde fiecare linie reprezint un vector de
poziie. n acest caz, aria este o matrice, ale crei elemente sunt date de intersecia
tuturor dreptunghiurilor specificate de A, cu toate dreptunghiurile specificate de B.
Dac A este o matrice de dimensiune n-x-4 i B de m-x-4, atunci aria este o matrice
de n-x-m, unde aria (i, j) este aria interseciilor dreptunghiurilor specificate de linia
i, a matricei A i linia j, a matricei B.
Un vector de poziie, este un vector de 4 elemente [x, y, width, height], unde
punctul definit de x i y specific un col al dreptunghiului, iar width i height
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 278
definesc mrimea unitilor de pe axele x, respectiv y.

Funcia polyarea restituie aria unui poligon i se apeleaz cu una dintre
sintaxele:
A = polyarea(X,Y) restituie aria poligonului specificat de limitele
vectorilor X i Y. Dac X i Y sunt matrice de aceeai dimensiune,
atunci funcia polyarea restituie aria poligoanelor definite de coloanele
X i Y. Dac X i Y sunt matrice multidimensionale, polyarea va restitui
aria poligoanelor din prima dimensiune, nesingular a lui X i Y.
A = polyarea(X,Y,dim) opereaz de-a lungul dimensiunii specificat de
scalarul dim.

Pentru determinarea ariei unui poligon definit de,
L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)';
se utilizeaz secvena,
xv = [xv ; xv(1)]; yv = [yv ; yv(1)];
A = polyarea(xv,yv);
plot(xv,yv); title(['Area = ' num2str(A)]); axis image
rezultnd figura 12.18.

Fig.12.18. Determinarea ariei unui poligon utiliznd funcia polyarea

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