algebra numerica liniara

31
7. ALGEBRĂ NUMERICĂ LINIARĂ 7.1. Analiză matriceală De notat că, în MATLAB, indicii matricei încep întotdeauna cu 1 şi nu cu 0; de aici rezultă că elementele matricei A(1, 1), B(1, 1) şi C(1, 1) corespund mulţimilor matematice (elementele matricelor) A(0, 0), B(0, 0) şi C(0,0). 7.1.1. Urma unei matrice Urma unei matrice A, A Ur , este, prin definiţie, suma elementelor de pe diagonala principală, = = n i i i a 1 , Ur A . Urma produsului a două matrice este independentă de ordinea factorilor, ) ( Ur ) ( Ur , 1 , 1 , 1 , 1 A B B A = = = = = = = j i n i i j n j i j n j j i n i b b b a . De meţionat că urma unei matrice este nealterată de o transformare ortogonală şi că aceasta este totodată şi suma valorilor proprii ale lui A. În Matlab, se calculează cu funcţia trace(A), care este similară cu sum(diag(A)). Considerând matricea A=[1 2 3; 4 5 6; 7 8 9], atunci urma acesteia, calculată cu trace(A), este 15, la fel ca şi cu sum(diag(A)). 7.1.2. Calculul normelor vectorilor şi ale matricelor Conceptele de normă vectorială, normă matriceală şi rază spectrală a unei matrice, joacă un rol important în analiza matriceală. Prin definiţie, norma euclidiană sau lungimea vectorului x este ( ) 1/2 n 1 i 2 i 1/2 x = = = x x x T unde x şi x T sunt, prin definiţie: [ ] n T n x x x x x x ... , ... 2 1 2 1 = = x x . Normele vectorilor şi ale matricelor se calculează cu funcţia norm, apelată cu una dintre sintaxele:

Upload: chindris-ioan

Post on 10-Aug-2015

69 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algebra Numerica Liniara

7. ALGEBRĂ NUMERICĂ LINIARĂ

7.1. Analiză matriceală

De notat că, în MATLAB, indicii matricei încep întotdeauna cu 1 şi nu cu 0; de aici rezultă că elementele matricei A(1, 1), B(1, 1) şi C(1, 1) corespund mulţimilor matematice (elementele matricelor) A(0, 0), B(0, 0) şi C(0,0).

7.1.1. Urma unei matrice

Urma unei matrice A, AUr , este, prin definiţie, suma elementelor de pe diagonala principală,

∑=

=n

i

iia1

,Ur A .

Urma produsului a două matrice este independentă de ordinea factorilor,

)(Ur )(Ur ,1

,1

,1

,1

ABBA ⋅=⋅=⋅=⋅ ∑∑∑∑====

ji

n

i

ij

n

j

ij

n

j

ji

n

i

bbba .

De meţionat că urma unei matrice este nealterată de o transformare ortogonală şi că aceasta este totodată şi suma valorilor proprii ale lui A.

În Matlab, se calculează cu funcţia trace(A), care este similară cu sum(diag(A)).

Considerând matricea A=[1 2 3; 4 5 6; 7 8 9], atunci urma acesteia, calculată cu trace(A), este 15, la fel ca şi cu sum(diag(A)).

7.1.2. Calculul normelor vectorilor şi ale matricelor

Conceptele de normă vectorială, normă matriceală şi rază spectrală a unei matrice, joacă un rol important în analiza matriceală.

Prin definiţie, norma euclidiană sau lungimea vectorului x este

( )1/2n

1i

2i

1/2x

=⋅= ∑

=

xxx T

unde x şi xT sunt, prin definiţie:

[ ]nT

n

xxx

x

x

x

... ,... 21

2

1

=

= xx .

Normele vectorilor şi ale matricelor se calculează cu funcţia norm, apelată cu una dintre sintaxele:

Page 2: Algebra Numerica Liniara

Algebră numerică liniară 139

n=norm(X) sau n=norm(X,p), unde p=1, 2, inf, sau fro.

Pentru o matrice, X, sunt definite următoarele tipuri de norme: � norma 1 a lui X, respectiv cea mai mare sumă a elementelor de pe

coloană, Nj1cu ,xmaxXN

1kjk ≤≤

= ∑

=

, calculată cu funcţia

norm(X,1), care este egală cu max(sum(abs((X)))); � norma 2, sau raza spectrală a lui X, definită prin aceea că toate valorile

proprii (reale, pentru matrice real simetrice şi complexe, pentru matrice real nesimetrice) se înscriu într-un cerc, de rază egală cu maximul valorilor proprii în modul, într-un plan (real sau complex), cu centrul în origine, respectiv ( ) Ni1cu ,λmaxXρX i2

≤≤== , unde ρ este raza

spectrală, iar iλ sunt valorile singulare, calculată cu funcţia norm(X) sau norm(X,2), egală cu max(svd(X));

� norma infinită a lui X, sau cea mai mare sumă a elementelor de pe

linie, respectiv Nk1cu ,xmaxXN

1jjk ≤≤

= ∑

=∞

, calculată cu

funcţia norm(X,inf), egală cu max(sum(abs((X')))) ; � norma Frobenius, calculată cu funcţia norm(X,’fro’), definită cu

relaţia 2

NN

2

22

2

11

N

1kj,jkF

...xX xxx +++=

= ∑

=

şi egală cu

sqrt(sum(diag(X'*X))).

Pentru cazul matricelor rare (sparse) sau foarte mari, se recomandă utilizarea funcţiei normest(X), în locul funcţiei norm(X), sau norm(X,2). Această funcţie se poate utiliza sub forma [nrm,cnt] = normest(X,tol), unde nrm – norma, cnt – numărul de iteraţii, iar tol – eroarea relativă, având valoarea implicită 10-6.

Considerând matricea X=[1 2 3; 4 5 6; 7 8 9], atunci: norm(X)= 16.8481; norm(X,1)=18; norm(X,2)= 16.8481; norm(X,'fro')= 16.8819; norm(X,inf)=24, iar [nrm,cnt] = normest(X,1e-9) conduce la nrm=16.8481, cnt=4.

Pentru un vector V, pot fi definite următoarele tipuri de norme: � norma, norma 2 sau lungimea vectorului definită de relaţia

2

N

2

2

2

1

2N

1kk2

V...VVVV +++=

= ∑

=

se calculează cu

funcţia norm(V) sau norm(V,2) ; � norma de gradul p sau lungimea de ordinul p, definită cu relaţia

Page 3: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 140

p p

N

p

2

p

1p

pN

1kkp

V...VVVV +++=

= ∑

=

, se calculează cu

norm(V,p), egală cu sum(abs(V).^P)^(1/P);

� valoarea maximă în modul, respectiv ( ) Nk1 ,VmaxV k ≤≤=∞

,

este calculată cu funcţia norm(V,inf) ;

� valoarea minimă în modul, respective ( ) Nk1 ,VminV k ≤≤=∞−

,

este calculată cu funcţia norm(V,-inf) .

Considerând vectorul V=[-10 –12 0 11 15 25], atunci: norm(V)=34.8569; norm(V,2)= 34.8569; norm(V,3)= 28.4630; norm(V,inf)=25; norm(V,-inf)=0.

7.1.3. Determinantul unei matrice

O matrice pătrată este o matrice care are numărul de linii egal cu numărul de coloane. Dacă tipul său este {n, n}, se spune că matricea este de ordinul n. Fie o matrice pătrată de ordinul n, [ ]

ijaA = , cu elementele în R (sau C).

Determinantul format cu elementele maticei [ ]ijaA = , păstrându-le

poziţia, se numeşte determinantul matricei A şi se notează cu

[ ]ijij aAaA det,det,, , fiind calculat în Matlab cu funcţia det(A).

Considerând matricele A=[1 2; 3 4] şi B=[1 2 3; 4 5 6; 7 8 9], determinanţii acestora sunt: det(A)=-2 şi det(B)=0.

O matrice B se numeşte singulară dacă det(B)=0, iar dacă determinantul det(A)≠0, matricea A este nesingulară (sau nedegenerată).

Determinantul produsului a două matrice pătrate, de ordinul n, este egal cu produsul determinanţilor celor două matrice,

det(A*B)=det(B*A)=det(A)*det(B) .

7.1.4. Rangul unei matrice

Considerăm o matrice A, dreptunghiulară, mxn şi p, un număr natural,

astfel încât, nmp ,≤ . Dacă alegem din A, p linii piii ,...,, 21 şi p coloane

pjjj ,...,, 21 , oarecare, obţinem, înlăturând elementele matricei care nu se găsesc pe liniile şi coloanele alese, o matrice pătrată, M, de ordinul p

( ),min( ,,...,2,1 nmqqp == ,

Page 4: Algebra Numerica Liniara

Algebră numerică liniară 141

=

pppp

p

p

jijiji

jijiji

jijiji

aaa

aaa

aaa

M

...

............

...

...

21

22212

12111

.

În modul acesta, cu liniile şi coloanele matricei A se poate forma un număr

de ( ) ( )!!!!

!!

pnppmp

nmCC p

n

n

m−−

= matrice de ordinul p. Determinanţii acestor

matrice se numesc determinanţii de ordinul p ai matricei A. Dacă 0A ≠ , atunci nu toţi aceşti determinanţi sunt nuli.

Se observă că, dacă toţi determinanţii de ordinul s sunt nuli, atunci toţi determinanţii de ordin superior lui s sunt nuli, deoarece, dezvoltând determinanţii de ordinul s+1, de exemplu, după o linie sau coloană, coeficienţii elementelor respective sunt determinanţi de ordinul s, care sunt nuli. Dacă 0A ≠ , există un număr ),min( nmqr =≤ , astfel încât cel puţin un determinant al matricei A, de ordinul r, este diferit de zero şi toţi determinanţii de ordin r+1 sunt nuli. Numărul

r, care îndeplineşte această condiţie, se numeşte rangul matricei A. Dacă A=0, rangul matricei A este zero, r=0.

Calculul rangului se efectuează cu funcţia r=rank(A) sau r=rank(A,tol), unde tol este eroarea relativă, având valoarea implicită 10-6 sau tol = max(size(A)) * norm(A) * eps.

De exemplu, dacă A=[2 3 1 4 -1; 1 4 -2 1 6; 1 -1 3 3 -7], atunci rangul matricei este rank(A)=2. Toţi determinanţii de ordinul trei sunt nuli, deoarece, dacă în matricea A scădem linia a doua din linia întâi, obţinem linia a treia. Această operaţie, fiind efectuată în toţi determinanţii de ordinul trei, arată că toţi sunt nuli. Rangul matricei este doi, deoarece matricea formată cu primele două linii şi coloane, [2 3; 1 4], are determinantul diferit de zero.

Rangul matricei este egal cu ordinul determinantului.

7.1.5. Matricea transpusă

Considerând [ ]ijaA = , o matrice nm × , deci njmi ,...2,1 ,,...,2,1 == ,

atunci, prin definiţie, matricea care se obţine din A, prin înlocuirea liniilor cu coloanele de acelaşi rang, se numeşte matricea transpusă şi se notează cu At sau AT, iar în Matlab se calculează şi se notează cu A' sau transp(A). Pentru transpusa neconjugată, se utilizează transpose(A).

Din definiţie rezultă că [ ]jit aA = , minj ,...,2,1 ,,...2,1 == . Dacă,

B = [ 2 3 1 4 -1 1 4 -2 1 6 1 -1 3 3 -7 ],

Page 5: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 142

atunci: B' = [ 2 1 1 3 4 -1 1 -2 3 4 1 3 -1 6 -7]. O matrice pătrată A, se spune că este simetrică dacă elementele simetrice

faţă de diagonala principală sunt egale, jiij aa = şi că este antisimetrică dacă

jiij aa −= . Prin urmare:

� o matrice simetrică este egală cu transpusa sa, deoarece jiij aa = ;

� într-o matrice antisimetrică, elementele de pe diagonala principală sunt nule, 0=iia (pentru a putea satisface definiţia jiij aa −= ) ;

� transpusa unei matrice antisimetrică este opusa matricei iniţiale, A'= -A; � dacă A'= -A atunci, matricea A este antisimetrică ; � traspusa transpusei este matricea iniţială, (A') ' = A ; � transpusa sumei a două matrice este suma transpuselor, (A+B) '=A'+B' ; � transpusa produsului a două matrice este (A*B) '= B' * A'; � orice matrice pătrată poate fi considerată ca suma a două matrice, una

simetrică, cealaltă antisimetrică, iar această descompunere este unică.

Dată fiind o matrice, cu un număr oarecare de linii sau coloane, ale cărei elemente sunt numere reale sau complexe, conjugata sa este matricea formată prin înlocuirea fiecărui element cu imaginarul său conjugat. În matematica clasică, se utilizează notaţia A*.

Matricea adjunctă a unei matrice este conjugata transpusei sale. Conjugata unei matrice este obţinută prin înlocuirea fiecărui element cu imaginarul său conjugat.

În general, un număr complex, Z, este scris ca suma dintre o parte reală şi una imaginară,

Z = x + i*y = real(Z) + i*imag(Z) astfel încât, conjugatul lui Z este:

conj(Z) = x - i*y = real(Z) - i*imag(Z) De exemplu, pentru matricea X, X = [1+i 2-i ; 3+2*i 1-2*i]

conjugata este, conj(X) = [1 - i 2 + i; 3 – 2 i 1 + 2 i].

Se numeşte matrice reală, o matrice care are toate elementele numere reale. Ţinând seama de cele anterioare, rezultă că o matrice reală este egală cu

conjugata sa şi, reciproc, dacă o matrice este egală cu conjugata sa, matricea este reală.

Matricea conjugată are următoarele proprietăţi evidente:

Page 6: Algebra Numerica Liniara

Algebră numerică liniară 143

• conj(X+Y)=conj(X)+conj(Y) - conjugata sumei a două matrice este egală cu suma conjugatelor;

• conj(X*Y)=conj(X)*conj(Y) – conjugata produsului este produsul conjugatelor;

• transpose(conj(X))= conj(transpose(X)) şi totodată conj(X')= (conj(X))'; • conj(conj(X)) = X.

Matricea adjunctă a unei matrice este conjugata transpusei sale. Dacă, X =[ 1.0000 + 1.0000i 2.0000 - 1.0000i 3.0000 + 2.0000i 1.0000 - 2.0000i ]

transpusa acestei matrice (neconjugată) este, XT=transp(X) = [ 1.0000 + 1.0000i 3.0000 + 2.0000i 2.0000 - 1.0000i 1.0000 - 2.0000i ] iar conjugate transpusei este, Xa=conj(XT)=conj(transp(X)) = X' = [ 1.0000 - 1.0000i 3.0000 - 2.0000i 2.0000 + 1.0000i 1.0000 + 2.0000i ] care este matricea adjunctă, notată X+, care se vede că în Matlab este: X+ = X'.

Din proprietăţile matricelor transpuse şi ale matricelor conjugate, rezultă proprietăţile:

• (X+Y)' = X'+Y' ; • (X*Y)' = Y'*X' ; • (X')' = X .

Se numeşte matrice hermitică sau autoadjunctă, o matrice pătrată care este egală cu adjuncta sa, Z+ =Z = Z' . În particular, matricea hermitică are toate elementele de pe diagonala principală reale, iar cele simetrice faţă de această diagonală sunt imaginar conjugate.

Următoarele matrice sunt hermitice sau autoadjuncte: Z=[ 1 1-i ; 1+i -3], ZZ=[3 -i 2+3*i ; i 0 5 ; 2-3*i 5 1]. Principalele proprietăţi ale matricelor hermitice sunt:

• dacă o matrice hermitică are toate elementele reale, matricea este simetrică, adică aij = aji ;

• suma a două matrice hermitice este tot o matrice hermitică; • produsul a două matrice hermitice este tot o matrice hermitică, dacă şi

numai dacă, cele două matrice sunt permutabile.

7.1.6. Matricea inversă şi pseudoinversă

Pentru o matrice pătrată [ ]ijaA = , de ordinul n, nesingulară, deci det(A)≠0,

matricea de ordinul n este

Page 7: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 144

=

=−

A

A

A

A

A

A

A

A

A

A

A

A

A

AA

A

A

A

A

A

Aji

nnnn

n

n

det

det...

detdet

............det

...detdet

det...

detdet

21

22212

12111

1 ,

unde jiA este complementul algebric al lui ija , din determinantul [ ]ija şi se numeşte

matricea inversă a matricei A, fiind notată cu A-1. Notarea matricei inverse cu A-1 este justificată prin faptul că, în compunerea transformărilor A şi A-1, acestea se comportă ca puterile unui număr real sau complex, dacă convenim să notăm transformarea unitate i, cu A0, A-1*A = A*A-1 = A0 = I = [1] , respectiv, inv(A)*A = A*inv(A) = ones(size(A)) .

Principalele proprietăţi ale matricei inverse sunt: • A-1*A = A*A-1 = A0 = I = [1] - produsul dintre o matrice şi inversa sa este

egal cu matricea unitate; • reciproc, dacă avem două matrice, astfel încât A*B = I =[1], atunci una

este inversa celeilalte; • det(A-1) = det(inv(A)) = 1/det(A) - inversa unei matrice proprii este tot o

matrice proprie; • (A-1)-1 = inv(inv(A)) = A - inversa matricei inverse este matricea iniţială; • (A*B)-1 = B-1 * A-1 , respectiv inv(A*B) = inv(B)*inv(A)

Fie matricele, A = [ cos (pi/3) -sin (pi/3) ; sin (pi/3) cos (pi/3) ]; B= [ 1 -1 i ; 0 1 0 ; i 3 1] ,

transpusele sunt, A' = [ cos (pi/3) sin (pi/3) ; -sin (pi/3) cos (pi/3) ] B' = [ 1 0 -i ; -1 1 3 ; -i 0 1 ]

iar inversele sunt, inv(A) = ( A-1 ) = [ cos (pi/3) sin (pi/3) ; -sin (pi/3) cos (pi/3) ] inv(B) = ( B-1 ) = [0.5 0.5 + 1.5 i - 0.5 i ; 0 1 0; - 0.5 i -1.5-0.5 i 0.5 ]

de unde se verifică uşor că A*inv(A) = [1] şi B*inv(B) = [1] . Instrucţiunea inv(X), returnează un mesaj de avertizare, dacă matricea X

este singulară sau bandă.

Pseudoinversa sau inversa generalizată, Moore-Penrose, a unei matrice, se calculează cu funcţia pinv, apelată cu sintaxa:

B=pinv(A),

Page 8: Algebra Numerica Liniara

Algebră numerică liniară 145

sau B=pinv(A,tol),

unde tol este toleranţa, care are valoarea implicită (când lipseşte la apelare), tol = max(size(A)) * norm(A) * eps, cu eps, depinzând de acurateţea calculelor în virgulă mobilă.

Se utilizează, de regulă, pentru rezolvarea sistemelor de ecuaţii liniare, în sensul celor mai mici pătrate.

Matricea B este de aceleaşi dimensiuni ca şi matricea A' şi verifică patru condiţii:

A∗B∗A = A B∗A∗B = B A∗B este hermitică B∗A este hermitică. De exemplu, calculul pseudoinversei matricei A=[1 2 3; 4 5 6; 7 8 9],

conduce la, B = pinv(A) = [ -0.6389 -0.1667 0.3056 -0.0556 0.0000 0.0556 0.5278 0.1667 -0.1944 ], A*B*A = A = [ 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 ] B*A*B = B = [ -0.6389 -0.1667 0.3056 -0.0556 0.0000 0.0556 0.5278 0.1667 -0.1944 ]

iar A*B şi B*A sunt matrice hermitice şi în acest caz sunt egale între ele fiind, [ 0.8333 0.3333 -0.1667 0.3333 0.3333 0.3333 -0.1667 0.3333 0.8333 ].

Dacă matricea A este pătrată şi nesingulară, funcţia pinv(A) consumă un timp de calcul mai mare decât inv(A).

Dacă matricea A nu este pătrată sau este pătrată şi singulară, atunci nu există inversă, inv(A). În acest caz, pinv(A) are unele, dar nu toate, proprietăţi ale lui inv(A).

Dacă matricea A are mai multe rânduri decât coloane şi rangul matricei este mai mic decât minimul dintre rânduri şi coloane, atunci problema celor mai mici pătrate, de minimizare a norm(A*x-b), nu are soluţie unică. Se obţin două infinităţi de soluţii date de:

x=pinv(A)*b şi

Page 9: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 146

y=A\b, care se disting prin aceea că norm(x) este mai mică decât norma oricărei alte soluţii, iar y are, pe cât posibil, componente diferite de zero.

De exemplu, matricea generată de, A = magic(8); A = A(:,1:6)

este o matrice de 8-pe-6 care are rank(A) = 3. A = [ 64 2 3 61 60 6 9 55 54 12 13 51 17 47 46 20 21 43 40 26 27 37 36 30 32 34 35 29 28 38 41 23 22 44 45 19 49 15 14 52 53 11 8 58 59 5 4 62 ]

Termenul liber, din partea dreaptă, este: b = 260*ones(8,1) = [ 260; 260; 260; 260; 260; 260; 260; 260 ].

7.1.7. Bază ortogonală şi bază ortonormală

După cum se cunoaşte, doi vectori x, y sunt ortogonali, dacă produsul lor scalar este nul.

Înt-un spaţiu euclidian, real sau complex, deseori se preferă ca bază un sistem de vectori, neee ,...,, 21 , ortogonali doi câte doi , având fiecare norma egală cu 1,

( )

=

≠=

ji

jiee ji daca ,1

daca ,0, .

Dacă numai prima condiţie este îndeplinită, se spune că neee ,...,, 21 formează o bază ortogonală. Dacă sunt îndeplinite amândouă condiţiile, baza este ortonormală.

Cu vectorii unei baze oarecare, nuuu ,...,, 21 , se poate construi întotdeauna o bază ortonormală,

( )

=

≠=

ji

jiuu ji daca ,1

daca ,0,

iar vectorii bazei sunt ortogonali doi câte doi şi au norma ( ) 1, == iii uuu .

În Matlab, funcţia care realizează o bază ortogonală pentru o matrice A este orth(A). Ea se apelează cu sintaxa:

Q=orth(A), în care numărul de coloane ale lui Q este egal cu rangul matricei A.

Baza ortogonală are proprietatea că Q'*Q = I .

Page 10: Algebra Numerica Liniara

Algebră numerică liniară 147

Obţinerea unei baze ortogonale, Z, pentru un spaţiu nul al matricei A, prin descompunerea în valori proprii, se face prin funcţia null, apelată prin:

Z = null(A) sau Z=null(A, 'r') unde r este o bază raţională având elemente mici întregi, astfel încât A*Z să aibă elemente neglijabile, size(Z,2) = 1, iar Z'*Z = I.

De exemplu, dacă A=[1 2 3;4 5 6; 7 8 9]

atunci, z=null(A) = [ -0.4082 ; 0.8165 ; -0.4082 ] size(z,2)= 1 z'*z = 1 z=null(A,'r') = [ 1 ; -2 ; 1 ] Descompunerea unei matrice, A, în vederea determinării rangului, se face

cu funcţia rref, apelată cu sintaxa, [R,jb] = rref(A) su [R,jb] = rref(A,TOL)

unde r=length(jb) este rangul matricei A, A(:,jb) este matricea luată ca bază la determinarea rangului; R(1:r,jb) este matricea identitate de r x r; x(jb), sunt numărul de variabile independente; TOL este toleranţa impusă la determinarea rangului.

Dacă A=[1 2 3 4; 5 6 7 8; 9 10 11 12 ; 13 14 15 16; 17 18 19 20] atunci prin comanda,

[R,jb]=rref(A) rezultă:

R=[ 1 0 -1 -2 ; 0 1 2 3 ; 0 0 0 0 ; 0 0 0 0 ; 0 0 0 0 ] jb=[ 1 2 ] ; R(1:2,jb) = [ 1 0 ; 0 1 ] A(:,jb) = [1 2 ; 5 6 ; 9 10 ; 13 14 ; 17 18 ].

Unghiul dintre două subspaţii este calculat cu funcţia subspace. Prin urmare, subspace(A,B) dă unghiul dintre coloanele matricei A şi matricei B.

Atunci când A şi B sunt vectori de lungime unitară, atunci subspace(A,B) este identic cu acos((A'*B).

Dacă unghiul este mic, atunci cele două subspaţii sunt practic liniar dependente. Funcţia este utilă pentru evidenţierea diferenţelor ce nu sunt cauzate de fluctuaţia erorilor statistice, în două experimente succesive (A şi B), aplicate aceluiaşi fenomen fizic.

7.2. Condiţionarea unei matrice

Importanţa cunoaşterii condiţionării unei matrice rezidă în faptul că rezultatele obţinute prin calcul numeric au întotdeauna erori de rotunjire, fiind, prin urmare, soluţiile unei probleme perturbate.

Determinarea condiţionării are la bază teoria matematică a perturbaţiilor. Se spune că o funcţie f(x) este rău condiţionată, dacă pentru un x1, apropiat de x,

Page 11: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 148

funcţia f(x1) diferă mult de f(x). Invers, o funcţie se spune că este bine condiţionată, dacă pentru un x1 apropiat de x, funcţia f(x1) este apropiată de f(x). Din păcate, termenii apropiaţi sunt calitativi şi, pentru a putea fi cuantificaţi, este necesară utilizarea numerelor de condiţionare.

Numărul de condiţionare al unei matrice indică sensibilitatea soluţiei unui sistem de ecuaţii liniare şi dă indicaţii despre precizia rezultatelor la inversarea matricelor şi la rezolvarea ecuaţiilor liniare. O matrice bine condiţionată este o matrice relativ insensibilă la aceste mici perturbaţii.

Numărul de condiţionare al unei matrice, calculat ca raportul dintre cea mai mare şi cea mai mică valoare singulară a acesteia, se determină cu funcţia cond, care se apelează cu sintaxa:

c=cond(X,p) unde c este numărul de condiţionare al matricei X, în norma p, care poate fi 1, 2, inf sau 'fro', după norma calculată, astfel încât, norm(X,p) * norm(inv(X),p).

O funcţie mai performantă, care calculează numărul de condiţionare, c, după un algoritm din codul de calcul LAPACK, este rcond, care se apelează cu sintaxa:

c=rcond(X).

Estimarea celui mai mic număr de condiţionare se realizează cu funcţia condest, care se apelează cu sintaxa: c = condest(X).

Dacă considerăm, iniţial, sistemul de ecuaţii:

=⋅+

=⋅+⋅

095.1152.1

543.6917.66

21

21

xx

xx

şi un sistem “perturbat”,

=⋅+

=⋅+⋅

095.1152.1

543.6912.66

21

21

xx

xx

atunci, cu secvenţa Matlab, A1=[6 6.917; 1 1.152]; A2=[6 6.912; 1 1.152]; c1=cond(A1);

c2=cond(A2); d1=condest(A1);d2=condest(A2);r1=rcond(A1);r2=rcond(A2);

se obţine: c1 = 1.7234e+004, c2 = 3.1875e+016, d1 = 2.0845e+004, d2 = Inf, r1 = 4.7972e-005, r2 = 0,

de unde rezultă că sistemul este rău-condiţionat. Dacă se rezolvă cele două sisteme (iniţial si perturbat), folosind secvenţa, A1=[6 6.917; 1 1.152]; A2=[6 6.912; 1 1.152]; b=[6.543; 1.095]; x1=A1\b; x2=A2\b;

Page 12: Algebra Numerica Liniara

Algebră numerică liniară 149

se obţin soluţiile: x1=[ 7.3158 -5.4000] ; x2= [Inf Inf]; de unde se observă diferenţele foarte mari între acestea, datorate slabei condiţionări.

7.3. Generarea unei matrice rare

Generarea unei matrice rare şi afişarea coeficienţilor se realizează cu funcţia sparse, care se apelează cu una dintre sintaxele:

• S = sparse(A), transformă o matrice plină într-o formă rară, înlăturând toate elementele egale cu zero, iar dacă o matrice S este deja rară, atunci sparse(S) înapoiază tot S ;

• S = sparse(i,j,s,m,n,nzmax), foloseşte vectorii i, j şi s pentru a genera matricea de m x n, de forma S(i(k),j(k)) = s(k), cu spaţii alocate pentru nzmax, diferit de zero ; vectorii i, j, şi s au toţi aceeaşi lungime, dar sunt mai mici decât 2^31-1, iar oricare element din s, ce apare şi în i sau j, este adăugat ;

• S= sparse(i,j,s,m,n), foloseşte nzmax = length(s) ; • S =sparse(i,j,s), foloseşte m = max(i) şi n = max(j), calculaţi înainte să fie

înlăturate zerourile, deci una dintre coloanele [i j s] poate fi [m n o] ; • S= sparse(m,n) sau sparse([],[],[],m,n,0), generează ultima matrice rară, de

forma m x n.

Aplicarea operatorilor specifici Matlab (aritmetici, logici, etc.) pe matricea rară, detemină apariţia unei matrice rare, iar în cazul unor combinaţii de matrice rare şi întregi, se va obţine o matrice întreagă.

Excepţiile apar atunci când rezultatul este o structură rară; de exemplu, A.*S este cel puţin o matrice rară ca şi S.

De exemplu, S = sparse(1:n,1:n,1)

generează o reprezentare rară, de forma n x n, faţă de S = sparse(eye(n,n)) care va genera o matrice completă, n x n, cu multe dintre elementele sale egale cu zero.

Utilitatea matricelor rare se relevă la matrice foarte mari, ca de exemplu, cazul unei matrice B = sparse(10000,10000,pi), cu care poate opera Matlabul, pe când cu matricea completă, full(B), nu poate opera, datorită memoriei insuficiente, aceasta necesitând 800 megabytes.

Reasamblarea unei matrice rare se face prin succesiunea de instrucţiuni, [i,j,s] = find(S); [m,n] = size(S); S = sparse(i,j,s,m,n);

sau, dacă ultima linie şi coloană are elemente diferite de zero, [i,j,s] = find(S); S = sparse(i,j,s).

Page 13: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 150

7.4. Ecuaţii liniare

Fie sistemul de ecuaţii liniare:

111111 ...... bxaxaxa nnjj =⋅++⋅++⋅

...........................................................

ininjiji bxaxaxa =⋅++⋅++⋅ ......11

...........................................................

mnmnjmjm bxaxaxa =⋅++⋅++⋅ ......11

de m ecuaţii liniare cu n necunoscute, m şi n fiind două numere naturale oarecare. Dacă notăm,

;

....

....

B ;

....

....

X ;

......

......................

......

......................

......

A

11

1

1

1111

=

=

=

m

i

n

j

mnmjm

iniji

nj

b

b

b

x

x

x

aaa

aaa

aaa

atunci sistemul de ecuaţii liniare se poate scrie, matriceal, sub forma: A*X = B.

Un şir ordonat de numere, 002

01 ,...,, nxxx , care satisfac relaţiile:

; ,...,2,1 ; ...... 00011 mibxaxaxa ininjiji ==⋅++⋅++⋅

se numeşte soluţie a sistemului. Numerele 002

01 ,...,, nxxx , care verifică sistemul, se mai

numesc şi rădăcinile sistemului. Dacă sistemul admite o soluţie unică, se numeşte compatibil determinat, iar

dacă admite cel puţin două soluţii, se numeşte compatibil nederminat. Dacă sistemul nu are soluţii, este incompatibil.

În cazul în care sistemul este compatibil nedeterminat, poate avea o infinitate simplă, dublă, ... , multiplu de ordinul r de soluţii (sau un număr finit, în numere întregi).

Deoarece nu toţi ija sunt nuli, rangul matricei A, cu m linii şi n coloane,

formată cu coeficienţii necunoscutelor, va fi 1≥p . Presupunem că unul dintre determinanţii de ordinul p, diferit de zero, este chiar

pppp

p

p

p

... a a a

... aa a

... a a a

21

22221

11211

.........................

=∆

Page 14: Algebra Numerica Liniara

Algebră numerică liniară 151

ceea ce este întotdeauna posibil să se realizeze, schimbând, la nevoie, atât ordinea ecuaţiilor, cât şi indicii necunoscutelor.

Determinantul 0≠∆ p , se numeşte determinantul principal al sistemului.

Evident, există şi alţi determinanţi de ordinul p diferiţi de zero, însă toţi determinanţii de ordinul p+1, p+2, ..., p+q, cu q=min(m,n) ce se pot forma cu liniile şi coloanele matricei A, sunt nuli.

Putem întotdeauna aranja necunoscutele şi schimba ordinea ecuaţiilor, astfel încât p∆ să fie format cu coeficienţii primelor p necunoscute, luate din

primele p ecuaţii. Ecuaţiile care intervin în formarea determinantului principal se numesc

ecuaţii principale, iar necunoscutele pnxxx ,...,, 21 , cu ale căror coeficienţi se

formează determinantul principal, se numesc necunoscute principale. Celelalte ecuaţii şi necunoscute se numesc secundare. Se numeşte determinant caracteristic, un determinant de ordinul p+1 din

A, obţinut prin completarea determinantului principal, p∆ , cu o coloană formată

din termenii liberi corespunzători ai ecuaţiilor principale şi cu o linie formată cu coeficienţii necunoscutelor principale şi cu termenul liber al unei ecuaţii secundare,

( )

11,11,1

2

1

11

....

...

+++

+

=

ppp

pp

p

baa

b

b

b

D , … , ( )

mmm

pp

pmp

baa

b

b

b

D

11

2

1

1

....

...

=−+ .

Dacă nmp ≤< (sau mnp ≤< ) vom putea forma pm − determinanţi, numiţi determinanţi caracteristici.

Conform teoremei lui Rouché, un sistem liniar de m ecuaţii cu n necunoscute este compatibil, dacă şi numai dacă, toţi determinanţii caracteristici sunt nuli.

Dacă toţi determinanţii caracteristici sunt nuli, dar: • n>p, există n-p necunoscute secundare, care apar ca parametri în soluţiile

găsite , 002

01 ,...,, pxxx , şi avem pn−∞ soluţii, iar sistemul este compatibil

nedeterminat; • n=p, nu avem necunoscute secundare, iar sistemul este compatibil

determinat; • m=n=p, nu există determinanţi caracteristici (formal putem spune că sunt

nuli), • sistemul este compatibil determinat, cu soluţie unică.

Page 15: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 152

Dacă cel puţin unul dintre determinanţii caracteristici este diferit de zero, sistemul este incompatibil sau imposibil, respectiv nu are soluţii.

Analiza soluţiilor unui sistem de ecuaţii liniare se poate face mai comod aplicând teorema Kronecker-Capelli, care se bazează, în esenţă, pe rangul matricelor A şi B. Dacă notăm p=rang A şi q=rang (A|B), atunci, pentru ca sistemul de m ecuaţii cu n necunoscute să fie complet compatibil, este suficient ca:

rang A = rang (A|B),

( ) ;

......

......................

......

..........................

......

B|A ;

......

......................

......

......................

......

A

1

1

11111

1

1

1111

=

=

mmnmjm

iiniji

nj

mnmjm

iniji

nj

baaa

baaa

baaa

aaa

aaa

aaa

sau în Matlab, p=rank(A)==rank([A,B]).

Funcţia rank se poate apela şi sub forma: p=rank(A,tol),

unde tol este toleranţa, care are valoarea implicită (când lipseşte la apelare), tol = max(size(A)) * norm(A) * eps, cu eps depinzând de acurateţea calculelor în virgulă mobilă.

Dacă: • m=n=p, sistemul este compatibil determinat, cu soluţie unică;

• p = q < n, sistemul este compatibil nedeterminat, cu pn−∞ soluţii; • p < q, sistemul este incompabitil sau nedeterminat şi nu va avea nici o

soluţie.

Una dintre metodele de rezolvare a sistemelor de n ecuaţii, cu n

necunoscute, constă în împărţirea matricelor. Soluţiile unui sistem de ecuaţii liniare de forma, A*X=B

pot fi determinate în Matlab, prin instrucţiunile: X=B/A – împărţirea la dreapta sau X=A\B – împărţirea la stânga.

De meţionat că împărţirea la stânga este mai rapidă decât împărţirea la dreapta. Pentru un sistem de 1000 ecuaţii cu 1000 necunoscute, ai cărui coeficienţi şi termeni liberi sunt numere aleatoare, cu secvenţa Matlab,

A=rand(1000); B=rand(1000); tic; X=A\B; ts=toc tic; X=B/A; td=toc

Page 16: Algebra Numerica Liniara

Algebră numerică liniară 153

s-au obţinut, pe un calculator PC 1.7 MHz, timpi: ts=2.614 s şi td=2.663 s, în cele două variante de împărţire, la stânga şi la dreapta.

O altă cale de rezolvare a sistemelor de n ecuaţii, cu n necunoscute, constă în folosirea matricei inverse.

Deoarece det(A)≠0, matricea A este nesingulară şi are deci, o inversă A-1,

Adet

A 1 jiA=−

calculată în Matlab cu inv(A). Dacă în sistemul, A*X=B, înmulţim la stânga cu A-1, avem X=A-1*B,

respectiv în Matlab, X=inv(A)*B. Reluând acelaşi sistem, de 1000 ecuaţii cu 1000 necunoscute, cu

coeficienţii şi termenii liberi numere aleatoare, timpul de calcul rezultă din, A=rand(1000); B=rand(1000); tic; X=inv(A); ti=toc

şi, pentru acelaşi calculator, este ti= 2.1430 s.

O serie de metode de rezolvare a sistemelor de ecuaţii sunt cunoscute ca fiind metode prin triunghiularizare. Din această categorie fac parte: factorizarea Cholesky, factorizarea LU, factorizarea QR etc.

O matrice pătrată A, de forma,

.........................

A

21

22221

11211

=

nnnn

n

n

... a a a

... aa a

... a a a

poate fi descompusă sub forma, A = Ls + D +Us, cu:

0...

...............

00...0

00...00

Ls

121

21

=

−nnnn aaa

a;

0...00

...............

00...0

00...0

D 12

11

=

nna

a

a

;

0...000

...............

...00

...0

Us 223

11312

=n

n

aa

aaa

Matricea Ls, care conţine elemente diferite de zero numai sub diagonala principală, se numeşte strict inferior triunghiulară. Similar, matricea Us, care

Page 17: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 154

conţine elemente diferite de zero doar deasupra diagonalei principale, se numeşte strict superior triunghiulară. Matricea D este evident diagonală.

O matrice L, definită ca, L=Ls+D se numeşte inferior triunghiulară.

În acest caz, este evident că det(L)=det(D) şi, dacă det(D)≠0, atunci există inversa matricei L, respectiv L-1, care este de forma,

L-1 = L' + D' şi este de asemenea inferior triunghiulară.

Asemănător, dacă U=Us+D şi dacă U-1 există, ea este superior triunghiulară.

Pentru un sistem liniar neomogen, L*x = b, având matricea L a coeficienţilor sistemului inferior triunghiulară,

...

...............

0...0

0...00

L

321

2221

11

=

nnnnn llll

ll

l

, ...

x 2

1

=

nx

x

x

, ...

b 2

1

=

nb

b

b

,

componentele vectorului x, soluţiile sistemului, pot fi găsite prin substituţie înainte, respectiv:

( ) .1,2,..., ;1

x;1

x;x1

11212

222

11

11 nmxlb

lxlb

ll

b m

j

jmjm

mm

m =

⋅−⋅=⋅−⋅== ∑

=

Un caz mai complicat, dar şi mai instructiv, este cazul în care matricea A este produsul unei matrice inferior triunghiulare L, cu o matrice superior

triunghiulară U. Prin urmare, avem A*x = L*U*x = b.

Pentru rezolvare, se introduce un vector auxiliar definit ca z=U*x

ceea ce face ca ecuaţia iniţială să devină L*z = b, care este de forma anterioară, având necunoscutele:

( ) .1,2,..., ;1

z ;1

z ;z1

11212

222

11

11 nmzlb

lzlb

ll

b m

j

jmjm

mm

m =

⋅−⋅=⋅−⋅== ∑

=

Odată vectorul z cunoscut, ecuaţia z=U*x (care este identică cu U*x=z) având,

...000

...............

...0

...

U 22322

1131211

=

nn

n

n

u

uuu

uuuu

, ...

x 2

1

=

nx

x

x

, ...

z 2

1

=

nz

z

z

,

Page 18: Algebra Numerica Liniara

Algebră numerică liniară 155

din care, din ultima linie, rezultă,

11

nxu

zn= ,

şi în general,

1.,...,1, ;1

1

−=

⋅−⋅= ∑

+=

nnmxuzu

xn

mj

jmjm

mm

m

Se remarcă faptul că, în acest caz, se utilizează o substituţie înainte şi apoi o substituţie înapoi.

Cazuri particulare ale acestui caz general sunt atunci când matricea sistemului este o matrice tridiagonală, o matrice tridiagonal simetrică sau o matrice multidiagonală.

O matrice tridiagonală este, prin definiţie, o matrice care are două diagonale secundare adiacente diagonalei principale, toate cu elemente diferite de zero. Se întâlneşte, de regulă, la aproximaţia difuziei multigrupale monodimensionale.

Matricea tridiagonal simetrică are elementele simetrice nepozitive şi se mai numeşte şi matrice Stieltjes.

O matrice pătrată de ordinul n, multidiagonală, este o matrice cu un număr m, impar de diagonale, m<n, de elemente diferite de zero. O astfel de matrice poate fi adusă la forma unei matrice quasitridiagonale, prin utilizarea unor submatrice adecvate.

Factorizarea Cholesky este o metodă de rezolvare a unui sistem de ecuaţii liniare, de forma A*x=B, cu matricea A pozitiv definită.

Un sistem dat, având forma matriceală, A*x-B=0

prin metoda Cholescky, se înlocuieşte cu un sistem echivalent, R'*R *x=B în care R este o matrice unică, superior triunghiulară, nesingulară, care satisface relaţia: A=R'*R.

Factorizarea Cholesky utilizează numai matricea superior triunghiulară, iar cea inferior triunghiulară este considerată ca fiind transpusa complex conjugată a celei superioare, astfel că, A este o matrice hermitică.

Funcţia Matlab, care factorizează Cholesky, este chol, apelată cu sintaxa: R=chol(A),

care necesită ca A să fie pozitiv definită, altfel returnând numai un mesaj de eroare. Exemple de matrice pozitiv definite sunt, A1=[3 2+i 3-i;-2-i 8 5; 6 3+i 7]; A2=pascal(5)

pentru care, R1 = [ 1.7321 1.1547 + 0.5774i 1.7321 - 0.5774i 0 2.5166 1.3245 + 0.6623i 0 0 1.2140 ],

Page 19: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 156

R2 = [ 1 1 1 1 1 0 1 2 3 4 0 0 1 3 6 0 0 0 1 4 0 0 0 0 1 ]. Factorizarea Cholesky, pentru coeficienţii binomului lui Pascal, îi

aranjează într-o matrice superior triunghiulară. Dacă matricea nu este pozitiv definită, ca de exemplu, A3=[1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16]

atunci se utilizează apelarea funcţiei chol sub forma, [R3,p]=chol(A3),

care conduce la, R3 = [ 1.0000 2.0000 3.0000 0 1.4142 0.7071 0 0 1.2247 ] p=4,

astfel încât: R'*R = A(1:q,1:q) , q = p-1. Rezolvarea unui sistem de ecuaţii, A*x=B,

se realizează cu secvenţa Matlab: R=chol(A); x=R\R’\b.

Pentru o matrice X, factorizarea incompletă Cholesky, aplicabilă pentru matrice rare şi factorizarea Cholesky infinită este realizată, în Matlab, cu una dintre sintaxele:

• R = cholinc(X,dtol), în care, dtol este un scalar nenegativ, ce evidenţiză toleranţa permisă la factorizarea incompletă, iar dacă dtol=0,, se realizează factorizarea completă;

• R = cholinc(X,opt), în care, opt poate fi dtol, michol (0 pentru factorizarea Cholesky nemodificată şi 1 pentru modificată ) sau rdiag (0, în mod normal sau 1, când se forţează R ca o matrice cu zero pe diagonala principală);

• R = cholinc(X,'0'), care realizează o factorizare incompletă Cholesky, a unei matrice rare simetric pozitive, care nu garantează existenţa lui R şi putând apărea un mesaj de eroare;

• [R,p] = cholinc(X,'0'), evită mesajul de eroare şi dacă p=0, atunci R există, altfel R'*R corespunde cu X , pentru primele q=p-1 linii şi coloane;

• R = cholinc(X,'inf'), care produce o factorizare Cholosky infinită, ceea ce presupune că, la întâlnirea unui pivol egal cu zero, atunci se completează Inf pe diagonală, iar pe rânduri 0, iar X este pozitiv semidefinită, astfel că, la întâlnirea unui pivot negativ, acesta se înlocuieşte cu Inf.

Modificarea factorizării Cholesky se realizează cu funcţia cholupdate.

Page 20: Algebra Numerica Liniara

Algebră numerică liniară 157

Dacă R=chol(A) este factorizarea Cholesky inţială a matricei A, atunci R1=cholupdate(R,x) returnează o matrice superior triunghiulară, rezultată din factorizarea matricei A + X*X', cu X un vector coloană. Funcţia lucrează numai cu matrice pline, nu rare.

Prin factorizarea LU (lower-upper), o matrice pătrată este descompusă sub forma produsului a două matrice triunghiulare: una inferior triunghiulară, matricea L, cu elemente 1 pe diagonala principală şi cealaltă, matricea U, superior triunghiulară.

Factorizarea LU a unei matrice se realizează în Matlab cu funcţia lu, care se apelează cu una dintre sintaxele:

• [L,U]=lu(X), când se returnează o matrice superior triunghiulară U şi o matrice inferior triunghiulară permutată L, astfel încât X=L*U;

• [L,U,P]=lu(X), când se returnează o matrice superior triunghiulară U, o matrice inferior triunghiulară permutată L şi permutarea matriceală P, astfel încât L*U=P*X.

Factorizarea LU este utilizată în Matlab pentru obţinerea inversei unei matrice, cu funcţia inv şi pentru calculul determinantului, cu funcţia det.

Să considerăm sistemul A*x=b unde, A = [ 1 1 2 1 1 2 b = [ 0 3 -1 -2 1 -2 1 -6 -1 1 3 -1 4 2 6 1 2 -1 2 -1 -3 1 -2 -3 1 -2 -3 -1 6 1 -2 4 2 -1 4 ] -1 ].

Prin factorizarea LU, [L1,U1] = lu(A) sau [L,U,P] = lu(A)

obţinem: L1 = [ 0.3333 -0.3636 0.5283 0.5143 0.8676 1.0000 1.0000 0 0 0 0 0 -0.3333 -0.1818 0.4717 1.0000 0 0 0.3333 -0.6364 -0.1132 -0.5429 1.0000 0 -0.6667 1.0000 0 0 0 0 0.3333 0.4545 1.0000 0 0 0 ],

U1 = [ 3.0000 -1.0000 -2.0000 1.0000 -2.0000 1.0000 0 -3.6667 -0.3333 -1.3333 -4.3333 -0.3333 0 0 4.8182 2.2727 1.6364 3.8182 0 0 0 -1.9811 1.7736 0.4717 0 0 0 0 -1.9429 -2.8571 0 0 0 0 0 1.7647 ],

Page 21: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 158

L = [ 1.0000 0 0 0 0 0 -0.6667 1.0000 0 0 0 0 0.3333 0.4545 1.0000 0 0 0 -0.3333 -0.1818 0.4717 1.0000 0 0 0.3333 -0.6364 -0.1132 -0.5429 1.0000 0 0.3333 -0.3636 0.5283 0.5143 0.8676 1.0000 ],

U = [ 3.0000 -1.0000 -2.0000 1.0000 -2.0000 1.0000 0 -3.6667 -0.3333 -1.3333 -4.3333 -0.3333 0 0 4.8182 2.2727 1.6364 3.8182 0 0 0 -1.9811 1.7736 0.4717 0 0 0 0 -1.9429 -2.8571 0 0 0 0 0 1.7647 ],

P = [ 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 ].

Se observă că L1*U1 este identică cu A, iar L*U este identică cu P*A.. Inversa matricei A, calculată cu funcţia inv, este egală cu produsul

inverselor, respectiv: inv(A) = inv(U1)*inv(L1) şi inv(P*A) = inv(U)*inv(L). De asemenea, pentru determinanţi, sunt valabile relaţiile: det(A) = det(L1)*det(U1) şi det(P*A) = det(L)*det(U). Rezolvarea sistemelor de ecuaţii A*x = b, prin factorizarea Lu, presupune

soluţionarea succesivă a sistemelor: y=L1\b şi x=U1\y,

rezultând, x = [2 -1 3 -2 1 -3 ].

Pentru o matrice X, factorizarea incompletă LU, luinc, aplicabilă pentru matrice rare, este realizată în Matlab cu una dintre sintaxele:

• [L,U,P] = luinc(X,dtol) sau [L,U] = luinc(X,dtol) , în care dtol este un scalar nenegativ, ce evidenţiază toleranţa permisă la factorizarea LU incompletă, aplicabilă fiecărei coloane a lui X, iar dacă dtol=0, se realizează factorizarea LU completă;

• [L,U,P] = luinc(X,opt) sau [L,U] = luinc(X,opt) , în care opt poate fi dtol, milu (0, pentru factorizarea LU nemodificată şi 1, pentru modificată) sau udiag (0, în mod normal sau 1, când se forţează U ca o matrice cu zero pe diagonala principală);

• [L,U] = luinc(X,'0'), care realizează o factorizare incompletă LU a unei matrice rare, simetric pozitive, fără a da permutarea;

Page 22: Algebra Numerica Liniara

Algebră numerică liniară 159

• [L,U,P] = luinc(X,'0'), prezintă şi matricea de permutare şi se bazează pe algoritmul de pivotare parţială.

Factorizarea QR este o descompunere a unei matrice, A, ca produsul dintre o matrice ortonormală, Q, cu o matrice superior triunghiulară, R, astfel încât A = Q*R.

Factorizarea QR se utilizează pentru rezolvarea sistemelor de ecuaţii liniare cu mai multe ecuaţii decât necunoscute. Cea mai bună soluţie a unor astfel de sisteme, A*x = b, în sensul celor mai mici pătrate, este calculată cu x = A\b, care utilizează implicit această factorizare.

Prin utilizarea factorizării QR, cu funcţia Matlab qr, soluţia este calculată în doi paşi:

y=Q`*b şi apoi x=R\y. Apelarea funcţiei qr se poate face cu una dintre sintaxele:

• [Q,R]=qr(A), returnează matricea triunghiular superioară R, de aceeaşi dimensiune cu A şi matricea unitară Q, astfel încât, A = Q*R.

• [Q,R,E]=qr(A), returnează matricea de permutare E, a matricei superior triunghiulare R, cu elementele diagonalei descrescătoare şi matricea unitară Q, astfel încât A*E = Q*R, cu menţiunea că, matricea E are coloanele aranjate în ordinea descrescatoare a abs(diag(R));

• [Q,R]=qr(A,0), realizează o descompunere „economică” a matricei A, care, dacă este de mxn, cu m>n, lucrează numai cu primele n coloane;

• [Q,R,E]=qr(A,0), realizează o descompunere „economică” a matricei A, prezentând şi vectorul de permutare E, având coloanele aşezate în ordinea descrescătoare a abs(diag(R)), astfel încât Q*R = A(:,E);

• R = qr(A), returnează numai matricea R, care R = chol(A'*A).

Pentru matrice rare, versiunea QR nu permută coloanele. Soluţia sistemului A*x=b, prin metoda celor mai mici pătrate, bazată pe

descompunerea QR, se află fie într-un pas, x = R\(R'\(A'*b))

fie succesiv, r = b - A*x e = R\(R'\(A'*r)) x = x + e; De exemplu, descompunerea QR a matricei aceleiaşi matrice A, utilizată la

descompunerea LU, conduce la: Q = [ -0.2425 0.1866 -0.4555 0.2090 -0.5768 0.5679 -0.7276 -0.3466 0.2364 0.4411 -0.1208 -0.2923 0.2425 0.2666 -0.5238 0.5303 0.0392 -0.5595 -0.2425 0.4133 0.0328 -0.5493 -0.4742 -0.4927 0.4851 -0.5999 0.0671 0.0150 -0.6101 -0.1670 -0.2425 -0.4932 -0.6758 -0.4227 0.2325 -0.0919 ],

Page 23: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 160

R = [ -4.1231 -0.7276 1.4552 -3.1530 1.2127 -1.4552 0 4.4125 -1.1198 0.6132 3.8260 -2.0530 0 0 -5.6239 -1.1158 -2.5818 -4.5909 0 0 0 -1.8541 2.3748 1.8616 0 0 0 0 1.8936 1.7669 ]

astfel încât soluţia se obţine prin, R\(R'\(A1'*b))

sau secvenţial, r = b - A*x ; e = R\(R'\(A'*r)) ; x = x + e;

rezultând x = [2 -1 3 -2 1 -3 ], la fel ca şi prin metoda LU.

Modificarea factorizării QR iniţiale se realizează cu funcţia qrupdate, care se apelează [Q1,R1] = qrupdate(Q,R,U,V), care returnează factorizarea matricei A + U*V', iar matricele U şi V sunt de tipul coloană.

Ştergerea unei coloane din factorizarea QR se realizează cu funcţia qrdelete, care se apelează cu sintaxa:

[Q,R]=qrdelete(Q0,R0,j), unde Q0 şi R0 sunt factorizările iniţiale, [Q0,R0]=qr(A), iar Q şi R sunt factorizările obţinute după ce din matricea A, a fost ştearsă coloana j, respectiv elementele A(:,j).

Inserarea unei coloane în factorizarea QR se realizează cu funcţia qrinsert, care se apelează cu sintaxa:

[Q,R]=qrdelete(Q0,R0,j), unde Q0 şi R0 sunt factorizările iniţiale, [Q0,R0]=qr(A), iar Q şi R sunt factorizările obţinute după ce, în matricea A, a fost inserată coloana j, respectiv elementele A(:,j), după ultima coloană a matricei iniţiale.

Găsirea planului de rotaţie al unei matrice X, de 2 x 2, se realizează cu funcţia planerot, apelată sub forma [G,Y]=planerot(X), care returnează două matrice ortogonale, astfel că Y = G*X şi Y(2) = 0.

Realizarea factorizării QZ, pentru valori proprii generalizate, se realizează cu funcţia qz. Apelarea funcţiei se face cu:

• [AA, BB, Q, Z, V] = qz(A,B); pentru matricele pătrate A şi B, produce matricele quasitriunghiulare superioare AA şi BB, matricele unitare Q şi Z, astfel încât Q*A*Z = AA şi Q*B*Z = BB, şi matricea vectorilor proprii generalizaţi, V.

Dacă matricele iniţiale, A şi B, sunt complexe, atunci AA şi BB sunt triunghiulare.

Factorizarea unei matrice la forma Hessenberg, se realizează prin funcţia hess. Forma Hessenberg a unei matrice are elementele de sub prima diagonală nule şi aceleaşi valori proprii, ca matricea originală. Dacă matricea iniţială este

Page 24: Algebra Numerica Liniara

Algebră numerică liniară 161

simetrică sau hermitică, atunci matricea Hessenberg are formă tridiagonală. Se apelează:

• H=hess(A) – aduce la forma Hessenberg, H, matricea iniţială A; • [H,P]=hess(A) – calculează o matrice unitară P şi o matrice Hessenberg

H, astfel încât A = P*H*P' şi P'*P = eye(size(P)).

Dacă considerăm matricea X, de test a valorilor proprii, de 3 x 3, X = [ -149 -50 -154 ; 537 180 546 ; -27 -9 -25 ]

forma Hessenberg are elementul (3,1) zero, hess(X) = [ -149.0000 42.2037 -156.3165 -537.6783 152.5511 -554.9272 0 0.0728 2.4489 ]

Factorizarea unei matrice la forma Schur, se realizează cu funcţia schur. Descompunerea Schur produce o matrice quasitriunghiulară T şi o matrice unitară U, astfel încât, X = U*T*U' şi U'*U = eye(size(U)), în care matricea iniţială X, trebuie să fie pătrată. Sintaxele de apelare sunt: [U,T] = schur(X), T = schur(X).

Pentru aceeaşi matrice X, de mai sus, descompunera Schur este: schur(X) = [ 1.0000 7.1119 815.8706

0 2.0000 -55.0236 0 0 3.0000 ].

Pentru matricea X complexă, forma Schur este superior triunghiulară, cu valorile proprii pe diagonală.

Transformarea matricei de ieşire de forma Schur, din reală în complexă, pentru o matrice de intrare X reală, se face cu funcţia rsf2csf, apelată sub forma:

[U,T]=rsf2csf(U0,T0), unde U0 şi T0 sunt matricele Schur iniţiale din [U0,T0]=schur(X), iar U, T

sunt cele finale, complexe, respectiv o matrice superior triunghiulară, cu valorile proprii pe diagonală.

Aplicarea metodei celor mai mici pătrate la rezolvarea unui sistem de ecuaţii liniare omogene, cu restricţii nenegative, se realizează în Matlab de către funcţia lsqnonneg. Aceasta se apelează cu una dintre sintaxele:

• X=lsqnonneg(C,d), cu C şi d reale, care returnează un vector X, ce minimizează norm(C*X-d), atunci când X >= 0;

• X=lsqnonneg(C,d,x0), utilizează x0 (x0>0) ca punct de plecare al soluţiei; • X=lsqnonneg(C,d,x0,tol) utilizează o toleranţă impusă la aflarea soluţiei;

altfel aceasta este 10*max(size(C))*norm(C,1)*eps, cu eps=2.2204e-016.

Aplicarea metodei celor mai mici pătrate la rezolvarea unui sistem de ecuaţii liniare omogene, cu covarianţă oarecare, se realizează în Matlab de către funcţia lscov.

Aceasta se apelează cu una dintre sintaxele:

Page 25: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 162

• X=lscov(A,B,V), returnează vectorul X, ca soluţie a ecuaţiei A*X=B+E, unde E este o funcţie de distribuţie normală, cu media zero şi covarainţa V, iar matricea A este de dimensiuni mxn, cu m>n, astfel încât, vectorul X minimizează (A*X-B)'*inv(V)*(A*X-B) şi soluţia sistemului este dată de X=inv(A'*inv(V)*A)*A'*inv(V)*B;

• [X,DX]=lscov(A,B,V), returnează erorile standard ale lui X în DX, erori calculate cu relaţiile mse=B'*(inv(V)-inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n) dx = sqrt(diag(inv(A'*inv(V)*A)*mse)).

7.5. Vectori şi valori proprii

În foarte multe aplicaţii, apar situaţii în care se pune problema determinării acelor valori ale unei constante λ , pentru care există soluţii nebanale ale unui sistem de ecuaţii liniar omogen, de forma:

111111 ...... xxaxaxa nnjj ⋅=⋅++⋅++⋅ λ

...........................................................

ininjiji xxaxaxa ⋅=⋅++⋅++⋅ λ......11

...........................................................

nnnnjnjn xxaxaxa ⋅=⋅++⋅++⋅ λ......11

de n ecuaţii liniare cu n necunoscute, având matricea A simetrică.

Dacă un vector 0≠x are proprietatea că xx ⋅=⋅ λA , se spune că x reprezintă o direcţie proprie a transformării A, iar numărul λ (real sau complex), este o valoare proprie a acestei transformări.

Denumirea de direcţie proprie a transformării este justificată prin aceea că, dacă x satisface relaţia xx ⋅=⋅ λA , aceeaşi proprietate o va avea orice vector xk ⋅ , unde k este un număr oarecare, real sau complex. Acest fapt este o consecinţă a proprietăţilor transformării liniare, ( ) ( )xkxkxAkxk ⋅⋅=⋅⋅=⋅⋅=⋅⋅ λλA .

O astfel de problemă este cunoscută ca o problemă cu valori şi vectori proprii. Valorile lui λ , pentru care există soluţii nebanale, se numesc valori

proprii sau caracteristice ale matricei A a coficienţilor sistemului, iar soluţiile vectori corespunzătoare se cunosc sub denumirea de vectori proprii sau caracteristici ai matricei A.

Forma matriceală a sistemului xx ⋅=⋅ λA este echivalentă cu, ( ) 0I-A =⋅⋅ xλ

unde I, este matricea identitate, calculabilă în Matlab cu eye(A). Această matrice este denumită uneori şi unitate, are toate elementele de pe diagonala principală egale cu 1, iar celelalte nule. Se mai notează şi cu [1] sau [e], având elementele,

Page 26: Algebra Numerica Liniara

Algebră numerică liniară 163

=

≠=

ji

jieij dacã ,1

dacã ,0

Acest sistem omogen posedă soluţii nebanale, dacă şi numai dacă, determinantul matricei coeficienţilor se anulează, adică matricea I-A ⋅λ este singulară,

( ) 0

...

............

...

...

I-A

21

22221

11211

=

==⋅

λ

λ

λ

λλ

nnnn

n

n

aaa

aaa

aaa

P

Această condiţie necesită ca λ să fie o rădăcină a ecuaţiei algebrice de mai sus, cunoscută sub denumirea de ecuaţie caracteristică a transformării A sau ecuaţie seculară. Fiind de gradul n în λ , va avea n rădăcini, fie distincte, fie unele dintre ele confundate. Aceste rădăcini sau soluţii nλλλ ,...,, 21 , sunt valorile proprii

ale matricei sau transformării A. Polinomul ( )λP , se numeşte polinomul

caracteristic al transformării liniare A. Corespunzător cu fiecare valoare proprie kλ , există cel puţin un vector

soluţie kx , a sistemului xx ⋅=⋅ λA , determinat până la o constantă arbitrară. În continuare, se enunţă principalele teoreme şi proprietăţi ale valorilor

proprii. Dacă o transformare liniară A, are n direcţii proprii, reprezentate prin

vectorii nuuu ,...,, 21 , liniar independenţi, aceşti vectori pot fi luaţi ca bază a spaţiului, iar matricea transformării A, în această bază, va avea forma diagonală,

[ 0,...,0,1λ ; 0,...,,0 2λ ; ... ; nλ,...,0,0 ].

Reciproc, dacă matricea transformării A, în baza nuuu ,...,, 21 , are formă

diagonală, atunci nλλλ ,...,, 21 sunt valorile proprii, iar nuuu ,...,, 21 reprezintă direcţiile proprii corespunzătoare.

Dacă valorile proprii nλλλ ,...,, 21 sunt distincte, direcţiile proprii

corespunzătoare sunt reprezentate prin vectorii nuuu ,...,, 21 , liniar independenţi. Valorile proprii ale unei transformări liniare autoadjuncte (hermitice), sunt

reale. La două valori proprii distincte, ale unei transformări autoadjuncte,

corespund două direcţii proprii ortogonale. Într-un spaţiu euclidian cu n dimensiuni (matricea A de nxn), o

transformare autoadjunctă (hermitică) are n direcţii proprii, ortogonale, două câte două. Vectorii neee ,...,, 21 , care reprezintă cele n direcţii proprii ale transformării A, ortogonale două câte două, pot fi luaţi de lungime unitate,

Page 27: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 164

( )

=

≠=

ji

jiee ji pentru ,1

pentru ,0, . Drept consecinţă, matricea A, faţă de această bază are

forma diagonală, [ 0,...,0,1λ ; 0,...,,0 2λ ; ... ; nλ,...,0,0 ]. Un caz particular de matrice hermitică îl formează matricele simetrice

reale. În acest caz, transformarea are n direcţii proprii ortogonale, două câte două şi valorile proprii reale. Transformarea se va reprezenta printr-o matrice care poate fi adusă la forma diagonală. Pe diagonala principală, în noua matrice, vor figura valorile proprii, nu întotdeauna distincte.

Valorile proprii ale transformărilor unitare au modulul egal cu 1. Orice transformare unitară într-un spaţiu euclidian cu n dimensiuni are n

direcţii proprii ortogonale, două câte două. Matricea transformării, raportată la aceste direcţii, va avea formă diagonală.

În Matlab, calculul valorilor şi al vectorilor proprii ai unei matrice pătrate se realizează cu funcţia eigs, care se apelează cu una dintre sintaxele:

• E=eigs(A) – returnează un vector E, care conţine valorile proprii ale matricei pătrate A;

• [V,D]=eigs(A) – returnează o matrice diagonală D, care conţine valorile proprii ale matricei A şi o matrice V, modală, ale cărei coloane sunt vectorii proprii, astfel încât A*V = V*D;

• [V,D] = eigs(A,'nobalance') – returnează valorile şi vectorii proprii, fără a executa o balansare, deoarece dacă matricea conţine elemente mici, comparabile cu erorile de rotunjire, balansarea le scalează, făcându-le la fel de semnificative ca celelalte elemente ale matricei originale şi, acest fapt, ar conduce ,în final, la vectori proprii incorecţi.

În cazul matricelor nesimetrice de ordinul n, pentru care AT≠A (sau în

Matlab A'≠A), dacă valorile proprii sunt distincte, atunci există n vectori proprii, liniar independenţi asociaţi.

Dacă matricea are numai valori proprii de ordinul întâi (valorile proprii λ sunt distincte), atunci vectorii proprii sunt independenţi. Dacă vectorii proprii nu sunt independenţi, atunci matricea originală este neregulată.

Dacă valorile proprii ale unei matrice nesimetrice de ordin n nu sunt toate distincte, atunci setul de vectori proprii asociaţi poate să nu fie de rang n. În cazul în care vectorii proprii ai matricei A nesimetrice nu formează un set complet, este totuşi posibil să găsim un set complet de alţi vectori, denumiţi vectori principali, care împreună cu setul vectorilor proprii, vor determina un set complet de vectori. Dacă multiplicitatea unei rădăcini este k, avem n-k+1 vectori proprii şi nu putem găsi mai mult decât k-1 vectori principali independenţi.

Şi pentru matrice nesimetrice există întotdeauna o matrice Jordan, aproape diagonală (având valoarea proprie multiplă kλ , pe diagonala principală şi 1, pe diagonala adiacentă superioară).

Page 28: Algebra Numerica Liniara

Algebră numerică liniară 165

Dacă toate valorile proprii ale matricei A sunt pozitive, matricea A se numeşte pozitiv definită. Invers, dacă toate valorile proprii ale matricei A sunt negative, matricea A se numeşte negativ definită.

Valorile şi vectorii proprii generalizaţi determină soluţiile nebanale ale ecuaţiei:

xBx ⋅⋅=⋅ λA unde A şi B sunt matrice pătratice de ordinul n, iar λ este un scalar.

Valorile lui λ , care satisfac ecuaţia, se numesc valori proprii generalizate şi valorile x, corespunzătoare, sunt vectorii proprii generalizaţi.

Dacă B este o matrice nesingulară, det(B)≠0, adică matrice iversabilă, problema calculului valorilor şi al vectorilor proprii se reduce la o problemă standard de valori proprii, prin înlocuirea lui A cu B-1*A, dearece ecuaţia este echivalentă cu:

xx ⋅=⋅ λ.AB-1 . Calculul vectorilor şi valorilor proprii generalizate se realizează cu funcţia

eig, apelată cu sintaxa: • V=eig(A) – returnează un vector V, care conţine valorile proprii

generalizate; • [V,D] = eig(A,B) produce o matrice diagonală D, care conţine valorile

proprii ale matricei A şi o matrice V, modală, ale cărei coloane sunt vectorii proprii, astfel încât A*V = B*V*D;

• [V,D] = eig(A,B,'chol') – se aplică la matricele A, B, simetrice, utilizând factorizarea Cholesky, pentru B;

• [V,D] = eig(A,B,'qz') – se aplică la matricele A, B, utilizând factorizarea QZ.

De exemplu, considerând A=[ -2 1 0 ; 1 -2 1; 0 1 -2], atunci

[V,D]=eig(A), conduce la: V = [ 0.500 -0.707 -0.500 ; -0.707 0.000 -0.707; 0.500 0.707 -

0.500] D=[ -3.41 0 0; 0 -2.00 0 0 0 -0.59].

Pentru calculul valorilor proprii generalizate se utilizează funcţia eig, care permite redarea unui set de şase valori proprii generalizate şi, în plus, se poate utiliza şi în cazul matricelor mari şi/sau rare.

Transformarea matricelor de ieşire, V şi D, ale funcţiei eig(X), cu X real, din forma complexă diagonală în forma reală, se realizează cu funcţia cdf2rdf, apelată sub forma [V,D]=cdf2rdf(V,D). În forma complexă diagonală, matricea D are valori proprii complexe sub diagonală. În formă reală, valorile proprii complexe formează un bloc diagonal de 2 x 2.

Analiza inţială a acurateţei determinării valorilor proprii se realizează cu

Page 29: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 166

funcţia balance, apelată cu: [T,B] = balance(A),

unde T şi B sunt transformările de similaritate, astfel că B = T\A*T, şi normele pe linii şi coloane să fie egale. Matricea T este o matrice diagonală de permutare.

Calculul valorilor singulare ale unei matrice se realizează cu funcţia svd,

fiind şi un mijloc sigur de determinare a rangului unei matrice. Funcţia svd se apelează cu una dintre sintaxele:

• S1=svd(X), când se returnează un vector S1, care conţine valorile singulare ale matricei X;

• [U,S,V]=svd(X), care returnează o matrice diagonală S, cu aceleaşi dimensiuni ca X, având elementele diagonale nenegative (care sunt şi valorile singulare), în ordine descrescătoare şi matricele unitare U şi V, astfel încât X= U*S*V' ;

• [U,S,V]=svd(X,0), realizează un calcul mai rapid al valorilor singulare, considerând, în cazul unei matrice X, de m x n, cu m>n, numai primele n coloane, pentru U şi S de n x n.

Descompunerea în valori singulare a matricei X=[1 2;3 4;5 6;7 8] se poate realiza cu

S1=svd(X) ; [U,S,V]=svd(X) ; [U0,S0,V0]=svd(X,0); rezultând:

S1 = [ 14.2691 ; 0.6268]; U = [ -0.1525 -0.8226 -0.3945 -0.3800 -0.3499 -0.4214 0.2428 0.8007 -0.5474 -0.0201 0.6979 -0.4614 -0.7448 0.3812 -0.5462 0.0407 ] S = [ 14.2691 0 ; 0 0.6268 ; 0 0; 0 0 ] V = [ -0.6414 0.7672 ; -0.7672 -0.6414 ] U0 = [ -0.1525 -0.8226 ; -0.3499 -0.4214 ; -0.5474 -0.0201; -0.7448

0.3812 ] S0 = [ 14.2691 0 ; 0 0.6268 ] ; V0 = [ -0.6414 0.7672 ; -0.7672 -

0.6414 ] Calculul valorilor singulare generalizate se realizează cu funcţia gsvd.

Funcţia gsvd se apelează cu relaţia [U,V,X,C,S] = gsvd(A,B),

care returnează matricele unitare U şi V ale matricei, de regulă, pătrate X şi matricele diagonale nenegative C şi S, astfel încât:

A = U*C*X' B = V*S*X' C'*C + S'*S = I. Matricele A şi B trebuie să aibă acelaşi număr de coloane, dar pot avea

Page 30: Algebra Numerica Liniara

Algebră numerică liniară 167

număr de linii (rânduri) diferite. Dacă A este de m x p şi B de n x p, atunci U este de m x m, V este de n x n şi X este de p x q, unde q=min(m+n,p).

Funcţia gsvd apelată SIGMA = gsvd(A,B) returnează vectorul valorilor singulare generalizate, adică sqrt(diag(C'*C)./diag(S'*S)).

Pentru manipularea valorilor şi a vectorilor proprii ai unor matrice mari sau rare, calculate cu eigs, se utilizează funcţia svds, în locul funcţiei svd.

Calculul coeficienţilor unui polinom, având date rădăcinile, se realizează cu funcţia poly, care se apelează cu sintaxele:

• c=poly(r) – când returnează un vector linie, c, conţinând coeficienţii polinomului, în ordinea descrescătoare a puterilor, iar r este un vector ce conţine rădăcinile polinomului;

• c=poly(A) – returnează coeficienţii c, în ordinea descrescătoare, ai polinomului caracteristic al matricei A, de tipul n x n .

Calculul coeficienţilor unui polinom, la care se cunosc valorile proprii, se realizează cu funcţia polyeig.

Calculul numărului de condiţionare, ţinând seama de valorile proprii ale unei matrice, se obţine cu funcţia condeig, care se apelează frecvent,

[V,D,s] = condeig(A) care este echivalent cu: [V,D] = eig(A); s = condeig(A).

7.6. Funcţii de matrice

Exponenţiala unei matrice iniţiale ,X, se calculează cu funcţia expm. Calculul se face utilizând aproximaţia Pade, iar apelarea cu Y=expm(X), Y fiind matricea exponenţială a lui X. Dacă X are un set de vectori proprii V, cu valorile proprii corespondente D, atunci:

[V,D]=eig(X) expm(X)=V*diag(exp(diag(D)))/V. De menţionat că, exponenţiala unei matrice, funcţia expm(X), este

diferită de funcţia exp(X), care calculează element cu element.

Sunt disponibile trei variante de calcul:

• Y=expm1(X), care este identică cu expm, iar calculul se face cu aproximaţia Pade;

• Y=expm2(X), la care calculul exponenţialei este cel clasic, prin serii Taylor, dar carculul este lent şi cu erori;

• Y=expm3(X), calculul se efectuează prin intermediul vectorilor şi valorilor proprii şi diagonalizare, dar poate da erori dacă matricea X nu are un set de vectori proprii liniar independenţi.

Page 31: Algebra Numerica Liniara

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE 168

Considerăm matricea X= [ 1 1 0 ; 0 0 2 ; 0 0 -1 ]. Aplicând diversele funcţii de calcul ale exponenţialei, obţinem:

exp(X) = [ 2.7183 2.7183 1.0000 1.0000 1.0000 7.3891 1.0000 1.0000 0.3679 ], expm(X) = [ .7183 1.7183 1.0862 0 1.0000 1.2642 0 0 0.3679 ]. Pentru acest caz, toate varianteleexpm1, expm2, expm3, conduc la acelaşi

rezultat. Logaritmul unei matrice ,X, se calculează cu funcţia logm(X) şi este inversa

funcţiei expm(X). Dacă X are valori proprii negative, atunci rezultatul este complex. Dacă logaritmul matricei nu se calculează cu suficientă precizie, se dă un mesaj de eroare. Pentru a evita mesajul de eroare, se preferă apelarea funcţiei sub forma,

[L,esterr] = logm(A), care returnează eroarea reziduală egală cu norm(expm(L)-A)/norm(A).

Dacă X este real simetrică sau hermitică complexă, atunci are log(X). Unele matrice, ca de exemplu A=[0 1 ; 0 0], nu au logaritm, nici real şi nici complex şi, prin urmare, funcţia log(A) nu returnează nimic.

Pentru majoritatea cazurilor, logm(expm(X)) = X = expm(logm(X)). Calculele se efectuează după algoritmul Parlett, care utilizează

descompunerea (factorizarea) Schur. Radicalul unei matrice A este calculat de funcţia sqrtm. Apelată sub

forma X=sqrtm(A), aceasta calculează radicalul matricei A, astfel încât X*X = A. Matricea X este unică, dacă valorile proprii ale părţii reale nu sunt negative. Dacă o valoare proprie a părţii reale este negativă, atunci rezultatul este complex.

Dacă matricea A este singulară, aceasta poate să nu aibă matrice radical şi, în acest caz, se dă un mesaj de eroare. Apelată cu două argumente, [X, RESNORM] = sqrtm(A), nu dă nici un mesaj de eroare, ci returnează reziduu norm(A-X^2,'fro')/norm(A,'fro').

Apelată cu trei argumente de ieşire, [X, ALPHA, CONDEST] = sqrtm(A),

returnează factorul de stabilitate, ALPHA şi numărul de condiţionare, CONDEST, al matricei. Reziduu norm(A-X^2,'fro')/norm(A,'fro') este aproximat de N*ALPHA*EPS, iar norma relativă Frobenius, a erorii lui X este aproximată de N*ALPHA*CONDEST*eps, unde N = max(size(A)).

Funcţia generală de evaluare a unei matrice, A, este funm şi este apelată sub forma:

F=funm(A,fun), unde fun poate fi expm, logm, sqrtm sau o altă funcţie internă, ca de exemplu sin, introdusă ca funcţie handler, @.