Sunteți pe pagina 1din 11

Copyright © 2023

LABORATOR 4

ALGEBRĂ LINIARĂ

INFORMATICĂ APLICATĂ
Eliza-Isabela TICĂ, Angela NEAGOE și Sanda-Carmen GEORGESCU

Catedra de Hidraulică, Mașini Hidraulice și Ingineria Mediului, Facultatea de


Energetică, Universitatea POLITEHNICA din București
NOȚIUNI DE ALGEBRĂ LINIARĂ

Funcțiile din GNU Octave și MATLAB acoperă o mare parte din problemele de
algebră liniară, permițând calcularea inversei și rangului unei matrice,
rezolvarea sistemelor de ecuații liniare, determinarea polinomului caracteristic
al unei matrice, a valorilor și vectorilor proprii ai unei matrice, utilizarea
funcțiilor de matrice, utilizarea matricelor speciale etc.

Sintaxa Descriere și exemple


inv(A) Dacă A este o matrice pătratică nesingulară, atunci inv(A) sau
inverse(A) inverse(A) calculează matricea inversă A −1 cu proprietatea
A  A −1 = A −1  A = I , unde I este matricea unitate.
Exemplul:
 A = [1 2 3; 4 5 6; 7 3 9];
 inv(A) % returnează:
ans =
-0.90000 0.30000 0.10000
-0.20000 0.40000 -0.20000
0.76667 -0.36667 0.10000
rank(A) Calculează rangul matricei A (rangul unei matrice este rangul maxim
al determinantului diferit de zero ”cuprins” în matrice).
Exemplul :
 A = [1 2 3; 4 5 6; 7 3 9];
 rank(A) % returnează ans = 3
det(A) Calculează determinatul unei matrice pătratice A .Exemplul 5:
 A = [1 2 3; 4 5 6; 7 3 9];
 det(A) % returnează ans = -30
trace(A) Calculează urma matricei pătratice A (suma elementelor de pe
diagonala principală).
Exemplul:
 A = [1 2 3; 4 5 6; 7 3 9];
 trace(A) % returnează ans = 15
norm(A,p) norm(A,p) calculează norma-p a matricei A , adică:
norm(A,p) = max(svd(A))
Funcția svd(A) returnează vectorul (de tip coloană) a valorilor
singulare ale descompunerii matricei A .
norm(A) Dacă nu se specifică valoarea lui p, atunci norm(A) calculează
norma-2 a matricei A (adică p = 2).
norm(v,p) norm(v,p) calculează norma-p a vectorului v, adică:
norm(v,p)= (sum(abs(v).^p))^(1/p)
norm(v)

Laboratorul 4 Informatică Aplicată 2


Dacă nu se specifică valoarea lui p, atunci norm(v) calculează norma-2 a
vectorului v (adică p = 2).
Exemplul:
 A = [1 2 3; 4 5 6; 7 3 9];
 norm(A,2) % sau norm(A) returnează
ans = 14.913 % adică max(svd(A))
 v = [1 2 3 4 5 6 7 8 9];
 norm(v,2) % sau norm(v) returnează
ans = 16.882 % adică sum(abs(v).^2)^(1/2)
diag(A) diag(A) extrage din matricea A elementele de pe diagonala principală
și le inserează într-un vector coloană.
diag(A,n) diag(A,n) returnează un vector coloană cu elementele lui A situate pe
diagonala  n (situate deasupra diagonalei principale pentru valori
n = 1,2,3,... sau sub diagonala principală pentru n = −1,−2,−3,... );
diagonala principală este definită pentru n = 0 .
Dacă v este un vector, diag(v) construiește o matrice pătratică, de
diag(v) dimensiune egală cu lungimea vectorului, având pe diagonala
principală elementele vectorului, iar restul elementelor sunt egale cu
zero;
diag(v,n) returnează o matrice pătratică de dimensiune (n +
diag(v,n) dimensiunea lui v ), în care elementele lui v sunt plasate pe
diagonala n (deasupra diagonalei principale), iar restul elementelor
sunt egale cu zero.
Exemplul:
 A = [1 2 3; 4 5 6; 7 3 9];
 diag(A) % returnează
ans =
1
5
9
 diag(A,-1) % returnează
ans =
4
3
Exemplul:
 v = [5 8 -3]
 diag(v) % returnează rezultatul:
ans =
Diagonal Matrix
5 0 0
0 8 0
0 0 -3
 diag(v,1) % returnează rezultatul:
ans =
0 5 0 0
0 0 8 0
0 0 0 -3
0 0 0 0

Laboratorul 4 Informatică Aplicată 3


cross(v1,v2) Dacă v1 = (a, b, c ) și v2 = (d, e, f ) sunt doi vectori din R3/R, atunci
cross(v1,v2) calculează produsul vectorial pv = v1  v2 al celor 2
vectori și returnează componentele vectorului rezultant:
pv = (b  f − c  e, c  d − a  f, a  e − b  d )
Exemplul:
 v1 = [1 2 3];
 v2 = [-1 7 4];
 pv = cross(v1,v2) % returnează
pv = -13 -7 9
dot(v1,v2) Calculează produsul scalar ps = v1  v2 al vectorilor v1 și v2 de aceeași
dimensiune, anume ps = sum(v1.*v2), adică suma produselor
componentelor de pe aceeași poziție în cei doi vectori.
Exemplul 11:
 v1 = [1 2 3 -2]; v2 = [-1 7 4 7];
 ps = dot(v1,v2) % returnează
ps = 11 % adică sum(v1.*v2)
pinv(A) Calculează pseudoinversa matricei A de dimensiuni n  m . Pentru a
rezolva un sistem de ecuaíi A  X = B liniar supradeterminat ( n  m )
sau subdeterminat ( n  m ), se folosește pseudoinversa matricei A .
Dacă matricea A T  A este nesingulară, atunci există pseudoinversa
( )
−1
A I = A T  A  A T . În acest caz soluția sistemului este X = AI  B . În
cazul în care matricea A este pătratică și nesingulară, pinv(A) =
inv(A)
Exemplul:
 A = [1 2 3; 4 5 6]; B = [-1; 0];
 pinv(A) % returnează matricea
ans =
-0.94444 0.44444
-0.11111 0.11111
0.72222 -0.22222
 X = A\B % soluția sistemului subdeterminat este
X=
0.94444
0.11111
-0.72222
Exemplul:
 A = [2 6; -2 5; 1 6]; B = [3; 10; -2];
 pinv(A) % returnează matricea
ans =
0.180470 -0.289246 0.060569
0.046972 0.075402 0.056860
 X = A\B % soluția sistemului supradeterminat este
X=
-2.47219
0.78121

Laboratorul 4 Informatică Aplicată 4


lambda = Calculează valorile proprii ale matricei pătratice A , adică scalarii λ
eig(A) (lambda) cu proprietatea: A  V = λ  V , unde V reprezintă vectorii
proprii.
[V,lambda] = Calculează vectorii proprii V și valorile proprii λ (lambda) pentru
eig(A) matricea A pătratică, cu proprietatea: A  V = λ  V , unde
A  Rnn , V  Rn1 , λ  R .
Exemplul:
 A = [-1 2 2; 2 2 2; -3 -6 -6];
Să se calculeze valorile caracteristice și vectorii proprii pentru A .
 [V, lambda] = eig(A) % returnează
V=
-5.6585e-016 8.9443e-001 -7.0711e-001
7.0711e-001 -4.4721e-001 1.3084e-016
-7.0711e-001 1.1322e-015 7.0711e-001
lambda =
Diagonal Matrix
-2.2204e-015 0 0
0 -2.0000e+000 0
0 0 -3.0000e+000
Exemplul:
 A = [1 3 0;1 2 2; 3 1 1];
 [V, lambda] = eig(A)
% returnează
V=
-0.51131+0.00000i -0.24119+0.53028i -0.24119-0.53028i
-0.62784+0.00000i -0.20262-0.37841i -0.20262+0.37841i
-0.58684+0.00000i 0.69021+0.00000i 0.69021-0.00000i
lambda =
Diagonal Matrix
4.68376 + 0.00000i 0 0
0 -0.34188 + 1.75661i 0
0 0 -0.34188 - 1.75661i
poly(A) Dacă matricea A  R nn atunci polinomul:
PA (λ ) = det (A − λ  I ) = 0
se numește polinomul caracteristic al matricei A .
Funcția poly(A) returnează un vector linie cu coeficienții
polinomului. Comanda roots(poly(A)) determină rădăcinile
polinomului caracteristic, adică valorile proprii λ
Exemplul:
 A = [1 3 0; 1 2 2; 3 1 1];
 p = poly(A) % returnează
p=
1.0000e+000 -4.0000e+000 -1.0436e-014 -1.5000e+001
 lambda = roots(p) % returnează
lambda =
4.68376 + 0.00000i
-0.34188 + 1.75661i

Laboratorul 4 Informatică Aplicată 5


-0.34188 - 1.75661i
Aceleași valori ale lui λ se obțin și cu funcția eig(A)
G = fliplr(A) Rotește matricea A de la stânga la dreapta, în jurul unei axe verticale.
Dacă matricea A este pătratică, diagonala secundară a lui A devine
diagonală principală pentru G. Se reamintește că pentru o matrice A
de dimeniuni n  n , diagonala principală are elementele A ii , iar
diagonala secundară are elementele Ai,n −i +1 , unde i = 1,...,n .

REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE


PRIN METODE DIRECTE - FOLOSIREA
OPERATORULUI BACKSLASH

În notaţie matriceală, un sistem de ecuații liniare se scrie sub forma A  X = B , unde


nm
AR , B  Rn  1 .
Sistemul liniar oarecare A  X = B poate fi rezolvat prin metode directe cu ajutorul
operatorului backslash. Comanda X = A \ B implică următoarele moduri de rezolvare:
• Dacă A este o matrice pătratică superior triunghiulară (toate elementele de sub diagonala
principală sunt nule) sau inferior triunghiulară (toate elementele de deasupra diagonalei
principale sunt nule), atunci sistemul se rezolvă prin substituţie inversă sau directă;
• Dacă A este o matrice pătratică de dimensiuni n  n , sistemul se poate rezolva prin
descompunerea LU (sau factorizarea triunghiulară). Utilizând sintaxa [L,U] = lu(A),
matricea A se poate descompune într-un produs de două matrice: A = L  U , unde L , de
dimensiuni n  n , este o matrice inferior triunghiulară (litera L semnifică lower în engleză),
iar U , de dimensiuni n  n , este o matrice superior triunghiulară (litera U semnifică upper în
engleză). După descompunerea A = L  U , sistemul se rezolvă prin substituţie inversă;
• Dacă A este o matrice simetrică sau dacă este o matrice hermitiană
( A  R nn este simetrică dacă Aij = A ji , respectiv este hermitiană dacă Aij = A ji ), se verifică
dacă toate elementele diagonale sunt pozitive și se încearcă metoda de descompunere
Cholesky, care produce o matrice superior triunghiulară R care satisface ecuația A = R  R .
Dacă descompunerea R = chol(A) se aplică cu succes, sistemul se rezolvă apoi prin
substituţie;
• Dacă A nu este matrice pătratică, atunci se aplică descompunerea QR (sau factorizarea
QR), prin comanda [Q,R] = qr(A). Descompunerea QR a unei matrice A  R n  m este
descompunerea A = Q  R , într-un produs dintre o matrice ortogonală Q și una superior
triunghiulară R . Descompunerea QR este folosită pentru a rezolva sistemele de ecuații prin
aproximare în sensul celor mai mici pătrate;
• Dacă A este o matrice Hessenberg H (un tip special de matrice pătrată, care este
„aproape” superior triunghiulară, cu Hij = 0 pentru i  ( j + 1) ), atunci A se descompune cu
sintaxa [P,H] = hess(A) și apoi sistemul se rezolvă prin substituţie inversă. În factorizarea
Hessenberg (sau descompunerea Hessenberg), A = P  H  P , unde P este o matrice pătrată
cu proprietatea P  P = I .

Laboratorul 4 Informatică Aplicată 6


A\B Dacă A este o matrice pătratică nesingulară de dimensiune n  n și B
(backslash) este un vector coloană n  1 , atunci X = A \ B este soluția sistemului
de ecuații compatibil determinat A  X = B (calculată prin
pivotare Gauss). Aceeași soluție se obține și cu comanda X = inv(A)*B
Exemplul:
Fie sistemul A  X = B , unde B este vector linie 1 n ; soluția sistemului
se determină astfel: X = A \ B' .
 A = [1 0 3; 4 5 6; 7 3 -1]; B = [1 2 3];
 X = A\B' % returnează soluția (X vector coloană):
X=
0.54348
-0.21739
0.15217
aceeași soluție X poate fi obținută și cu comanda
 X = inv(A)*B'
Operatorul \ se foloseşte şi pentru determinarea unei soluţii particulare
pentru sistemele de ecuaţii compatibile nedeterminate sau
soluții aproximative pentru sistemele liniare incompatibile
(soluţii în sensul celor mai mici pătrate).

Exemplul: Să se rezolve sistemul de ecuaţii:


x + y + z = 1
2x − y − z = 3

 .
 x + 8y + 4z = 6

x − y − z = 4
 A = [1 1 1; 2 -1 -1; 1 8 4; 1 -1 -1];
 B = [1; 3; 6; 4];
 X = A\B % returnează soluția
X=
1.5000
2.1250
-3.1250
 X = pinv(A)*B
returnează aceeași soluție ca și X = A\B
 rank(A) % este egal cu 3
 rank([A B]) % calculează rangul matricei extinse, care în acest caz
este egal cu 4
Deoarece cele două ranguri sunt diferite, conform teoremei lui Kronecker-
Capelli sistemul este incompatibil.
Într-adevăr, dacă se face verificarea soluției obținute:
 verificare = A*X
0.5000
4.0000
6.0000
2.5000
rezultă că vectorul verificare obținut diferă de B, deci soluția X nu verifică toate
ecuaţiile sistemului A  X = B

Laboratorul 4 Informatică Aplicată 7


B/A Fie sistemul X  A = B .Dacă A este o matrice pătratică nesingulară de
(slash) dimensiune n  n și B este un vector linie n  1 , atunci X = B / A este
soluția sistemului de ecuații compatibil determinat. Aceeași
soluție se obține și cu comanda X = B *inv(A).

PROBLEME REZOLVATE
R1. Să se genereze matricea magică 5  5 (cu 5 linii şi 5 coloane) și să se calculeze
suma elementelor de pe prima şi a treia linie, prima şi a doua coloană şi de pe cele două
diagonale (principală și secundară).
Rezolvare:
 M = magic(5);
 L1 = sum(M(1,:)) % returnează L1 = 65
 L3 = sum(M(3,:)) % returnează L3 = 65
 C1 = sum(M(:,1)) % returnează C1 = 65
 C2 = sum(M(:,2)) % returnează C2 = 65
 D1 = trace(M) % sau D1 = sum(diag(M)) returnează D1 = 65
 D2 = trace(fliplr(M)) % returnează D2 = 65

Laboratorul 4 Informatică Aplicată 8


R2. Să se rezolve sistemul de ecuații liniare A  X = B , cu 2 ecuații și 5 necunoscute
(sistem subdeterminat), utilizând metodele directe bazate pe operatorul backslash, respectiv
pe funcția pinv.
Componentele sistemului sunt:
 1 2 3 4 5
A =   ,
 − 2 1 10 − 3 9 
 x1 
 
 x2 
 3
X =  x3  și B =   .
  5
 x4 
 x5 
 
Rezolvare:
 A = [1 2 3 4 5; -2 1 10 -3 9]; B = [3; 5];
 rank(A) % returnează ans = 2
 rank([A B]) % unde [A B] este matricea extinsă, returnează ans = 2
Din punct de vedere al teoremei lui Kronecker-Capelli, sistemul este compatibil
nedeterminat.
 X = A\B, X = pinv(A)*B
X=
0.014506
0.092658
0.247188
0.121670
0.314387
 verificare = A*X % returnează exact vectorul B:
verificare =
3.0000
5.0000

PROBLEME PROPUSE
P1. Se dau matricele:
 5 − 2 2 2 − 1 1
   
A =  − 2 6 0  și B =  2 − 1 2 
 − 2 0 4 1 − 3 1
   
Să se verifice prin calcul că det(A*B) = det(A)*det(B) și (A*B)' = B'*A'.

P2. Pentru matricea A definită la problema P1, se cere să se calculeze: rangul,


transpusa, determinantul și inversa matricei.

P3. Se dă sistemul de ecuații liniare:


2x − y + z = 1

2x − y + 2z = 2
x − 3y + z = 3

Se cere:

Laboratorul 4 Informatică Aplicată 9


• Să se scrie sistemul sub forma matriceală A  X = B . Să se calculeze rangul, transpusa,
determinantul și inversa matricei A . Să se verifice prin calcul că: A * A −1 = eye(3) .
• Să se rezolve sistemul matriceal A  X = B folosind inversa matricei A . Soluția se cere în
format long. Să se verifice soluția obținută.

P4. Se dă matricea
 7 4 − 1
 
A= 4 7 − 1
− 4 − 4 4 
 
Să se calculeze:
• Rădăcinile polinomului caracteristic PA (λ ) = 0 al matricei A .
• Să se calculeze valorile proprii și vectorii proprii pentru matricea A .

Laboratorul 4 Informatică Aplicată 10


INFORMATICĂ
APLICATĂ
MANUAL DE GNU
OCTAVE 2019
https://curs.upb.ro/2022/course/view.php?id=973&notifyeditingon=1

Laboratorul 4 Informatică Aplicată 11

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