Sunteți pe pagina 1din 65

Petru Florin Gavril Capitolul IV - Matrice

101

CAPITOLUL IV - MATRICE

IV.1. Matricea n algebr
IV.1.1. Generaliti. Notaii i definiii
Definiia 4.1.1
O ecuaie liniar cu n necunoscute x
1
, x
2
, ...,x
n
este o ecuaie de forma
a
1
x
1
+a
2
x
2
+......+a
n
x
n
=b (1)
unde a
i
(i=1,2,...,n) i b sunt numere complexe.
Vom considera un sistem de m astfel de ecuaii cu n necunoscute:

= + + +
= + + +
= + + +
m n mn m m
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
..... .......... .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(2)
unde a
ij
,b
i
(i=1,2,...,m,j=1,2,,n) sunt numere complexe. Numerele a
ij
poart numele de
coeficieni ai necunoscutelor, iar numerele b
i
se numesc termeni liberi.
A rezolva sistemul (2) nseamn a determina toate sistemele ordonate de numere
(
1
,
2
, ...
n
) astfel nct nlocuim n sistem necunoscutele x
1
, x
2
, ...,x
n
respectiv cu
numerele
1
,
2
, ...
n
fiecare dintre ecuaiile sistemului este verificat. Se tie c un astfel
de sistem pentru cazul n=m=2 sau n=m=3 se pot rezolva folosind metoda substituiei sau a
reducerii. Cum practica impune rezolvarea unor sisteme de forma (2) care au un numr
mare de ecuaii i necunoscute, exist metode generale de rezolvare prin operaii aplicate
coeficienilor necunoscutelor precum i termenilor liberi ai sistemului. Acest lucru impune
un studiu mai atent al sistemelor de ecuaii liniare, studiu n care un rol important l au
urmtoarele dou matrice:
A =
|
|
|
|
|
.
|

\
|
mn m m
n
n
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
respectiv
A
=
Prima matrice se numete matricea sistemului (2), iar a doua matrice este cunoscut sub
numele de matricea extins a sistemului (2). n capitolul urmtor vom vedea clar
importana acestor dou matrice n studiul sistemelor de ecuaii liniare.
|
|
|
|
|
.
|

\
|
m mn m m
n
n
b a a a
b a a a
b a a a
...
... ... ... ... ...
...
...
2 1
2 2 22 21
1 1 12 11
Petru Florin Gavril Capitolul IV - Matrice



102
Noiunea de matrice:
Fie M = {1, 2, m}, N = {1, 2, n} mulimea primelor m respectiv n numere naturale
nenule. Vom nota cu C, aa cum am obinuit, mulimea numerelor complexe i fie E _ C.
Definiia 4.1.2
Numim matrice de tipul (m, n) cu elemente din E o funcie A : M N E, astfel
nct perechii ordonate (i, j) i corespunde elementul a
ij
e E,:
A(i, j) = a
ij
e E, () (i, j) e M N.
Reprezentarea n mod natural a unei matrice este un tablou bidimensional cu m linii i n
coloane se face astfel:
A =
|
|
|
|
|
.
|

\
|
mn m m
n
n
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
(3)
Datorit notaiei (3), n loc de matrice de tipul (m, n) se mai spune matrice cu m linii i n
coloane. Numerele a
ij
se numesc elementele matricii A; i reprezint linia, iar j reprezint
coloana n care este situat elementul a
ij
al tabloului A.
De multe ori matricea A se mai noteaz i astfel:
A = ( )
n j
m i
ij
a
s s
s s
1
1 sau A = ( )
n j
m i
ij
a
,... 1
,... 1
=
= (3)
Restricia funciei A la mulimea elementelor de forma (i, 1), (i, 2), (i, n) definete linia
de rang i a matricei. De fapt, linia de rang i a matricei este determinat de irul de
elemente a
i1
, a
i2
, a
in
, i e {1, 2, m}.
n mod analog, restricia funciei A la mulimea elementelor de forma (1, j), (2, j), (n, j),
unde j e {1, 2, n}, definete coloana de rang j a matricei A.
O matrice de tipul (m, n) are m*n elemente.
Noiunea de matrice a fost introdus n studiul sistemelor de ecuaii liniare de ctre
matematicianul englez Arthur Caylay (1821-1895) n anul 1858. El a folosit notaia A =
n j
m i
ij
a
s s
s s
1
1
, notaia (3) fiind introdus de M. Bocher n anul 1919.
Noiunea de matrice s-a introdus pentru algebrizarea noiunii de reprezentare geometric
unei transformri geometrice asociindu-i-se o matrice pentru a reduce studiul
transformrilor geometrice la studiul matricelor.
Matricele pot fi gndite i ca o generalizare a vectorilor vectorii sunt matrice cu o singur
linie sau cu o singur coloan.
Petru Florin Gavril Capitolul IV - Matrice



103
Cazuri particulare:
1) Dac n = 1, matricea de tipul (m, 1) se numete matrice coloan i este de
forma:
A =
|
|
|
|
|
|
.
|

\
|
1
31
21
11
m
a
a
a
a

.
2) Dac m = 1, matricea de tipul (1, n) se numete matrice linie i este de forma:
A = (a
11
, a
12
, a
13
, a
1n
)
3) Dac m = n, matricea de tipul (m, n) se numete matrice ptratic de ordinul n
i este de forma:
A =
|
|
|
|
|
.
|

\
|
nn n n
n
n
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
.
Pentru o matrice ptratic de ordin n, sistemul ordonat de elemente
(a
11
, a
22
, a
33
, a
nn
) se numete diagonala principal a matricei A, iar sistemul ordonat de
elemente (a
1n
, a
2n-1
, a
3n-2
, a
n1
) se numete diagonala secundar a matricei A.
Suma de forma a
11
+ a
22
+ a
33
+ + a
nn
se numete urma matricei A i se
noteaz:
Tr(A) =

=
n
i
ii
a
1
.
Vom nota cu M
n
(C) mulimea tuturor matricelor ptratice de ordin n cu elemente din C i
cu M
mn
(C) mulimea tuturor matricelor de tip (m, n) cu elemente din C. n mulimea M
n
(C) exist i urmtoarele cazuri particulare de matrice:
1) matricea unitate de ordin n de forma:
I
n
=
|
|
|
|
|
.
|

\
|
1 ... 0 0 0
... ... ... ... ...
0 ... 0 1 0
0 ... 0 0 1
cu a
11
= 1, i = 1, n i a
ij
=0, () i = j.
Se mai noteaz astfel:
I
n
= (o
ij
)
n j i s s , 1
, unde o
ij
este simbolul lui Kronecker, definit astfel
Petru Florin Gavril Capitolul IV - Matrice



104
o
ij
=

=
=
j i daca
j i daca
0
1
.
2) matricea diagonal de ordin n de forma:
A =
|
|
|
|
|
.
|

\
|
nn
a
a
a
... 0 0 0
... ... ... ... ...
0 ... 0 0
0 ... 0 0
22
11
= (a
ij
o
ij
)
n j i s s , 1
.
3) matrice triunghiular de ordin n care poate fi de forma:
A
1
=
|
|
|
|
|
.
|

\
|
nn n n n
a a a a
a a
a
...
... ... ... ... ...
0 ... 0
0 ... 0 0
3 2 1
22 21
11
sau A
2
=
|
|
|
|
|
.
|

\
|
nn
n
n
a
a a a
a a a a
... 0 0 0
... ... ... ... ...
... 0
...
2 23 22
1 13 12 11
.
Este matricea n care a
ij
= 0 pentru i < j, sau pentru i > j.
A
1
se numete matrice triunghiular inferior, iar A
2
se numete matrice
triunghiular superior
4) matricea scalar de forma:
A =
|
|
|
|
|
.
|

\
|
o
o
o
... 0 0 0
... ... ... ... ...
0 ... 0 0
0 ... 0 0
, unde e C.
5) matricea nul este matricea n care toate elementele sunt egale cu 0; este de
forma:
0
n
=
|
|
|
|
|
.
|

\
|
0 ... 0 0 0
... ... ... ... ...
0 ... 0 0 0
0 ... 0 0 0

n mulimea M
mn
(C) distingem cteva submulimi importante i anume:
M
mn
(9) care reprezint mulimea matricelor ptratice de tipul (m, n) cu elemente numere
reale, M
mn
(Q) care reprezint mulimea matricelor ptratice de tipul (m, n) cu elemente
numere raionale, M
mn
(Z) care reprezint mulimea matricelor ptratice de tipul (m, n) cu
elemente numere ntregi.
Este clar c avem incluziunile:
M
mn
(Z) c M
mn
(Q) c M
mn
(9) c M
mn
(C).
Petru Florin Gavril Capitolul IV - Matrice



105
Elementele mulimii M
mn
(C) se noteaz cu litere mari din alfabetul latin: A, B, C, sau
A, B, C, .
Egalitatea matricelor
Fie A i B e M
mn
(C) dou matrice. Cum A i B sunt funcii A, B : M N C, spunem
c matricele A i B sunt egale dac i numai dac sunt egale ca funcii.
Deci, A = B () i e M, j e N, A(i, j) = B(i, j).
Folosind notaia (3) corespunztoare unei matrice i presupunnd c:
A =
|
|
|
|
|
.
|

\
|
mn m m
n
n
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
i B =
|
|
|
|
|
.
|

\
|
mn m m
n
n
b b b
b b b
b b b
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11

Atunci A = B a
ij
= b
ij,
() i e M, j e N.
IV.1.2. Operaii cu matrice
IV.1.2.1 Adunarea matricelor
Definiia 4.1.3
Fie A, B e M
mn
(C), A = ( )
n j
m i
ij
a
s s
s s
1
1 , B = ( )
n j
m i
ij
b
s s
s s
1
1 . Definim matricea
C = ( )
n j
m i
ij
c
s s
s s
1
1 astfel:
c
ij
= a
ij
+ b
ij
, () i = m , 1 , j = n , 1 .
Matricea C se numete suma matricelor A i B i se noteaz C = A + B.
Definiia 4.1.4
Operaia intern pe M
mn
(C), prin care oricror dou matrice A, B se asociaz
suma lor C, se numete adunarea matricelor.
Observaie:
Are sens s vorbim de adunarea matricelor doar dac ele sunt de acelai tip.
Proprietile adunrii matricelor:
1) Comutativitatea: ()A, B e M
mn
(C), A + B = B + A.
2) Asociativitatea: ()A, B, C e M
mn
(C), (A + B) + C = A + (B + C).
Demonstraia decurge din asociativitatea numerelor complexe.
3) Element neutru: matricea nul (cu toate elementele nule) are rol de element
neutru la adunarea matricelor, adic:
()A e M
mn
(C), A + O
mn
= O
mn
+ A.
Petru Florin Gavril Capitolul IV - Matrice



106
4) Matricea opus: ()A e M
mn
(C), (-) A e M
mn
(C), astfel nct
A + (-A) = (-A) + A = O
mn
Observaii:
1) Proprietile de mai sus arat c mulimea M
mn
(C) are o structur de grup
abelian.
2) Odat cu adunarea, se definete i operaia de scdere a matricelor. Prin
diferena A-B se nelege matricea A+(-B).
3) Ecuaia matriceal B + X = A, unde A, B e M
mn
(C) are drept soluie unic
matricea X = A-B, cu X e M
mn
(C).
IV.1.2.2. nmulirea matricelor cu scalari din corpul K
Definiia 4.1.5
Se numete produs dintre numrul e K i matricea A = ( )
n j
m i
ij
a
s s
s s
1
1 e M
mn
(K),
matricea B = ( )
n j
m i
ij
b
s s
s s
1
1 e M
mn
(K), notat B = A, unde b
ij
= a
ij
.
Deci, nmulirea cu scalari din corpul K a matricelor din M
mn
(K) este o operaie
extern, care asociaz fiecrei perechi (, A) e K M
mn
(K) o matrice A e M
mn
(K).
Observaie:
nmulirea cu scalari din corpul K se poate defini pentru orice matrice, adic este
o operaie peste tot definit pe M (K), unde am notat cu M (K) mulimea tuturor matricelor
cu elemente din corpul K.
Operaia astfel definit are urmtoarele
Proprieti:
1) 1A = A, 1 e K este elementul unitate din K.
2) (A) = ()A, unde , e K, A e M (K).
3) (A + B) = A + B, unde e K, A, B e M (K).
4) ( + )A = A + A, unde , e K, A e M (K).
Se constat deci c operaiile de adunare i nmulire a matricelor cu scalari din
corpul K determin pe M
mn
(K) o structur de spaiu liniar peste corpul K.
IV.1.2.3. nmulirea matricelor
Definiia 4.1.6
Fie A = ( )
n j
m i
ij
a
s s
s s
1
1 o matrice de tip (m, n) i B = ( )
p j
n i
ij
b
s s
s s
1
1 o matrice de tip (n, p). Prin
produsul matricelor A i B, notat AB se nelege o nou matrice C=( )
p j
m i
ij
c
s s
s s
1
1 de tipul (m, p)
Petru Florin Gavril Capitolul IV - Matrice



107
n care orice element c
ij
situat la intersecia liniei i cu coloana j este egal cu suma
produselor elementelor din linia i a matricei A cu elementele din coloana j a matricei
B, efectuat dup regula urmtoare.
c
ij
= a
i1
b
1j
+ a
i2
b
2j
+ + a
in
b
nj
=
kj
n
k
ik
b a

=1
, () i= m , 1 , j= n , 1 (1)
Proprieti:
1) Distributivitatea fa de adunare
Dac A e M
mn
(K), iar B
1
, B
2
e M
np
(K), atunci are loc relaia:
A(B
1
+ B
2
) = A B
1
+ AB
2
(2)
Dac A
1
, A
2
e M
mn
(K), iar B e M
np
(K), atunci are loc relaia:
(A
1
+ A
2
)B = A
1
B + A
2
B (3)
2) Asociativitatea
() A e M
mn
(K), B e M
np
(K) i C e M
pq
(K), are loc egalitatea:
(AB)C = A(BC) (4)
3) () A e M
mn
(K), au loc relaiile:
I
m
A = A (5)
AI
n
= A (6)
unde I
m
este matricea unitate de ordin m, iar I
n
matricea unitate de ordin n.
4) () A e M
mn
(K), au loc relaiile:
O
pm
A = O
pn
(7)
A O
np
= O
mp
(8)
unde O
pm
, O
pn
, O
np
, O
mp
sunt matrice nule.
5) nmulirea matricelor, n general, nu este comutativ
Definiia 4.1.7
Dac A B = B A, atunci matricele A i B se numesc permutabile.
Observaii:
1) Matricea nul O
n
i matricea unitate I
n
de ordin n sunt permutabile cu orice
matrice de acelai ordin, adic au loc relaiile urmtoare:
A I
n
= I
n
A = A (10)
A O
n
= O
n
A = O
n
(11)
() A e M
nn
(K).
Petru Florin Gavril Capitolul IV - Matrice



108
2) Fie A e M
nn
(K). Se definesc puterile matricei A n modul urmtor:
A
0
= I
n
,
A
1
= A,
A
2
= A A,
.
n general, A
n
=


mori
A A A , m e N
IV.1.3. Transpusa unei matrice
Definiia 4.1.8
Fie ( )
n j
m i
ij
a A
s s
s s =
1
1 o matrice de tip (m, n). Matricea ( )
m l
n k
kl
t t
a A
s s
s s =
1
1 , unde

t
a
kl
= a
lk
, () k = 1, n, l = 1, 2, m se numete transpusa matricei A.
Observaii:
1) Matricea
t
A este o matrice de tipul (n, m) i se obine din A lund liniile ,
respectiv coloanele lui A drept coloane, respectiv linii pentru
t
A (mai precis,
prima linie din a matricei
t
A este prima coloan a matricei A, a doua linie a
lui
t
A este a doua coloan a lui A . a. m. d.).
2) Dac A este o matrice ptratic de ordin n, atunci transpusa sa
t
A este de
asemenea o matrice ptratic de ordin n. dac k = l, atunci
t
a
kk
= a
kk
i deci
diagonala principal a matricei
t
A este aceeai cu diagonala principal a
matricei A.
Proprieti:
1) Aplicaia de transpunere este o aplicaie bijectiv a mulimii M
mn
(K) care
satisface relaia:
t
(
t
A) = A , () A e M
mn
(K).
2)
t
(A + B) =
t
A +
t
B, () A, B e M
mn
(K).
3)
t
(A) =
t
A, () A e M
mn
(K) i () e9.
4) Dac ( )
p k
m i
ik
a A
s s
s s =
1
1 i ( )
n j
p k
kj
b B
s s
s s =
1
1 , atunci
t
(A B) =
t
B
t
A.
Tipuri particulare de matrice ptratice
Definiia 4.1.9
O matrice ptratic A se numete simetric dac satisface condiia:
t
A = A.
Observaie
O matrice simetric se caracterizeaz prin faptul c elementele sale aezate
simetric n raport cu diagonala principal sunt egale, adic a
ij
= a
ji
, () i, j = 1, 2, n.
Petru Florin Gavril Capitolul IV - Matrice



109
Propoziia 4.1.1
Mulimea matricelor simetrice de ordin n formeaz un subspaiu liniar al
spaiului liniar M
n
(K).
Observaie:
Produsul a dou matrice simetrice nu este, n general, o matrice simetric.
Definiia 4.1.10
O matrice A se numete antisimetric dac satisface condiia:
t
A = - A.
Observaie:
ntr-o matrice antisimetric, elementele situate simetric n raport cu diagonala
principal sunt opuse, iar elementele diagonalei principale sunt nule, adic:
a
ij
= a
ji
, () i, j = 1, 2, n, i = j
a
ii
= 0, () i = 1, 2, n.
Propoziia 4.1.2
Mulimea matricelor antisimetrice de ordin n formeaz un subspaiu liniar al lui
M
n
(K).
Propoziia 4.1.3
Produsul a dou matrice antisimetrice de ordin n, permutabile ntre ele, este o
matrice simetric de ordin n.
Definiia 4.1.11
O matrice A eM
n
(9) se numete ortogonal dac i numai dac A
t
A = I
n
, unde
I
n
este matricea unitate de ordin n.
Definiia 4.1.12
O matrice AeM
n
(C)este cu elemente pur imaginare dac a
ij
=

ij
a , ( )i, j= n , 1
unde

ij
a este conjugatul numrului complex a
ij
.
Definiia 4.1.13
O matrice A eM
n
(C) se numete hermitic dac A =
t
(
A
).
Definiia 4.1.14
O matrice A eM
n
(C) se numete antihermitic dac A = -
t
(
A
).
Definiia 4.1.15
O matrice A eM
n
(C) se numete unitar dac
t
(
A
)A = A
t
(
A
) = I
n
.
Petru Florin Gavril Capitolul IV - Matrice



110
IV.1.4. Permutrile unei mulimi finite. Determinani.
Permutrile unei mulimi
Definiia 4.1.16
S notm cu A mulimea primelor n numere naturale, adic A = {1, 2, , n}.
O funcie bijectiv : A A se numete permutare (substituie) de gradul n.
Observaii:
1.Vom nota mulimea tuturor permutrilor de gradul n cu S
n
sau cu
n
, iar
elementele din S
n
le vom nota cu litere mici greceti: , , , , , . Se
obinuiete ca o permutare de gradul n s se noteze astfel:
=
( ) ( ) ( )
|
|
.
|

\
|
n
n
o o o ......... 2 1
. .......... 2 1

2.Numrul tuturor permutrilor de grad n este n!.
n mulimea S
n
distingem un element remarcabil i anume funcia identic
1
A
: A A, care poart numele de permutare identic, notat cu e. Aadar,
e =
|
|
.
|

\
|
n
n
... 3 2 1
... 3 2 1
.
Definiia 4.1.17
Fie A = {1, 2, , n}. Definim submulimea M = {(i, j) / 1 i < j n}. Dac e S
n
este o permutare de gradul n, o pereche ordonat (i, j) e M se numete inversiune a
permutrii dac (i) < (j).
Vom nota cu m() numrul tuturor inversiunilor permutrii . Se observ c m()
este cel mult egal cu numrul elementelor mulimii M, care este egal cu C
2
n
.
Deci, 0 m() C
2
n
=
2
) 1 ( n n
.
Numrul () = (-1)
m()
se numete signatura permutrii .
Permutarea se numete par, respectiv impar dac () = +1 respectiv
() = -1.
Determinani
Definiia 4.1.18
Se numete determinant asociat unei matrice de ordin 2 cu a
ij
e K,
K corp comutativ, i, j e {1, 2}, A =
|
|
.
|

\
|
22 21
12 11
a a
a a
, numrul e K, notat cu:
Petru Florin Gavril Capitolul IV - Matrice



111
= detA =
22 21
12 11
a a
a a
= a
11
a
22
- a
12
a
21

Observaie:
Mulimea S
2
a permutrilor mulimii {1, 2} este format din dou elemente:

1
=
|
|
.
|

\
|
2 1
2 1
i
2
=
|
|
.
|

\
|
1 2
2 1
. m(
1
) = 0; m(
2
) = 1 deci
1
permutare par, iar
2

permutare impar.
Definiia 4.1.19
Se numete determinant asociat unei matrice de ordin 3 cu a
ij
e K (K corp
comutativ), i, j e {1, 2, 3}, A=
|
|
|
.
|

\
|
33 32 31
23 22 21
13 12 11
a a a
a a a
a a a
, numrul e K, notat cu:
= detA =
33 32 31
23 22 21
13 12 11
a a a
a a a
a a a
= ( )
3
3
2 1
3 2 1 i
S
i i
a a a

e o
o c

Definiia 4.1.22:
Se numete determinant asociat unei matrice ptratice de ordin n cu a
ij
e K
(K corp comutativ), i, j e {1, 2, , n}, A =
|
|
|
|
|
.
|

\
|
nn n n
n
n
a a a
a a a
a a a

2 1
2 22 21
1 12 11
numrul unic
determinat e K, dat de formula:
= detA =
nn n n
n
n
a a a
a a a
a a a

2 1
2 22 21
1 12 11
=

e
n
S
n n
a a a
o
o o o
o c
) ( ) 2 ( 2 ) 1 ( 1
... ) (
Observaii:
1. Produsul a
1(1)
a
2(2)
a
n(n)
se numete termen al determinantului de ordinul n.
2. Uneori numrul = detA se mai noteaz prescurtat i A sau ( )
n j
n i
ij
a
s s
s s
1
1 .
3. n formula determinantului unei matrice exist n! termeni, dintre care n!/2 au
semnul (+), iar n!/2 au semnul (-).
Petru Florin Gavril Capitolul IV - Matrice



112
4. Definiia determinantului se aplic i matricelor de ordin 1, cnd A = (a
11
). n
acest caz, detA = a
11
.
5. Noiunea de determinant are sens numai pentru matrice ptratice.
Teorema 4.1.1
Dac la o linie (sau coloan) a matricei A adunm elementele altei linii (sau
coloane) nmulite cu acelai numr, atunci aceast matrice are acelai determinant ca i
matricea A.
Teorema 4.1.2
Dac A, B sunt dou matrice ptratice de ordin n cu elemente din acelai corp,
atunci det(AB) = detA detB.
Calculul determinanilor
Calculul determinanilor de ordin doi i trei
Fie determinantul de ordin doi
=
22 21
12 11
a a
a a

cu dou linii i dou coloane format din 4 elemente. Valoarea determinantului (4) este dat
de expresia
= a
11
a
22
a
12
a
21

Valoare care se obine fcnd diferena dintre produsul elementelor de pe
diagonala principal i produsul elementelor de pe diagonala secundar.
S considerm acum determinantul de ordin trei
=
33 32 31
23 22 21
13 12 11
a a a
a a a
a a a

Valoarea acestui determinant poate fi calculat n dou moduri i anume:

Regula triunghiurilor
Valoarea determinantului (5) este dat de expresia:
= a
11
a
22
a
33
+ a
13
a
21
a
32
+ a
12
a
23
a
31
a
13
a
22
a
31
a
11
a
23
a
32
a
12
a
21
a
32

Termenii cu + din (5) sunt: produsul elementelor de pe diagonala principal i
dou produse de elemente situate n vrfurile a dou triunghiuri (isoscele) care au bazele
paralele cu prima diagonal (vezi Fig.1). Termenii cu - sunt: produsul elementelor de pe
Petru Florin Gavril Capitolul IV - Matrice



113
diagonala secundar i dou produse de elemente situate n vrfurile a dou triunghiuri
(isoscele) care au bazele paralele cu diagonala secundar (vezi figura4.2).
33 32 31
23 22 21
13 12 11
a a a
a a a
a a a

33 32 31
23 22 21
13 12 11
a a a
a a a
a a a

Figura 4.1 Figura 4.2
Calculul determinanilor de ordin n
Fie determinantul de ordin n urmtor:
d =
nn n n n
n
n
a a a a
a a a a
a a a a

3 2 1
2 23 22 21
1 13 12 11

Determinantul de ordin n-1 care se obine din d suprimnd linia i i coloana j se
numete minorul elementului a
ij
i se noteaz cu d
ij
.
Numrul A
ij
= (-1)
i+j
d
ij
se numete complementul algebric al elementului a
ij
n
determinantul d.
Teorema 4.1.3
Fie determinantul de ordin n, d =
n j
n i
ij
a
s s
s s
1
1
. Atunci, () 1 i n are loc
egalitatea:
d = a
i1
A
i1
+ a
i2
A
i2
+ + a
in
A
in


Egalitatea (1) poart denumirea de dezvoltarea determinantului d dup linia i.
Teorema 4.1.4
Fie determinantul de ordin n, d =
n j
n i
ij
a
s s
s s
1
1
. Atunci, () 1 j n are loc
egalitatea
d = a
1j
A
1j
+ a
2j
A
2j
+ + a
nj
A
nj

Egalitatea (3) poart denumirea de dezvoltarea determinantului d dup coloana j.
Petru Florin Gavril Capitolul IV - Matrice



114
Determinani triunghiulari
Sunt acei determinani care au toate elementele situate deasupra uneia din diagonale, nule.
=
nn n n
a a a
a a
a
...
... ... ... ...
0 0
0 0 0
2 1
22 21
11

(1)
Dezvoltndu-l dup prima linie, vom avea:
= a
11

nn n n
a a a
a a
a
...
... ... ... ...
0 ...
0 ... 0
3 2
33 32
22

Procednd analog, vom obine:
= a
11
a
22
a
33
a
n-1n-1
a
nn
.
Valoarea unui determinant triunghiular de tipul (1) este egal cu produsul elementelor de
pe diagonala principal.
Determinani simetrici i antisimetrici
1) Un determinant =
n j
n i
ij
a
s s
s s
1
1
se numete simetric, dac elementele simetrice fa
de diagonala principal sunt egale, adic a
ij
=a
ji

Un astfel de determinant are
2
) 1 ( + n n
elemente diferite.
2) Un determinant =
n j
n i
ij
a
s s
s s
1
1
se numete antisimetric, dac elementele sale au
proprietatea a
ij
= - a
ji
adic elementele simetrice fa de diagonala principal
sunt egale i de semn contrar.

IV.1.5. Rangul unei matrice. Matrice inversabile
Rangul unei matrice
Fie
n j
m i j i
a A
s s
s s
=
1
1 ,
) ( o matrice din M
mn
(C) i k e N astfel nct 1 k min(m,n).
Dac lum din matricea a k linii i k coloane, elementele care se gsesc la intersecia
acestor linii i coloane formeaz o matrice ptratic al crei determinant se numete minor
de ordin k al matricei A.
Din matricea A se pot obine
k
n
k
m
C C minori de ordin k.
Petru Florin Gavril Capitolul IV - Matrice



115
Definiia 4.1.23
Fie A eM
mn
(C) o matrice de tip (m,n) nenul. Spunem c matricea A are
rangul r (rangA = r) dac are un minor de ordin r, nenul, iar toi minorii de ordin mai
mare din A (dac exist) sunt nuli.
Observaie
Dac A este matricea nul, convenim s spunem c rangul ei este 0, adic
rangO
mn
= 0.
Teorema 4.1.5
Fie A eM
mn
(C) o matrice nenul. Numrul natural r este rangul matricei A
dac i numai dac exist un minor de ordin r din A nenul i toi minorii de ordin r+1
(dac exist) sunt nuli.
Teorema 4.1.6
Fie A eM
mn
(C) i BeM
np
(C) dou matrice. Atunci orice minor de ordin k
(lk min(m,p)) al produsului AB se poate scrie ca o combinaie liniar de minori de
minori de ordin k ai matricei A (sau, ca o combinaie liniar de minori de ordin k ai
matricei B).
Consecin:
Rangul produsului a dou matrice este mai mic sau egal dact rangul fiecrei
matrice n parte.
rang(AB) rangA i rang(AB) rangB.
Observaii:
1) Deoarece fiecare linie ) ,..., , (
2 1 in i i
a a a a unei matrice A eM
mn
(C), poate fi
privit ca un vector n spaiul liniar C
n
/C i fiecare coloan
t
) ,..., , (
2 1 jm j j
a a a

a
lui A poate fi privit ca un vector n spaiul liniar C
m
/C, rangul matricei A
coincide cu numrul maxim de linii liniar independente ale lui A (sau cu
numrul maxim de coloane independente ale lui A, acest numr fiind acelai).
2) Rangul unei matrice se calculeaz pornind de la un minor de ordin unu nenul
(un element al matricei A nenul). Se adaug o linie i o coloan pentru a
obine minori de ordin 2. Dac mcar unul este nenul, se continu operaia
pn se obin minori de un anumit ordin, fie acesta r+1, toi nuli. Rangul
matricei A va fi r.
3) Rangul unei matrice A eM
mn
(C) se mai poate calcula i folosind metodele
transformrii n matricea unitate sau n matricea triunghiular, metode
Petru Florin Gavril Capitolul IV - Matrice



116
iterative prezentate n capitolul IV al prezentei lucrri, precum i cu ajutorul
sistemelor de ecuaii liniare prezentate n acelai capitol.
Matrice inversabile
Definiia 4.1.24
O matrice ptratic A eM
n
(K) se numete singular sau degenerat dac
detA=0 i se numete nesingular sau nedegenerat dac detA = 0, unde prin detA am
notat determinantul matricei A.
Observaie:
Matricea unitatea de ordin n, I
n
, este nesingular deoarece detI
n
= 1 = 0.
Definiia 4.1.25
O matrice ptratic A eM
n
(K) este inversabil dac (-)B eM
n
(K)astfel nct
AB = BA = I
n
.
Matricea B se numete inversa matricei A.
Observm c i A este inversa matricei B.
Teorema 4.1.7
Inversa unei matrice, dac exist, este unic.
Notaie: Inversa unei matrice A, dac exist, se noteaz cu A
-1
i astfel vom avea:
A A
-1
=A
-1
A = I
n
, de unde (A
-1
)
-1
= A.
Teorema 4.1.8
Fie A eM
n
(K) o matrice ptratic. Matricea A este inversabil dac i numai
dac este nesingular (detA = 0).
Proprieti:
1) Dac A eM
n
(K) este inversabil, atunci i A
-1
este inversabil i are loc
egalitatea (A
-1
)
-1
= A.
2) Dac A eM
n
(K) este nesingular, atunci i A
-1
este nesingular deoarece are
loc egalitatea (A
-1
)
-1
= A.
3) ntre determinantul matricei A i determinantul matricei A
-1
are loc egalitatea
det A
-1
=
A det
1

4) Inversa matricei unitate de ordin n este tot matricea unitate de ordin n:
I
n
-1
= I
n

5) Inversa matricei transpuse este egal cu transpusa matricei inverse:
(
t
A)
-1
=
t
(A
-1
)
Petru Florin Gavril Capitolul IV - Matrice



117
6) Dac A i B sunt matrice inversabile , de acelai ordin, atunci produsul lor
este AB este tot o matrice inversabil i inversa matricei produs este egal cu
produsul matricelor inverse, luate n ordine schimbat, adic:(AB)
-1
= B
-1
A
-1

7) Dac A eM
n
(Q) sau A eM
n
(9), cu detA = 0, atunci A
-1
eM
n
(Q) sau
A
-1
eM
n
(9) .
8) Dac A eM
n
(Z) i detA =
1
, atunci A
-1
e M
n
(Z), adic A este inversabil
n M
n
(Z).
9) Fie A, B eM
n
(C) astfel nct A s fie nesingular i ecuaiile matriceale
AX=B, YA=B. Soluiile celor dou ecuaii sunt dou matrice distincte,
deoarece nmulirea matricelor n M
n
(C) nu este comutativ.
X = A
-1
B i Y = B A
-1
.
IV.1.6. Sisteme de ecuaii liniare
IV.1.6.1. Definiii. Notaii.
Sistemele de ecuaii liniare intervin aproape n toate domeniile matematicii aplicate. n
unele cazuri, ele apar n mod natural, din nsi formularea problemei. n alte cazuri,
sistemele de ecuaii liniare rezult din aplicarea unor metode numerice de rezolvare a
problemelor iniiale. Problema aproximrii funciilor i problema rezolvrii de sisteme de
ecuaii difereniale sunt exemple tipice de astfel de probleme.
Definiia 4.1.23:
Fie K un corp comutativ. Se numete sistem de ecuaii liniare cu coeficieni n K
n necunoscutele x
1
, x
2
, , x
n
un ansamblu de egaliti:

= + + +
= + +
= + + +
m n mn m m
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
........ .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(1)
unde a
ij
, b
i
e K.
Sistemul (1) poate fi scris sub form condensat astfel:

=
=
n
j
i j ij
b x a
1
, 1 i m (2)
Matricea de tip mn:
Petru Florin Gavril Capitolul IV - Matrice



118
A =
|
|
|
|
|
.
|

\
|
mn m m
n
n
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
, notat i A = ( )
n j
m i
ij
a
s s
s s
1
1 , se numete
matricea coeficienilor sistemului, iar matricea de tip m(n-1):
A =
|
|
|
|
|
.
|

\
|
m mn m m
n
n
b a a a
b a a a
b a a a
...
... ... ... ... ...
...
...
2 1
2 22 21
1 1 12 11
,
avnd primele n coloane, coloanele matricei A i ultima coloan format din coloana
termenilor liberi ai sistemului se numete matricea extins.
Matricea B =
|
|
|
|
|
.
|

\
|
m
b
b
b
...
2
1
este matricea termenilor liberi, iar dac notm cu X =
|
|
|
|
|
.
|

\
|
m
x
x
x
...
2
1
,
matricea necunoscutelor, sistemul (1) se mai scrie i sub forma matriceal:
A X = B (3)
Definiia 4.1.24:
Un sistem ordonat de elemente
n
o o o ,..., ,
2 1
din K se numete soluie a
sistemului (1), dac nlocuind n (1) x
j
prin
j
, 1 j n, toate cele m ecuaii sunt
verificate, adic

=
=
n
j
i j ij
b a
1
o , 1 i m.
Dac sistemul (1) are mcar o soluie, se spune c este compatibil determinat
dac soluia este unic i nedeterminat, dac exist mai multe soluii.
Dac sistemul (1) nu admite soluii, se spune c este incompatibil.
A rezolva un sistem de ecuaii liniare (1) nseamn a decide dac acesta este
compatibil sau incompatibil, iar n cazul compatibilitii, a-i gsi soluia unic, atunci cnd
este determinat, i soluia general cnd este nedeterminat.
De studiul compatibilitii unui sistem de ecuaii liniare m voi ocupa n
continuare n cadrul acestui capitol al lucrrii, totodat trecnd n revist i cteva clase
importante de astfel de sisteme.
Petru Florin Gavril Capitolul IV - Matrice



119
IV.1.6.2. Sisteme de tip Cramer
Sistemele liniare de forma:

= + + +
= + +
= + + +
n n nn n n
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
........ .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(4)
n care matricea A a sistemului este o matrice ptratic cu elemente din corpul comutativ
K, A eM
n
(K) i B =
t
(b
1
, b
2
, , b
n
) este o matrice nenul de tip n1, sunt sisteme de tip
Cramer.
Sistemele de mai sus se pot scrie sub form matriceal astfel:
A X = B (5)
unde, X =
t
(x
1
, x
2
, , x
n
) este coloana necunoscutelor.
Teorem: - regulile lui Cramer
Cu notaiile de mai sus, dac d = detA este nenul, atunci sistemul (4) are soluie
unic i anume
x
1
=
d
d
1
, x
2
=
d
d
2
, , x
n
=
d
d
n
(6)
d
j
fiind determinantul care se obine din d prin nlocuirea coloanei j cu coloana termenilor
liberi.
Observaie:
Formulele (6) poart numele de formulele lui Cramer. n concluzie, un sistem de
tip Cramer este compatibil determinat dac matricea sa este nesingular, iar soluia este
dat de formulele (6). Pentru a gsi soluia sistemului (4) avem de calculat aadar n+1
determinani i de efectuat n mpriri.
IV.1.6.3. Sisteme de m ecuaii cu n necunoscute
Revenim la un sistem de forma (1) prezentat la nceputul capitolului, i anume:

= + + +
= + +
= + + +
m n mn m m
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
........ .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(1)
Vom pstra de asemenea toate notaiile fcute la nceput. Evident, n cele ce urmeaz, se
pune problema compatibilitii unui astfel de sistem de ecuaii liniare. Pentru rezolvarea
acestei situaii exist cteva rezultate remarcabile i anume:
Petru Florin Gavril Capitolul IV - Matrice



120
Teorema lui Kronecker-Capelli
Sistemul de ecuaii liniare (1) este compatibil rangA = rang A.
Avnd n vedere consideraiile fcute la calculul rangului unei matrice n
capitolul anterior, aceast teorem se mai poate enuna i n felul urmtor:
Teorema lui Rouch:
Sistemul (1) este compatibil toi minorii caracteristici sunt nuli.
Dup cum se poate observa, aceste teoreme nu spun nimic de rezolvarea propriu-
zis a unui sistem de forma (1). Despre acest lucru ne vom ocupa n continuare.
Vom numi minor principal al unei matrice de rang r, un minor de ordin r nenul i
minor caracteristic de ordin r+1, minorul obinut din minorul principal bordndu-l cu
elemente corespunztoare coloanei termenilor liberi, precum i cu cele ale uneia din liniile
rmase din A.
Observaie:
Minori caracteristici exist dac m > r, iar numrul lor este egal cu m-r (m
numrul de ecuaii, iar r rangul matricei A).
Presupunem c sistemul (1) este compatibil i c rangA = r. Vom lua minorul
principal ca fiind situat la intersecia primelor r linii cu primele r coloane din A:
rr r r
r
r
a a a
a a a
a a a
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
= 0.
Orice linie i, i > r, a matricelor A i A este o combinaie liniar a primelor r linii
(toi minorii de ordin > r fiind nuli). De aici rezult c orice ecuaie i (i > r) a sistemului (1)
este o combinaie liniar de primele r ecuaii ale sistemului, cu anumii coeficieni. De
aceea, orice soluie a primelor r ecuaii satisfac toate ecuaiile din (1). Astfel, este suficient
s rezolvm sistemul:

= + + +
= + +
= + + +
r n rn r r
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
. .......... .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(1)
care va fi echivalent cu (1), avnd aceeai mulime de soluii.
Matricea noului sistem are rangul r, r n.
Petru Florin Gavril Capitolul IV - Matrice



121
1) Dac r = n, sistemul (1) este de tip Cramer, compatibil determinat, iar soluia
unic a sistemului, dat de formulele (6), va fi soluia sistemului.
2) Dac r < n, fixm minorul principal, necunoscutele corespunztoare lui
necunoscute principale i trecem n (1), n membrul drept, toi termenii care
conin necunoscutele secundare: x
r+1
, x
r+2
, , x
n
. Acestora din urm le atribuim
valori arbitrare, respectiv
1
,
2
,
3
, ,
n-r
.
Se obine sistemul:

= + + +
= + +
= + + +
+
+
+
r n rn r r r rr rr r r
r n n r r r
r n n r r r
a a b x a x a x a
a a b x a x a x a
a a b x a x a x a



... ...
.... .......... .......... .......... .......... .......... .......... ..........
... ...
... ...
1 1 , 2 2 1 1
2 1 1 , 2 2 2 2 22 1 21
1 1 1 , 1 1 1 2 12 1 11
(1)
care este un sistem Cramer, compatibil i se rezolv cu ajutorul formulelor (6). Soluia
unic a sistemului (1) este (
r
o o o ,..., ,
2 1
) iar (
r
o o o ,..., ,
2 1
,
1
,
2
,
3
, ,
n-r
) este
soluia sistemului (1), adic a sistemului (1). Deoarece
1
,
2
,
3
, ,
n-r
sunt alese
arbitrar, obinem pentru (1) o infinitate de soluii, care constituie mulimea tuturor
soluiilor sistemului (1).
Deci, pentru a rezolva un sistem de m ecuaii cu n necunoscute procedm n felul urmtor:
1) Se studiaz compatibilitatea sistemului. Pentru aceasta se caut un minor
principal al lui A, matricea sistemului, apoi se caut i se calculeaz minorii
caracteristici.
Putem avea cazurile:
exist cel puin unul nenul, sistemul fiind astfel incompatibil;
toi sunt nuli, sistemul fiind astfel compatibil.
2) Dac sistemul (1) este compatibil atunci formulm sistemul de tip (1).
3) Se rezolv sistemul (1) i se scrie apoi mulimea soluiilor sistemului (1) de
forma (
r
o o o ,..., ,
2 1
,
1
,
2
,
3
, ,
n-r
).
IV.1.6.4. Sisteme omogene
Definiia 4.1.25:
Un sistem de ecuaii liniare se numete sistem omogen dac termenul liber al
fiecrei ecuaii este nul (adic fiecare ecuaie este omogen).
Forma general a unui sistem omogen cu m ecuaii i n necunoscute este
urmtoarea:
Petru Florin Gavril Capitolul IV - Matrice



122

= + + +
= + +
= + + +
0 ...
. .......... .......... .......... ..........
0 ...
0 ...
2 2 1 1
2 2 22 1 21
1 2 12 1 11
n mn m m
n n
n n
x a x a x a
x a x a x a
x a x a x a
(9)
Observm de la nceput c un sistem omogen este totdeauna compatibil deoarece
admite soluia banal x
1
= x
2
= = x
n
= 0.
Se pune n schimb problema dac sistemele omogene admit i alte soluii i dac
da, atunci rmne de studiat cum le determinm. Este de remarcat faptul c rezultatele de
la celelalte tipuri de sisteme se aplic i sistemelor omogene, cu condiia s considerm
termenii liberi zero.
Procedm astfel:
vom scrie matricea ataat sistemului (A) i-i determinm rangul. Fie acesta r.
putem avea situaiile:
dac r = n, atunci sistemul admite soluia banal ca soluie unic;
dac r < n, sistemul admite o infinitate de soluii care se determin n acelai
mod cu soluiile sistemelor discutate n paragraful IV.3. din prezentul
capitol.
Observaie
Deoarece necunoscutelor secundare li se atribuie valori arbitrare, obinem i
soluii nenule n acest caz pentru un sistem omogen.
Deci, condiia necesar i suficient ca un sistem omogen s admit i soluii
nenule este ca r < n.
n cazul n care sistemul omogen are n ecuaii i n necunoscute, se scrie matricea
sistemului i se calculeaz determinantul acesteia, dup care se constat una din
urmtoarele sitaii:
dac detA = 0, rangA = n, sistemul admite soluia banal, soluie unic;
dac detA = 0, rangA < n, sistemul admite i soluii nenule.
Deci, condiia necesar i suficient pentru ca un sistem omogen, cu n ecuaii i n
necunoscute, s admit i soluii diferite de soluia banal este ca determinantul matricei
sistemului s fie nul.
Dac un sistem omogen are n ecuaii i n+1 necunoscute, iar rangul matricei A
este n, atunci sistemul este compatibil. Fie sistemul:
Petru Florin Gavril Capitolul IV - Matrice



123

= + + + +
= + + +
= + + + +
+ +
+ +
+ +
0 ...
. .......... .......... .......... ..........
0 ...
0 ...
1 1 , 2 2 1 1
1 1 , 2 2 2 22 1 21
1 1 , 1 1 2 12 1 11
n n n n nn n n
n n n n
n n n n
x a x a x a x a
x a x a x a x a
x a x a x a x a
(10)
cu matricea A = ( )
1 . 1
, 1
+ =
=
n j
n i
ij
a . Cum rangA = n, se pot forma n+1 minori de ordin maxim n,
nenuli. Vom considera un
1
A , minor de ordin n nenul suprimnd din A coloana 1. Acesta
va fi ales minor principal, necunoscuta x
1
necunoscut secundar i x
2
, x
3
, , x
n+1
ca
necunoscute principale. Analog putem alege minorii
2
A ,
3
A , ,
1 +
A
n
.
Putem rezolva ecuaiile principale n raport cu necunoscutele principale dup
formulele lui Cramer deoarece
i
A = 0. Soluiile sistemului (10) sunt formate din sisteme
de (n+1) numere proporionale cu
1
A , -
2
A ,
3
A , , (-1)
n
1 +
A
n
:
1
1
A
x
= -
2
2
A
x
=
3
3
A
x
= =
( )
1
1
1
+
+
A
n
n
n
x
= t.
De obinem c:
x
1
= t
1
A
x
2
= -t
2
A
x
3
= t
3
A
.
x
n+1
= (-1)
n
t
1 +
A
n
.
Dnd lui t valori arbitrare obinem toate soluiile sistemului (10).
Proprieti:
1) Dac ( )
n
o o o ,..., ,
2 1
i ( )
n
| | | ,..., ,
2 1
sunt soluii ale unui sistem omogen
atunci i ( )
n n
| o | o | o + + + ,..., ,
2 2 1 1
este soluie a sistemului.
2) Dac ( )
n
o o o ,..., ,
2 1
este soluie a unui sistem omogen, atunci i
( )
n
k k k o o o ,..., ,
2 1
este soluie a aceluiai sistem.
IV.1.6.5. Metode de rezolvare a sistemelor de ecuaii liniare
Regulile lui Cramer de rezolvare a sistemelor ptratice de ordin n, cu matricea
sistemului nesingular nu reprezint un algoritm practic atunci cnd n este mare, deoarece
implic un numr mare de calcule, n+1 determinani, fiecare cu (n-1)n! nmuliri.
n aplicaiile practice se folosesc dou tipuri de metode:
Petru Florin Gavril Capitolul IV - Matrice



124
1) metode directe, prin care soluia exact se obine ntr-un numr finit de operaii
aritmetice (fcnd abstracie de erorile de rotunjire);
2) metode iterative pentru care vectorul x soluia sistemului (1) Ax = b este
limita unui ir de vectori {x
n
} pentru n .
Metodele directe pot fi ncadrate n urmtoarea schem general:
Se determin transformarea P nesingular cu care sistemul (1) devine
PAx = Pb (2)
Astfel nct noua matrice PA, s fie de o form ct mai simpl, care s permit o rezolvare
imediat. Dac PA nu este suficient de simpl, se mai folosete o transformare nesingular
Q la dreapta, astfel nct sistemul devine:
PAQy = Pb, cu x = Qy (3)
De obicei, matricele PA i PAQ sunt matrice triunghiulare dar pot fi i de alt form
convenabil pentru rezolvarea sistemului (1).
De exemplu, dac n sistemul (3) PA este o matrice superior triunghiular
PA = ( )
n j
n i
ij
t
, 1
, 1
=
= i Pb = ( )
n i i
c
, 1 =
, atunci sistemul devine:

=
= + +
= + + +
n n mn
n n
n n
c x t
c x t x t
c x t x t x t
. . . . . . . . .
...
...
2 2 2 22
1 1 2 12 1 11
(4)
Din ultima ecuaie se obine:
x
n
=
mn
n
t
c
.
nlocuind n penultima ecuaie, avem:
x
n-1
=
1 , 1
, 1 1


n n mn
n n n mn n
t t
t c t c

i tot aa pn la prima ecuaie, de unde se obine:
x
1
=
11
2
1 1
t
x t c
n
j
j j
=

.
Algoritmul este:
x
n
=
mn
n
t
c

Petru Florin Gavril Capitolul IV - Matrice



125
x
n-i
=
i n i n
n
i n j
j j i n i n
t
x t c

+ =


,
1
,
, i = 1 , 1 n .
Metodele directe au dezavantajul c odat cu creterea ordinului sistemului (1) se
acumuleaz erori de rotunjire care duc la erori relative mari ale soluiei. Pentru a minimiza
aceste erori, se impune, n general, reordonarea ecuaiilor sistemului, dup fiecare etap,
pentru a avea elemente maximale pe diagonala principal a matricei sistemului. Aceste
operaii suplimentare sunt n numr foarte mare n cazul sistemelor mari.
Metodele iterative permit, n principiu, gsirea soluiei unui sistem de ecuaii
liniare, pornind de la o aproximaie iniial a soluiei, pe baza unui proces iterativ. Dac
sistemul este bine condiionat numeric (adic matricea sistemului ndeplinete anumite
condiii), procesul iterativ converge ctre soluia exact a sistemului. Practic, procesul este
ntrerupt dup un numr finit de pai, furniznd soluia sistemului cu o anumit precizie,
afectat de erori de rotunjire (mai mici dect cele de la metodele directe) i de erori de
trunchiere.
Avantajele acestor metode sunt mai multe, printre care:
erorile de rotunjire i chiar de trunchiere pot fi practic eliminate;
pot fi folosite la mbuntirea soluiei sistemului obinut prin alte metode;
dac se cunoate o aproximare iniial apropiat de soluia exact a
sistemului, convergena metodelor iterative este rapid;
se codific uor sub form de program.
IV.1.6.5.1. Metode directe de rezolvare
Metoda de eliminare a lui Gauss
Aceast metod este una din cele mai vechi i larg rspndite metode de rezolvare
a sistemelor de ecuaii liniare. Ideea de baz a acestei metode este eliminarea succesiv a
necunoscutelor, aducnd prin transformri elementare matricea sistemului la forma
superior triunghiular i apoi substituirea succesiv, n sens invers, a necunoscutelor.
Fie, pentru exemplificare, un sistem de trei ecuaii cu trei necunoscute:

= + +
= + +
= + +
3 3 33 2 32 1 31
2 3 23 2 22 1 21
1 3 13 2 12 1 11
b x a x a x a
b x a x a x a
b x a x a x a
(1)
sau, n forma matriceal:
Petru Florin Gavril Capitolul IV - Matrice



126
(
(
(

33 32 31
23 22 21
13 12 11
a a a
a a a
a a a

(
(
(

3
2
1
x
x
x
=
(
(
(

3
2
1
b
b
b
(2)
unde A = ( )
3 , 1 , = j i
ij
a este matricea sistemului, X = ( )
3 , 1 = i i
x este matricea coloan a
necunoscutelor, iar B = ( )
3 , 1 = i i
b este matricea coloan a termenilor liberi, notaii cu care ne-
am ntlnit i n capitolul 3.
La primul pas al metodei lui Gauss urmri eliminarea necunoscutei x
1
din toate
ecuaiile sistemului, cu excepia primei ecuaii. Pentru aceasta mprim mai nti prima
linie la elementul pivot a
11
, presupus nenul (dac nu este aa, reordonm i renumerotm
ecuaiile pentru a fi ndeplinit aceast condiie):
( ) ( )

= + +
= + +
= + +
3 3 33 2 31 1 31
2 3 23 2 22 1 21
1
1 3
1
13 2
) 1 (
12 1
b x a x a x a
b x a x a x a
b x a x a x

Scdem apoi prima ecuaie nmulit cu primul coeficient al celei de-a doua
ecuaii, din aceast ecuaie i, respectiv, nmulit cu primul coeficient al celei de-a treia
ecuaii, din aceasta din urm. Obinem astfel sistemul:
( ) ( )
( ) ( ) ( )
( ) ( ) ( )

= +
= +
= + +
1
3 3
1
33 2
1
32
1
2 3
1
23 2
1
22
1
1 3
1
13 2
) 1 (
12 1
b x a x a
b x a x a
b x a x a x
,
unde
( )
( )
( ) ( )
( ) ( )

=
= = =
=
= =
1
1 1
1
1
1 1
1
11 1
1
1
11 1
1
1
3 , 2 , 1 , 3 , 2 , 1 ,
3 , 2 , 1 ,
b a b b
j i a a a a
a b b
j a a a
i i i
j i ij ij
j j
.
Matriceal, primul pas al metodei lui Gauss duce la
( ) ( )
( ) ( )
( ) ( )
(
(
(

1
33
1
32
1
23
1
22
1
13
1
12
0
0
1
a a
a a
a a

(
(
(

3
2
1
x
x
x
=
( )
( )
( )
(
(
(

1
3
1
2
1
1
b
b
b
(3)
n continuare, urmrim eliminarea necunoscutei x
2
din ultima ecuaie. Pentru
aceasta, mprim mai nti a doua ecuaie la elementul pivot
( ) 1
22
a , presupus nenul (dac nu
este aa, interschimbm ecuaiile a doua i a treia) i apoi scdem linia obinut, nmulit
cu
( ) 1
32
a din ecuaia a treia.
Petru Florin Gavril Capitolul IV - Matrice



127
Obinem:
( ) ( )
( )
( )
(
(
(

2
33
2
23
1
13
1
12
0 0
1 0
1
a
a
a a

(
(
(

3
2
1
x
x
x
=
( )
( )
( )
(
(
(

2
3
2
2
1
1
b
b
b
(4)
unde
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )

=
= = =
=
= =
2
2
1
2
1 2
2
2
1
2
1 2
1
22
1
2
2
2
1
22
1
2
2
2
3 , 2 , 3 ,
3 , 2 ,
b a b b
j i a a a a
a b b
j a a a
i i i
j i ij ij
j j
.
n sfrit, ncheiem faza eliminrii mprind cea de-a treia ecuaie la elementul pivot
( ) 2
33
a ,
care, pentru un sistem cu matrice nesingular, trebuie s fie nenul. Rezult:
( ) ( )
( )
(
(
(

1 0 0
1 0
1
2
23
1
13
1
12
a
a a

(
(
(

3
2
1
x
x
x
=
( )
( )
( )
(
(
(

3
3
2
2
1
1
b
b
b
(5)
unde
( ) ( ) ( ) 2
33
2
3
3
3
a b b = .

Faza substituiei implic parcurgerea ecuaiilor sistemului (5) rezultat n faza
eliminrii, n sens invers i stabilirea soluiei sistemului potrivit procedeului recursiv:
x
3
=
( ) 3
3
b
x
2
=
( ) 2
2
b -
( ) 2
23
a x
3
(6)
x
1
=
( ) 1
1
b - (
( ) 1
12
a x
2
+
( ) 1
13
a x
3
)
Metoda de eliminare a lui Gauss permite i calculul determinantului matricei
sistemului. Se observ c, matricea A
(3)
a sistemului (5) fiind triunghiular, are
determinantul egal cu produsul elementelor diagonale, adic det A
(3)
= 1.
Avnd n vedere c mprirea liniilor matricei sistemului la elementele pivot a
condus la o matrice avnd determinantul egal cu determinantul matricei iniiale mprit la
produsul elementelor pivot, rezult:
det A
(3)
=
( ) 2
33
1
22 11
det
a a a
A
= 1
adic
detA = a
11
( ) 1
22
a
( ) 2
33
a (7)
Petru Florin Gavril Capitolul IV - Matrice



128
Metoda de eliminare a lui Gauss pentru cazul unui sistem de n ecuaii cu n
necunoscute scris matricial sub forma:
A X = B
se aplic n acelai mod.
Metoda Gauss-Jordan
Metoda Gauss-Jordan reprezint o form modificat a metodei lui Gauss. Spre
deosebire de metoda Gauss, n care matricea sistemului este adus prin transformri
elementare la form superior triunghiular, n metoda Gauss-Jordan matricea sistemului
este transformat n matricea unitate. Prin aceasta, dei faza eliminrii este mai laborioas,
faza substituirii inverse este eliminat. n plus, printr-o codificare eficient, simultan cu
rezolvarea unei ecuaii matriceale, metoda Gauss-Jordan permite nlocuirea matricei
sistemului cu inversa acestaia.
n urma pasului k de eliminare este eliminat necunoscuta x
k
din toate ecuaiile
sistemului, cu excepia ecuaiei pivot k i sistemul este adus la forma:
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) ( ) (
(
(
(
(
(
(
(
(

+
+ + +
+
+
+
k
nn
k
nk
k
n k
k
k k
k
kn
k
kk
n k
n k
a a
a a
a a
a a
a a







1
1 1 1
1
2
2
2
1 2
1
1
1
1 1
0 0 0
0 0 0
1 0 0
0 1 0
0 0 1

(
(
(
(
(
(
(
(
(

+
n
k
k
x
x
x
x
x

1
2
1
=
( )
( )
( )
( )
( ) (
(
(
(
(
(
(
(
(

+
k
n
k
k
k
k
b
b
b
b
b

1
2
2
1
1
(18)
unde noile elemente ale liniei pivot k sunt, ca i n metoda Gauss:
( )
( ) ( ) ( )
( ) ( ) ( )

=
+ = =
=


1 1
1 1
,..., 1 ,
1
k
kk
k
k
k
k
k
kk
k
kj
k
kj
k
kk
a b b
n k j a a a
a
(19)
iar noile elemente ale liniilor nepivot sunt:
( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )

=
= = + = =
=


k
k
k
ik
k
i
k
i
k
kj
k
ik
k
ij
k
ij
k
ik
b a b b
k i n i n k j a a a a
a
1 1
1 1
, ,... 1 , ,... 1 ,
0
(20)
Se observ c la pasul k se modific toate elementele matricei sistemului situate
n dreapta coloanei k, coloan care devine identic cu coloana corespunztoare a matricei
unitate. La fiecare pas se modific, n schimb, toate elementele matricei termenilor liberi.
n final, dup pasul k=n, sistemul are forma
Petru Florin Gavril Capitolul IV - Matrice



129
I
n
X=B
(n)
(21)
unde I
n
reprezint matricea unitate de ordinul n. Este evident c nu este necesar, ca n
cazul metodei Gauss, o faz a substituiei inverse, iar soluia sistemului este:
x
k
=
( ) k
k
b , k = 1,,n (22)
Ca i n cazul metodei Gauss, determinantul matricei A
(n)
= I
n
este egal cu 1. Avnd ns n
vedere c n obinerea matricei A
(n)
liniile matricei iniiale au fost mprite pe rnd la
elementele pivot, avem:
det A
(n)
=
( ) ( ) 1 1
22 11
...
det
n
nn
a a a
A
= 1
de unde
detA = a
11
( ) 1
22
a
( ) 1 n
nn
a (23)
Ca i n cazul metodei Gauss, deoarece dup pasul k informaia util din matricea
A
(k)
se gsete exclusiv n coloanele k+1, , n, coloana k fiind n fond identic cu coloana
corespunztoare a matricei unitate, noile elemente ale matricei A
(k)
sunt calculate efectiv
numai pentru j=k+1, , n. n ceea ce privete pivotarea, aceasta se poate realiza la fel ca n
cazul metodei Gauss.
IV.1.6.5.2. Metode iterative de aproximare a soluiilor sistemelor de ecuaii
liniare
Fie sistemul de n ecuaii cu n necunoscute
Ax = b, det A = 0 (1)
Ideea general a metodelor iterative const n construirea unor iruri de vectori ce
converg la soluia exact, care se obin fr a modifica forma matricei:
( )
( ) ( )
( )

= =
9 e
+
... 2 , 1 , 0 ,
,
1
0
k x F x
dat x
k k
n

cu irul { }
) (k
x convergent la soluia sistemului (1).
O clas larg de metode iterative se obine dac avem o descompunere a matricei
A de forma A = B C, unde B este o matrice nesingular i uor de inversat, de regul
diagonal sau triunghiular. Exist o infinitate de astfel de descompuneri, pentru c
alegndu-l pe B cum dorim, lum C = B A i avem descompunerea A = B C. Sistemul
(1) se scrie atunci sub forma Bx = Cx + b, care permite definirea unei metode iterative
astfel: oricare ar fi iteraia iniial x
(0)
e9
n
se determin termenii succesivi ai unui ir { }
) (k
x
prin recuren, cu relaia:
Petru Florin Gavril Capitolul IV - Matrice



130
b x C x B
k k
+ =
+ ) ( ) 1 (
, k = 1,2,3, (2)
Deoarece B este nesingular i uor de inversat pentru orice x
(k)
deja determinat,
se obine urmtorul vector din ir x
(k+1)
cu relaia
b B x C B x
k k
+ =
+ 1 ) ( 1 ) 1 (
(3)
adic
c x M x
k k
+ =
+ ) ( ) 1 (
, (4)
unde C B M =
1
(matricea iteraiei) i b B c =
1
.
Propoziia 4.1.4
Dac irul { }
) (k
x este convergent atunci el converge la soluia sistemului (1).
S vedem n ce condiii irul { }
) (k
x este convergent.
Teorema 4.1.9
Condiia necesar i suficient ca irul { }
) (k
x dat de relaia (2) s fie convergent
pentru orice x
(0)
e9
n
este ca raza spectral a matricei M s fie subunitar, adic
1 ) ( < M . O condiie suficient de convergen este existena unei norme naturale pentru
care M 1 <
( ) { } ( )
M max ; este valoare proprie a lui M = .
Metoda lui Jacobi
Una dintre cele mai vechi i mai cunoscute metode iterative pentru rezolvarea
sistemelor de ecuaii liniare este metoda lui Jacobi.
Fie
( )
ij
n n
A a

= i ( )
i
n
b b = . n descompunerea anterioar alegem
( )
11 22 nn
B diag a , a ,..., a = , iar metoda iterativ corespunztoare este:
( ) ( )
i
n
k 1 k
ii i ij j
j 1
j i
a x b a x
+
=
=
=

, i 1, n = , unde
( )
i
k
x i
( )
i
k 1
x
+
sunt componentele vectorilor
( ) k
x respectiv
( ) k 1
x
+
. n ipoteza important
ii
a 0, = i 1, n = , care asigur c matricea
B este nesingular, obinem recurena
( ) ( )
i
n
k 1 k
i ij j
j 1 ii
j i
1
x b a x ,
a
+
=
=
(
(
=
(
(

i 1, n = care se
numete metoda lui Jacobi.
Conform teoremei anterioare, condiia necesar i suficient de convergen a
metodei lui Jacobi este ca modulele valorilor proprii ale matricei iteraiei s fie subunitare.
Petru Florin Gavril Capitolul IV - Matrice



131
Ecuaia caracteristic a acestei matrice este 0 ) det(
1
=

C B I sau, echivalent,
0 )) ( det(
1
=

C B B . Cum
1
B 0

= , condiia necesar i suficient de convergen este


ca toate modulele rdcinilor ecuaiei 0 ) det( = C B s fie subunitare. Aceast condiie
nu are dect o valoare teoretic. n practic se folosesc doar condiii suficiente, care din
teorema anterioar cer s existe o norm a matricei M a iteraiei care s fie subunitar. Din
metoda lui Jacobi se vede c elementele acestei matrice
( )
ij
i, j 1,n
M m
=
= sunt
ij
ij ii
a
, pentru i j
m a
0, pentru i j

. Dac lum
1
, adic
1
M 1 < echivalent cu
n
ij
1
j 1,n
i 1
M max m 1
=
=
= <

(sume pe coloane) obinem condiia suficient de convergen


n
ij
i 1 ii
i j
a
1, j 1, n
a
=
=
< =

.
Dac lum
e
, adic
e
M 1 < echivalent cu
1/ 2
2
n n
ij
e
i 1 j 1
i j
M m 1
= =
=
| |
|
= <
|
|
\ .

obinem
condiia suficient de convergen
2
n n
ij
i 1 j 1 ii
j i
a
1
a
= =
=
<

.
Lund norma

, adic M 1

< , iar
n
ij
i 1,n
j 1 ii
a
M max 1
a

=
=
= <

(sume pe linii),
obinem condiia suficient de convergen
n
ij
i 1 ii
i j
a
1, j 1, n
a
=
=
< =

sau
n
ij ii
j 1
j i
a a , pentru i 1, n
=
=
< =

, condiie care se numete dominana diagonal pe linii.


Petru Florin Gavril Capitolul IV - Matrice



132
Metoda Gauss-Seidel
Metoda Gauss-Seidel reprezint o modificare a metodei Jacobi, cu scopul
creterii vitezei de convergen i reducerii memoriei necesare. Ideea de baz a metodei
Gauss-Seidel const n utilizarea n calculul componentei
( ) k 1
i
x
+
a aproximaiei soluiei
sistemului de la pasul k 1 + a componentelor
( ) ( ) ( ) k 1 k 1 k 1
1 2 i 1
x , x ,...x
+ + +

, deja calculate, n
locul componentelor
k k k
1 2 i 1
x , x ,...x

de la iteraia anterioar, cum se ntmpl n cazul
metodei Jacobi.
n metoda Gauss-Seidel, recurena devine:
( ) ( ) ( )
i 1 n
k 1 k 1 k ij ij
i
i j j
j 1 j i 1 ii ii ii
a a
b
x x x
a a a

+ +
= = +
=

, pentru i 1, n = , k = 0,1,2,
(1)
Aceasta se ncadreaz n schema precedent dac presupunem c
ii
a 0 = pentru i 1, n =
i lum drept
11
21 22
n1 n2 nn
a 0 ... 0
a a ... 0
B
..... ..... ... ..
a a ... a
| |
|
|
=
|
|
\ .
matrice triunghiular inferior, iar C = B A
matrice inferioar superior cu 0 pe diagonala principal. Cu aceast alegere sistemul
B x C x b = + se scrie dup mprirea la
ii
a :
i 1 n
ij ij
i
i j j
j 1 j i 1 ii ii ii
a a
b
x x x
a a a

= = +
=


(2)
pentru i 1, n = iar sistemul
( ) ( ) k 1 k
Bx Cx b
+
= + , k = 0,1,2, se scrie sub forma (1).
Teorema 4.1.10
Criteriul de dominan a diagonalei pe linii asigur convergena metodei Gauss-
Seidel pentru orice iteraie iniial
( ) 0
x
.
Petru Florin Gavril Capitolul IV - Matrice



133
IV.2. Tablouri bidimensionale
IV.2.1. Generaliti. Notaii i definiii
Definiia 4.2.1:
Numim tablou bidimensional o structur de date format din elemente de acelai
tip organizate pe linii i coloane. Se utilizez frecvent noiunea preluat din matematic de
matrice.
Fiecare element se identific n mod unic prin linia i coloana la intersecia crora
se afl. Astfel dac notm o matrice cu a elementul aflat la intersecia liniei i cu coloana j
n matricea a se noteaz a[i][j],a[i,j] sau a(i,j) n funcie de limbajul de programare utilizat.
O matrice mai poate fi privit i ca un vector de vectori, adic ca un tablou
unidimensional ce conine elemente de tip tablou unidimensional(fiecare linie este privit
ca un singur element), abordare ce permite utilizarea subprogramelor ce prelucreaz
vectori pentru a prelucra linii dintr-o matrice ce vor fi transmise ca parametru.
Ilustrm n continuare o matrice a cu 4 linii i 3 coloane, avnd elemente numere
ntregi.





Declaraia unei variabile de tip matrice este asemntoare cu a unui vector. La
declarare trebuie s specificm n unele limbaje un numr maxim de linii i coloane iar n
altele subdomeniu. Numrul de linii i coloane depinde de enun, de modul de prelucrare a
matricei(se utilizeaz sau nu linia i coloana 0) dar i de mediul de programare
utilizat(Borland Pascal/Free Pascal, Borland C++/MinGW Studio).
Declaraie Pascal
<id_mat>:array[1..<max_l>,1..<max_c>] of <tip_e>
sau
<id_mat>:array[1..<max_l>]of array[1..<max_c>] of <tip_e>
Pentru utilizarea subprogramelor ce primesc parametrii de tip vector pentru a prelucra linii
dintr-o matrice se utilizeaz o declaraie de tipul:
type
linie|vector=array[1..<max_c>] of <tip_e>
matrice=array[1..<max_l>] of linie|vector
|
|
|
|
|
.
|

\
|

11 10 5
9 5 0
7 4 12
2 1 1
4
3
2
1
3 2 1
linia 3
coloana 2
a[3][2]=-5
Petru Florin Gavril Capitolul IV - Matrice



134
var <id_mat>:matrice;
Observaie:
Declaraia cu tipuri permite atribuiri de linii i coloane.
Declaraie C++
<tip_e> <id_mat>[<max_l>][<max_c>]
unde:
<id_mat> - identificatorul variabilei matrice
<tip_e> - tipul elementelor matricei
<max_l>,<max_c> - numrul maxim de linii, respectiv coloane
Exemplu:
Pascal: a:array[1..20,1..30] of integer; se declar o matrice cu 20 de linii
numerotate de la 1 la 20 i 30 de coloane numerotate de la 1 la 30. Numrul
maxim de valori ce poate fi memorat este 600.
C++: float a[20][30]; se declar o matrice cu 20 de linii numerotate de la 0 la
19 i 30 de coloane numerotate de la 0 la 29. Numrul maxim de valori ce poate fi
memorat este 600.
Dimensiunile declarate sunt maxime pentru programul surs n care au fost fcute, n
practic utilizndu-se declararea a dou variabile n respectiv m pentru a memora numrul
de linii i coloane. Valorile lui n i m se citesc anterior elementelor matricei sau se
determin pe parcursul execuiei programului(de obicei la citirea matricelor de dimensiuni
necunoscute din fiiere sau la utilizarea matricelor cu numr necunoscut de linii i un
numr variabil de coloane, caz n care se ataeaz un tablou d ce reine n d[i] numrul de
coloane completate pe linia i).
IV.2.2. Parcurgerea, citirea i afiarea unei matrice
Parcurgeri n matrice
Pentru a parcurge o matrice se utilizeaz n general dou structuri repetitive, una
pentru a parcurge liniile i una pentru a parcurge coloanele. Ordinea n care sunt executate
cele dou structuri determin prelucrarea elementelor pe linii sau pe coloane.
Descriem n continuare algoritmii de parcurgere precum i ordinea n care vor fi
prelucrate elementele:
Prelucrare pe linii
Pascal C++
var a:array[1..10,1..20] of <tip_e>;
n,m,i,j:integer;
<tip_e> a[10][20];
int n,m,i,j;
Petru Florin Gavril Capitolul IV - Matrice



135

for i:=1 to n do
for j:=1 to m do
<prelucreaz a[i,j]>
............
for(i=0;i<n;i++)
for(j=0;j<m;j++)
<prelucreaz a[i][j]>
Ordinea de prelucrare a elementelor este :
a[1,1],a[1,2],...,a[1,m]
a[2,1],a[2,2],...,a[2,m]
...................
a[n,1],a[n,2],....,a[n,m]
a[0,0],a[0,1],...,a[0,m-1]
a[1,0],a[1,1],...,a[1,m-1]
...................
a[n-1,0],a[n,1],....,a[n-1,m-1]
Prelucrare pe coloane
var a:array[1..10,1..20] of <tip_e>;
n,m,i,j:integer;

for j:=1 to m do
for i:=1 to n do
<prelucreaz a[i,j]>
<tip_e> a[10][20];
int n,m,i,j;
............
for(i=0;i<n;i++)
for(j=0;j<m;j++)
<prelucreaz a[i][j]>
Ordinea de prelucrare a elementelor este :
a[1,1],a[2,1],...,a[n,1]
a[1,2],a[2,2],...,a[n,2]
...................
a[1,m],a[2,m],....,a[n,m]
a[0,0],a[1,0],...,a[n-1,0]
a[0,1],a[1,1],...,a[n-1,1]
...................
a[0,m-1],a[1,m-1],....,a[n-1,m-1]
Citirea unei matrice
Pentru citirea unei matrice se citesc mai nti dimensiunile i apoi elementele
matricei utiliznd o parcurgere pe linii.
Pascal C++
var a:array[1..10,1..20] of
<tip_e>; n,m,i,j:integer;

write(nr de linii:);read(n);
write(nr de coloane:);read(m);
for i:=1 to n do
for j:=1 to m do
begin
write(a[,i,,,j,]=);
read(a[i,j]);
end;
<tip_e> a[10][20];
int n,m,i,j;
............
cout<<nr de linii;cin>>n;
cout<<nr de coloane;cin>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<a[<<i<<][<<j<<]=;
cin>>a[i][j];
}
Petru Florin Gavril Capitolul IV - Matrice



136
Afirile a[i][j]=_ nu sunt obligatorii, ele se folosesc doar pentru a ti care este
elementul curent ce urmeaz a fi citit.
Afiarea unei matrice
Afiarea matricelor se face pe linii i coloane aa nct s poat fi urmrit
distribuia elementelor pe linii i coloane.
Pascal C++
var a:array[1..10,1..20] of
<tip_e>;
n,m,i,j:integer;

for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j], );
writeln;
end;
<tip_e> a[10][20];
int n,m,i,j;
............
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<a[i][j]<< ;
cout<<endl;
}
IV.2.3. Matrice ptratice. Diagonale. Parcurgeri.
Definiia 4.2.2:
O matrice cu proprietatea c numrul de linii este egal cu numrul de coloane se
numete matrice ptratic.
Fie matricea a cu n linii i n coloane n care primul element are coordonatele
(1,1) de mai jos:








Diagonala principal
Diagonala principal este format din elementele care ndeplinesc relaia i=j
numrul liniei este egal cu numrul coloanei pe care se afl.
|
|
|
|
|
|
|
|
.
|

\
|
nn n n n n
n
n
n
n
a a a a a
a a a a a
a a a a a
a a a a a
a a a a a
...
... ... ... ... ... ...
...
...
...
...
4 3 2 1
4 44 43 42 41
3 34 33 32 31
2 24 23 22 21
1 14 13 12 11
Diagonala principal Diagonala secundar
Zona de sub diagonala
principal
Zona de deasupra
diagonalei principale
Petru Florin Gavril Capitolul IV - Matrice



137
Diagonala secundar
Diagonala secundar conine elementele a
1n
, a
2 n-1
, a
3 n-2
,...,a
n1
caracterizate de
relaia i+j=n+1.
Zona de deasupra diagonalei principale
Elementele de deasupra diagonalei principale sunt a
12
, a
13
, a
14
,...,a
1n
, a
23
, a
24
,
a
25
,...,a
2n
, ...., a
n-1 n-1
, a
n-1 n
. Relaia dintre coordonate comun tuturor elementelor din
aceast zon este i<j.
Zona de sub diagonala principal
Elementele a
21
, a
31
, a
32
,...,a
41
, a
42
, a
43
, .....,a
n1
, a
n2
, a
n n-1
se afl sub diagonala
principal i au ntre coordonate relaia i>j.
n practic prelucrarea elementelor se poate face exclusiv pe diagonale respectiv
pe zonele identificate mai sus(ex:ordonarea diagonalelor respectiv verificarea simetriei sau
a triunghiularitii) sau se poate opta pentru o parcurgere a tuturor elementelor matricei i
prelucrarea difereniat a elementelor n funcie de relaia dintre coordonate(ex:
completarea elementelor cu anumite valori, calculul simultan al mai multor rezultate
obinute pentru fiecare zon n parte).
n funcie de enun se mai pot identifica zona de deasupra diagonalei
secundare(i+j<n+1), zona de sub diagonala secundar(i+j>n+1), precum i zonele N, S, E,
V situate ntre cele dou diagonale.
Modaliti de prelucrare a elementelor n matrice ptratic de dimensiune n
Implementare Pascal Implementare C++
//primul element este a[1][1]
Diagonala principal
for i:=1 to n do
<prelucreaz a[i,i]>
for (i=1;i<=n;i++)
<prelucreaz a[i][i]>
Diagonala secundar
for i:=1 to n do
<prelucreaz a[i,n-i+1]>
for (i=1;i<=n;i++)
<prelucreaz a[i][n-i+1]>
Deasupra diagonalei principale
for i:=1 to n-1 do
for j:=i+1 to n do
<prelucreaz a[i,j]>
for (i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
<prelucreaz a[i][j]>

Petru Florin Gavril Capitolul IV - Matrice



138
Sub diagonala principal
for i:=2 to n do
for j:=1 to i-1 do
<prelucreaz a[i,j]>
for (i=2;i<=n;i++)
for(j=1;j<=i-1;j++)
<prelucreaz a[i][j]>
Prelucrarea ntr-o singur parcurgere a tuturor zonelor
for i:=1 to n do
for j:=1 to n do
if i=j
then
<prelucreaz a[i,j] diag. princ.>
else
if i+j=n+1
<prelucreaz a[i,j] diag. sec.>
else
if i>j
<prelucreaz a[i,j] deasupra diag.
princ.>
else
<prelucreaz a[i,j] sub diag. princ.>
for (i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i==j)
<prelucreaz a[i,j] diag. princ.>
else
if (i+j==n+1)
<prelucreaz a[i,j] diag. sec.>
else
if (i>j)
<prelucreaz a[i,j] deasupra diag.
princ.>
else
<prelucreaz a[i,j] sub diag. princ.>
IV.3. Analiz interdisciplinar
IV.3.1. Matricea n programele colare
Se remarc nc de la nceput diferenele care apar n modul de definire a
matricelor n matematic(funcie) i informatic(tablou bidimensional).
Matricea, ca tip de dat, se studiaz n clasa a IX-a la profilul matematic-
informatic intensiv, n clasa a X-a la matematic-informatic ca tip de dat n capitolul
Tablouri. Tablourile bidimensionale sunt utilizate intens pe toat durata parcurgerii
materiei din clasele IX-XI aplicaiile ce utilizeaz matrice fiind mult mai variate dect
aplicativitatea lor n matematic. Dac n clasa a IX-a(a X-a neintensiv) matricea este
prelucrat la nivel de tablou/linie/coloan materia urmrind crearea unor competene
generale de prelucrare a matricelor(parcurgeri totale/pariale, inserri/eliminri de linii i
coloane, interschimbri de linii/coloane/elemente), n clasa a X-a(a XI-a neintensiv)
matricele sunt reluate la capitolul Subprograme, acolo unde se pune n eviden avantajul
subprogramelor ce primesc ca parametru vectori pentru a prelucra linii dint-o matrice
Petru Florin Gavril Capitolul IV - Matrice



139
cunoscut fiind faptul ca elevii aprofundeaz mai bine cunotinele de manipulare a
vectorilor sau sunt utilizate la capitolul iruri(cu precdere la clasele cu predare C++ acolo
unde este necesar utilizarea unui tablou de cuvinte, limbajul Pascal permind utilizarea
unui array of string). Parcurgerile matricelor sunt reluate la capitolul Recursivitate tot n
acelai an punnd din nou n eviden particularitile matricelor ptratice. Tot n capitolul
Recursivitate matricea este abordat ca mijloc de memorare a hrilor sau a unor fotografii
atunci cnd sunt prezentai algoritmii Fill. n clasa a XI-a(intensiv i neintensiv) matricele
sunt utilizate masiv n capitolul Teoria grafurilor. Grafuri neorientate.Grafuri orientate
reprezentnd fie matricea de adiacen, matricea vrfuri-arce, matrici de existen a
lanurilor/drumurilor(algoritmul Roy-Warshall), matricea costurilor, matricea drumurilor
minime(algoritmul Roy-Floyd) sau pentru a memora listele de adiacen n acest caz fiind
necesar i vectorul gradelor. Capitolul Backtracking utilizeaz matricele la probleme cum
ar fi Comis voiajor, Cavalerii mesei rotunde ce se pot trata i prin teoria grafurilor,
matricea fiind un mijloc de memorare a soluiilor optime atunci cnd acestea sunt cerute
sau harta n probleme tratate prin Backtracking n plan de tipul Labirint, Sritura
calului. Programarea dinamic(clasa a XI-a intensiv) este un alt capitol n care matricele
reprezint fie posibilitatea de a stoca rezultate intermediare(utile pentru calculul rapid al
soluiilor acolo unde spaiul de memorie ocupat nu reprezint o problem) Piramida de
numere, nmulirea optim de matrice, fie stocheaz datele de intrare n probleme
rezolvabile utiliznd, spre exemplu, algoritmul Lee.
La matematic prima abordare a matricelor se face la algebr n clasa a XI-
a(determinani, invers, rang, sisteme) i continu n algebra de clasa a XII-a(monoizi,
grupuri, inele, corpuri).
Chiar dac operaiile cu matrice se studiaz la matematic n clasa XI-a,
informatic ele sunt abordate nc din clasa a IX-a. Adunarea, nmulirea cu scalar i
nmulirea matricelor sunt probleme abordate la clas n cadrul capitolului
Tablouri.Tablouri bidimensionale(Matrice) ca aplicaii elementare cu grad redus de
dificultate(adunarea matricelor, nmulirea cu scalar) sau cu grad mediu de
dificultate(nmulirea matricelor).
Tipurile particulare de matrice ptratice(matricea diagonal, matricea simetric,
matricea triunghiular inferior/superior) apar ca probleme ce se rezolv n clasa a IX-a
dup prezentarea matricelor ptratice i a elementelor particulare lor(diagonale, zonele de
deasupra/sub diagonala principal).
Petru Florin Gavril Capitolul IV - Matrice



140
Determinanii, matricele inversabile i sistemele de ecuaii se studiaz la
matematic n clasa a XI-a ceea ce permite realizarea n paralel la orele de informatic a
unor subprograme pentru calculul determinantului unei matrice(prin triunghiularizare
metoda lui Gauss n cadrul capitolului Subprograme, sau recursiv prin dezvoltare dup o
linie), pentru determinarea rangului unei matrice, a matricei inverse acolo unde este
posibil, precum i a unor aplicaii de rezolvare a sistemelor de m ecuaii cu n necunoscute.
Abordarea problematicii mai sus amintite se poate realiza la clasele de profil informatic
neintensiv fie n orele din trunchiul comun fie n cadrul unui opional n timp ce la profilul
intensiv, care nu permite adugarea unui opional(indiferent de disciplin) numrul de
ore din trunchiul comun fiind maxim, abordarea se poate realiza printr-o bun organizare a
materiei n cadrul capitolului Programare orientat obiect(unde prezint posibilitatea de
suprancrcare a operatorilor pentru realizarea operaiilor de adunare, nmulire cu scalar i
nmulire a matricelor), pentru o parcurgere ct mai facil a problematicii fiind necesar i
un colectiv de elevi de nivel mediu spre nalt.
Aplicaiile create n cadrul orelor ce trateaz problematica matematic a
matricelor se pot realiza individual sau ca un tot unitar, un proiect(ales uneori de elevii cu
un nivel bun de pregtire ca tem de proiect pentru obinerea Atestatului de competene
profesionale) ce se poate caracteriza n funcie de finalitate ca un soft utilitar sau
educaional(dup cum ofer rezultatele direct sau prezint calea/metoda prin care se obine
rezultatul). Bineneles c sursele pot fi optimizate, dar ideea ce se urmrete este de a arta
elevilor c informatica poate fi i este un sprijin n rezolvarea unor probleme de matrice
aplicnd ntocmai algoritmii prezentai la orele de matematic fr a beneficia, din pcate,
de intuiia uman, de flerul rezolvitorului ce poate gsi uneori soluii mai rapide(de
exemplu calculul prin dezvoltare dup o linie a unui determinant care are dou linii sau
dou coloane proporionale, ori triunghiularizarea unui determinant Vandermonde).
IV.3.2 Aplicaii interdisciplinare
Vom prezenta n continuare codurile surs Pascal i C++ ale unor programe ce
realizeaz operaiile de baz(adunarea matricelor, nmulirea cu scalar, nmulirea
matricelor) i programe/subprograme ce realizeaz calculul determinantului unei matrice,
determin rangul unei matrice, construiete matricea invers sau realizeaz discuia naturii
unui sistem cu calculul soluiei atunci cnd este compatibil determinat respectiv afiarea
unei soluii pentru o instan dat a necunoscutelor secundare n cazul unui sistem
compatibil nedeterminat. Pentru determinant se vor prezenta dou subprograme diferite de
Petru Florin Gavril Capitolul IV - Matrice



141
calcul unul prin dezvoltare dup o linie, cellalt prin transformarea n matrice
triunghiular. Descrierea matematic a metodelor aplicat nu va fi reluat n seciunile
urmtoare ele fiind detaliate n seciunea IV.1 a capitolului curent. Ultima aplicaie
descris, Parantezarea optim a nmulirii matricelor, va fi descris pe larg. Sursele au fost
realizate n orele de curs cu elevii din clasele IX-XII.
IV.3.2.1 Suma a dou matrice
Pascal C++
program suma_matrice;
type
vector=array[1..10] of integer;
matrice=array[1..10] of vector;
var n,m:integer;
a,b,s:matrice;
procedure citire(var
a:matrice;n,m:integer);
var i,j:integer;
begin
writeln('Introduceti elementele
de pe fiecare linie separate prin
spatii!');
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
end;
procedure suma(a,b:matrice; var
c:matrice; n,m:integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
c[i,j]:=a[i,j]+b[i,j];
end;
procedure afisare(a:matrice;
n,m:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
#include<iostream.h>
void citire(int a[][10],int n,int m)
{int i,j;
cin>>"Introduceti elementele de pe
fiecare linie separate prin spatii!";
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
}
void suma(int a[][10],int b[][10],int
c[][10],int n, int m)
{int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
c[i][j]=a[i][j]+b[i][j];
}
void afisare(int a[][10],int n,int
m);
{int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
}
void main()
{int a[10][10],b[10][10],s[10][10];
int n,m;
cout<<"Numarul de linii:"<<endl;
cin>>n;
cout<<"Numarul de coloane:";
Petru Florin Gavril Capitolul IV - Matrice



142
write(a[i,j]:5,' ');
writeln;
end;
end;

begin
write('Numarul de linii:');
readln(n);
write('Numarul de coloane:');
readln(m);
citire(a,n,m); citire(b,n,m);
suma(a,b,s,n,m);
writeln('Suma dintre A:');
afisare(a,n,m);
writeln('si B:'); afisare(b,n,m);
writeln('este C:');
afisare(s,n,m); readln;
end.
cin>>m;
citire(a,n,m);
citire(b,n,m);
suma(a,b,s,n,m);
cout<<"Suma dintre A:"<<endl;
afisare(a,n,m);
cout<<"si B:"<<endl;
afisare(b,n,m);
cout<<"este C:";
afisare(s,n,m);
}
IV.3.2.2 nmulirea cu scalar
Pascal C++
program inmultire_scalar;
type
vector=array[1..10] of integer;
matrice=array[1..10] of vector;
var n,m,scalar:integer;
a:matrice;
procedure citire(var
a:matrice;n,m:integer);
var i,j:integer;
begin
{citire matrice a}
end;
procedure inmultire_scalar(var
a:matrice; scalar,n,m:integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
a[i,j]:=a[i,j]*scalar;
end;
#include<iostream.h>
void citire(int a[][10],int n,int
m)
{int i,j;
//citire matrice a
}
void inmultire_scalar(int a[][10],
int scalar, int n, int m)
{int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]*=scalar;
}
void afisare(int a[][10],int n,int
m);
{int i,j;
//afisare matrice a
}
void main()
{int a[10][10];
Petru Florin Gavril Capitolul IV - Matrice



143
procedure afisare(a:matrice;
n,m:integer);
var i,j:integer;
begin {afisare matrice a} end;
begin
write('Numarul de linii:');
readln(n);
write('Numarul de coloane:');
readln(m);
citire(a,n,m);
write(Valoare
scalar:);readln(scalar);
writeln('Produsul scalar dintre
A:');
afisare(a,n,m); writeln('si
,scalar,este:);
inmultire_scalar(a,scalar,n,m);
writeln('este :'); afisare(a,n,m);
readln; end.
int n,m, scalar;
cout<<"Numarul de linii:"<<endl;
cin>>n;
cout<<"Numarul de coloane:";
cin>>m;
citire(a,n,m);
cout<<Valoare scalar:;
cin>>scalar;
cout<<"Produsul scalar dintre
A:"<<endl;
afisare(a,n,m);
cout<<"si
"<<scalar<<este:<<endl;
inmultire_scalar(a,scalar,n,m);
afisare(a,n,m);}
IV.3.2.3 Produsul a dou matrice
Pascal C++
program produs_matrice;
type
vector=array[1..10] of integer;
matrice=array[1..10] of vector;
var n,m,p:integer;
a,b,pr:matrice;
procedure citire(var
a:matrice;n,m:integer);
var i,j:integer;
begin
{citire matrice a}
end;
procedure produs(a,b:matrice; var
c:matrice; n,m,p:integer);
var s,i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to p do
begin
#include<iostream.h>
void citire(int a[][10],int n,int m)
{int i,j;
//citire matrice a
}
void produs(int a[][10],int
b[][10],int c[][10],int n, int m, int
p)
{int s,i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=p;j++)
{
s=0;
for(k=1;k<=m;k++)
s+=a[i][k]*b[k][j];
c[i][j]=s;
}
}
void afisare(int a[][10],int n,int
Petru Florin Gavril Capitolul IV - Matrice



144
s:=0;
for k:=1 to m do
s:=s+a[i,k]*b[k,j];
c[i,j]:=s;
end;
end;
procedure afisare(a:matrice;
n,m:integer);
var i,j:integer;
begin
{afisare matrice a}
end;
begin
writeln(Matricea A:);
write('Numarul de linii:');
readln(n);
write('Numarul de coloane:');
readln(m); citire(a,n,m);
writeln(Matricea B:);
write('Numarul de coloane:');
readln(p); citire(b,m,p);
produs(a,b,pr,n,m,p);
writeln('Produsul dintre
A:');afisare(a,n,m);writeln('si
B:'); afisare(b,m,p); writeln('este
C:'); afisare(pr,n,p); end.
m);
{int i,j;
//afisare matrice a
}
void main()
{int a[10][10],b[10][10],pr[10][10];
int n,m,p;
cout<<Matricea A:<<endl;
cout<<"Numarul de linii:";
cin>>n;
cout<<"Numarul de coloane:";
cin>>m;
citire(a,n,m);
cout<<Matricea B:<<endl;
cout<<Numarul de coloane:
cin>>p;
citire(b,m,p);
produs(a,b,pr,n,m,p);
cout<<"Produsul dintre A:"<<endl;
afisare(a,n,m);
cout<<"si B:"<<endl;
afisare(b,n,m);
cout<<"este C:"<<endl;
afisare(pr,n,p);}
IV.3.2.4 Determinantul unei matrice
IV.3.2.4.1 Calculul determinantului prin dezvoltare dup o linie L
Pascal
(secven program)
C++
(secven program)
program determinant;
type vector=array[1..10] of
integer;
matrice=array[1..10] of
vector;
var
a:matrice;
i,j,n,p,L:integer;
procedure citire(var
#include<iostream.h>
void citire(int a[][10],int n,int
m)
{int i,j;
//citire matrice a
}
int det (int a[][10],int n,int i,
int j, int p)
{int b[10][10],k,l,x;
Petru Florin Gavril Capitolul IV - Matrice



145
a:matrice;n:integer)
var i,j:integer;
begin
{citire matrice a}
end;
function det
(a:matrice;n:integer;i,j,p:inte ger
):integer;
var b:matrice;
k,l,x:integer;
begin
if n=1
then
det:=a[1][1]
else
begin
x:=a[i,j];
{constr. complementul algebric al
a[i][j]}
for k:=1 to i-1 do
b[k]:=a[k];
for k:=i to n-1 do
b[k]:=a[k+1];
for l:=1 to n-1 do
for k:=j to n-1 do
b[l][k]:=b[l][k+1];
if j<n
then
det:=p*x*det(b,n-1,1,1,1)
+det(a,n,i,j+1,-p)
else
det:=p*x*det(b,n-1,1,1,1);
end;
end;

begin
write(Dimensiune A:);readln(n);
citire(a,n);
write(Se dezvolta linia:);
readln(L);
if L mod 2=1 then p=1
if (n==1)
return a[1][1];
else
if (n==2)
return a[1][1]*a[2][2]-
a[1][2]*a[2][1];
else
{//construim complementul
algebric
//al elementului a[i][j]
x:=a[i][j];
for (l=1;l<=n-1;l++)
for (k=1;k<=n-1;k++)
if(l<i)
if(k<j)
b[l][k]=a[l][k];
else
b[l][k]=a[l][k+1];
else
if(k<j)
b[l][k]=a[l+1][k];
else
b[l][k]=a[l+1][k+1];
if (j<n)
return p*x*det(b,n-
1,1,1,1)+det

(a,n,i,j+1,-p);
else
return p*x*det(b,n-
1,1,1,1);
}
}
void main()
{int a[10][10],n,L,p;
cout<<Dimensiune A:;
cin>>n;
citire(a,n);
cout<<Se dezvolta linia;
cin>>L;
if(L%2==1)
Petru Florin Gavril Capitolul IV - Matrice



146
else p=-1;
writeln('det(A)=',detl(a,n,L,1,p));
end.
p=1;
else
p=-1;
cout<<det(A)=<<det(a,n,L,1,p);
}
IV.3.2.4.2 Calculul determinantului prin transformare n matrice
triunghiular
Pascal
(subprogram)
C++
(subprogram)
type matrice=array[1..10,1..10] of
real;
{matricea a trebuie sa contina
elemente nenule pe diagonala
principala; daca nu indeplineste
aceasta conditie se fac in
prealabil interschimbari de linii
si coloane pana cand aceasta
conditie este indeplinita}
function
determinant(a:matrice;n:integer)
:real;
var i,j,k:integer; p:real;
begin
for j:=1 to n-1 do
for i:=j+1 to n do
if a[i,j]<>0
for k:=j to n do
a[i,k]:=-
a[i,k]/a[j,j]*a[j,k]+a[i,k];
p:=1;
for i:=1 to n do
p=p*a[i,i];
determinant:=p;
end;
/*matricea a trebuie sa contina
elemente nenule pe diagonala
principala; daca nu indeplineste
aceasta conditie se fac in prealabil
interschimbari de linii si coloane
pana cand aceasta conditie este
indeplinita*/
float determinant(float a[][10],int
n)
{int i,j,k;
float p;
for (j=1;j<=n-1;j++)
for(i=1;i<=n;i++)
if(a[i][j]!=0)
for (k=j;k<=n;k++)
a[i][k]= -
a[i][k]/a[j][j]*a[j][k]
+a[i][k];
p:=1;
for i:=1 to n do
p=p*a[i,i];
return p;
}
IV.3.2.5 Determinarea rangului unei matrice
Rangul se determin dup algoritmul studiat la clasa la orele de matematic prin
alegerea unui element diferit de 0 i bordarea acestuia cu linii si coloane pana la obinerea
unui minor de dimensiune maxim cu determinant diferit de 0.
Petru Florin Gavril Capitolul IV - Matrice



147
Pascal
(secven program)
C++
(secven program)
program rang_matrice;
type
vector=array[1..10] of integer;
matrice=array[1..10] of vector;
var ms:matrice;
vlin,vcol,lr,cr:vector;

i,j,r1,r2,nlin,nlr,ncr,ec,nec:integ
er;

procedure cauta
(a:matrice;m,n:integer; var
x,y:integer);
var i,j:integer;
begin
{se cauta in matricea a un element
diferit de 0; coordonatele sale se
memoreaza in x si y}
end;

procedure
c_minor(vlin,vcol:vector;nlin:
integer;a:matrice;var
minor:matrice; m,n:integer);
var i,j:integer;
begin
for i:=1 to nlin do
for j:=1 to nlin do
minor[i,j]:=a[vlin[i],vcol[j]];
end;

procedure init (m,n:integer);
var i:integer;
begin{lr si cr retin liniile si
coloane ramase neselectate; initial
nu se alege nimic}
for i:=1 to m do
lr[i]:=i;
#include <iostream.h>
int
ms[10][10],vlin[10],vcol[10],lr[10];
int nlin,nlr,ncr,ec,nec, cr[10];

void cauta(int a[][10],int m, int n,
int &x,int &y)
{int i,j;
/*se cauta in matricea a un element
diferit de 0; coordonatele sale se
memoreaza in x si y*/
}
void c_minor(int vlin[],int
vcol[],int nlin, int a[][10],int
minor[][10])
{int i,j;
for(i=1;i<=nlin;i++)
for(j=1;j<=nlin;j++)
minor[i][j]=a[vlin[i]][vcol[j]];
}
void init(int m,int n)
{int i;
/*lr si cr retin liniile si coloane
ramase neselectate; initial nu se
alege nimic*/
for(i=1;i<=m;i++)
lr[i]=i;
nlr=m;
for(j=1;j<=n;j++)
cr[j]=j;
ncr=n;
}

void elimina(int v[],int &dv, int x)
{int i,j;
i:=1;
while (i<=dv && v[i]!=x)
i++;
Petru Florin Gavril Capitolul IV - Matrice



148
nlr:=m;
for i:=1 to n do
cr[i]:=i;
ncr:=n;
end;

procedure elimina(var v:vector;var
dv:integer;x:integer);
var j,i:integer;
begin{elimina o linie sau o coloana
din lr sau cr dupa selectare}
i:=1;
while (i<=dv) and (v[i]<>x) do
i:=i+1;
for j:=i to dv-1 do
v[j]:=v[j+1];
dv:=dv-1;
end;

function
determinant(a:matrice;n:integer;
i,j,p:integer):integer;
var b:matrice;k,l,x:integer;
begin{vezi IV.3.4.1}end;

function
rang(a:matrice;m,n:integer):integer
;
var
l,c,i,j,detm,dmax,i1,j1:integer;
minor:matrice; stoprang:boolean;
begin
{cautam un element diferit de 0}
cauta(a,m,n,l,c);
if (l=0)
then rang:=0;{matrice nula}
else
begin
{se pastreaza linia l si coloana
c}
nlin:=1; rang:=1;
for (j=i;j<=dv-1;j++)
v[j]=v[j+1];
dv--;
}
int determinant (int a[][10],int
n,int i, int j, int p)
{int b[10][10],k,l,x;
//vezi IV.3.4.1
}

int rang(int a[][10],int m,int n)
{int l,c,i,j,detm,dmax,i1,j1;
int minor[10][10];
int stoprang;
cauta(a,m,n,l,c);
if (l==0)
then
return 0;{matrice nula}
else
{
//se pastreaza linia l si coloana
c
nlin=1;
rang=1;
vlin[nlin]=l;
vcol[nlin]=c;
stoprang=0;
if (m>n)
dmax=n;
else
dmax=m;
//se elimina linia si coloana
pentru a nu fi reselectate
elimina(lr,nlr,vlin[nlin]);
elimina(cr,ncr,vcol[nlin]);
while (nlin<dmax && (!stoprang))
{
nlin=nlin+1;
for (i=1;i<=nlr;i++)
for (j=1;j<=ncr;j++)
{
Petru Florin Gavril Capitolul IV - Matrice



149
vlin[nlin]:=l; vcol[nlin]:=c;
stoprang:=false;
if m>n then dmax:=n
else dmax:=m;
{se elimina linia si coloana
pentru a nu fi reselectate}
elimina(lr,nlr,vlin[nlin]);
elimina(cr,ncr,vcol[nlin]);
while (nlin<dmax) and not
(stoprang) do
begin nlin:=nlin+1;
for i:=1 to nlr do
for j:=1 to ncr do
begin vlin[nlin]:=lr[i];
vcol[nlin]:=cr[j];

c_minor(vlin,vcol,nlin,a,minor,m,n)
;
{se construiesc minori de
dimensiuni superioare celui curent
cu det. Diferit de 0}

detm:=determinant(minor,nlin,1,1,1)
;
if (i=nlr) and (j=ncr)
then writeln(f,'Minor de
dimensiune maxima!!');
if detm<>0
then begin
if ((i<nlr) and
(j<ncr))or ((i=nlr)and(j<ncr))
then
writeln('Cautam un
minor de dimensiune ',nlin,'+1 cu
determinantul diferit de 0');

stoprang:=true;elimina(lr,nlr,vlin[
nlin]);

elimina(cr,ncr,vcol[nlin]);
if (nlin=m)or(nlin=n)
vlin[nlin]=lr[i];
vcol[nlin]=cr[j];

c_minor(vlin,vcol,nlin,a,minor,m,n);
/*se construiesc minori de
dimensiuni superioare celui curent cu
det. Diferit de 0*/

detm=determinant(minor,nlin,1,1,1);
if (i==nlr && j==ncr)
cout<<"Minor de dimensiune
maxima!!"<<'\n';
if (detm!=0)
{
if ((i<nlr &&
j<ncr)||(i==nlr&&j<ncr))
cout<<"Cautam un minor de
dimensiune "<<nlin<<"+1 cu
determinantul diferit de 0"<<'\n';
stoprang=1;

elimina(lr,nlr,vlin[nlin]);

elimina(cr,ncr,vcol[nlin]);
if (nlin==m || nlin==n)
nlin=nlin+1;
j=ncr+1;//iesire fortata
i=nlr+1;
}
else
if (i==nlr && j==ncr)
{ dmax=0;
cout<<"Am epuizat toate
posibilitatile de a gasi un minor de
dimensiune <<nlin<<" diferit de
0"<<'\n';
}
else
cout<<"Construim un alt
minor de aceeasi dimensiune"<<'\n';
}
Petru Florin Gavril Capitolul IV - Matrice



150
then nlin:=nlin+1;
j:=ncr+1;{iesire
fortata}
i:=nlr+1; end
else
if (i=nlr)and(j=ncr)
then begin
dmax:=0;
writeln('Am epuizat
toate posibilitatile de a gasi un
minor de dimensiune ',nlin,'
diferit de 0'); end
else
writeln('Construim un
alt minor de aceeasi dimensiune')
end;
if stoprang then
stoprang:=false;
end;
if not(stoprang) then
rang:=nlin-1;
end;
end;
procedure citire;
var i,j:integer;
begin
{citire matrice ms [ecXnec]}
end;

begin
clrscr; citire; init(ec,nec);
for i:=1 to ec do
begin for j:=1 to nec do
write(ms[i,j]:5);
writeln; end;

r1:=rang(ms,ec,nec);writeln('Rangul
matricei A=',r1); end.
if (stoprang)
stoprang=0;
}
if (!stoprang)
return nlin-1;
}
}

void citire()
{int i,j;
//citire matrice ms [ecXnec]
}

void main()
{
citire();
init(ec,nec);
for (i=1;i<=ec;i++)
{
for( j=1;j<=nec;j++)
cout<<ms[i,j]<< ;
cout<<\n;
}
r1=rang(ms,ec,nec);
cout<<Rangul matricei A=<<r1;
}

Petru Florin Gavril Capitolul IV - Matrice



151
IV.3.2.6 Determinarea inversei unei matrice
Algoritmul studiat la orele de algebr se aplic i pentru determinarea inversei
unei matrice.
Pascal
(secven program)
C++
(secven program)
program determinare_inversabila;
type vector=array[1..5] of integer;
matrice=array[1..5] of vector;
linieadj=array[1..5] of real;
matrice_reala=array[1..5] of
linieadj;
var
ms,mt,madj:matrice;
minv:matrice_reala;
i,j,n,i1,j1,detms:integer;

procedure citire;
begin{citire matrice ms[nXn]}end;

procedure transpunere(var
a:matrice; n:integer);
var i,j,aux:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin

aux:=a[i,j];a[i,j]:=a[j,i];a[j,i]:=
aux;
end;
writeln;
writeln('Matricea transpusa
este....');
for i:=1 to n do
begin writeln;
for j:=1 to n do
write(a[i,j]:5);
end;
writeln;
#include<iostream.h>
#include<stdio.h>
int
ms[10][10],mt[10][10],madj[10][10];
float minv[10][10];
int i,j,n,i1,j1,detms;

void citire();
{
//citire matrice ms
}

void transpunere(int a[][10], int
n)
{int i,j,aux;
for( i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{
aux:=a[i][j];
a[i,j]:=a[j][i];
a[j][i]:=aux;
}
cout<<\n<<matricea transpusa
este:<<\n;
for(i=1;i<=n;i++)
{
cout<<\n;
for(j=1;j<=n;j++)
cout<<a[i][j]<< ;
}
cout<<\n;
}

int determinant (int a[][10],int
Petru Florin Gavril Capitolul IV - Matrice



152
end;

function determinant
(a:matrice;n:integer;
i,j,p:integer):integer;
var b:matrice; k,l,x:integer;
begin
{vezi IV.3.4.1}
end;

procedure adjuncta;
var
i,j,i1,j1,i2,j2:integer;
calg:matrice;
begin
for i:=1 to n do
for j:=1 to n do
begin
for i1:=1 to i-1 do
calg[i1]:=mt[i1];
for i1:=i to n-1 do
calg[i1]:=mt[i1+1];
for i1:=1 to n-1 do
for j1:=j to n-1 do
calg[i1,j1]:=calg[i1,j1+1];
writeln('Calculam determinantul
complementului algebric al
elementului
aT(',i,',',j,')=',mt[i,j]);
writeln('Complementul algebric
este:');
for i2:=1 to n-1 do
begin
for j2:=1 to n-1 do
write(calg[i2,j2]:6);
writeln;
end;
if (i+j) mod 2=0
then
begin

n,int i, int j, int p)
{int b[10][10],k,l,x;
//vezi IV.3.4.1
}

void adjuncta();
{
int i,j,i1,j1,i2,j2, calg[10][10];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
for (i1=1;i1<=n-1;i1++)
for (i1=1;j1<=n-1;j1++)
if(i1<i)
if(j1<j)
calg[i1][j1]=mt[i1][j1];
else
calg[i1][j1]=mt[i1][j1+1];
else
if(j1<j)
calg[i1][j1]=mt[i1+1][j1];
else
calg[i1][j1]=mt[i1+1][j1+1];
cout<<calculam determinantul
complementului algebric al
elementului
at(<<i<<','<<j<<)=<<mt[i][j])<<
\n;
cout<<complementul algebric
este:;
for i2:=1 to n-1 do
{
for j2:=1 to n-1 do
cout<<calg[i2][j2]<< ;
cout<<\n;
}
if ((i+j) % 2==0)
{

madj[i,j]:=determinant(calg,n-
1,1,1,1);
Petru Florin Gavril Capitolul IV - Matrice



153
madj[i,j]:=determinant(calg,n-
1,1,1,1);
writeln('Elementul
a*(',i,',',j,') este determinantul
complementului adica ',madj[i,j]);
end
else
begin
madj[i,j]:=-
determinant(calg,n-1,1,1,1);
writeln('Elementul
a*(',i,',',j,') este determinantul
complementului cu semn schimbat
adica ',madj[i,j]);
end;
readkey;
end;
end;

procedure inversa(var
minv:matrice_reala; n:integer);
var i,j:integer;
begin
writeln;
writeln('Matricea adjuncta
este......');
for i:=1 to n do
begin
writeln;
for j:=1 to n do
write(madj[i,j]:6);
end;
writeln;
writeln('Matricea inversa se
obtine inmultind A* cu inversul
determinantului metricei A');
for i:=1 to n do
for j:=1 to n do
begin
minv[i,j]:=madj[i,j];
minv[i,j]:=minv[i,j]/detms;
cout<<elementul
a*(<<i<<','<<j<<
) este determinantul complementului
adica <<madj[i][j]<<\n;
}
else
{
madj[i][j]:=-
determinant(calg,n-1,1,1,1);
cout<<elementul
a*(<<i<<','<<j<<
) este determinantul complementului
cu semn schimbat adica
<<madj[i][j]<<\n;
}
getch();
}
}

void inversa(float minv[][10], int
n)
{
int i,j;
cout<<\n matricea adjuncta
este......<<\n;
for (i=1;i<=n;i++)
{
cout<<\n;
for(j=1;j<=n;j++)
cout<<madj[i][j]<< ;
}
cout<<matricea inversa se obtine
inmultind a* cu inversul
determinantului metricei a<<\n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
minv[i][j]=madj[i][j];
minv[i][j]=minv[i][j]/detms;
}
cout<<matricea inversa
Petru Florin Gavril Capitolul IV - Matrice



154
end;
writeln;
writeln('Matricea inversa
este......');
for i:=1 to n do
begin
writeln;
for j:=1 to n do
write(minv[i,j]:6:2);
end;end;
begin
clrscr;
write('Numarul de linii si coloane
al matricii este....');readln(n);
writeln('Elementele
matricii....');citire;
writeln;
write('Determinantul matricii
este.....');
detms:=determinant(ms,n,1,1,1);
writeln(detms);
if detms<>0
then
begin transpunere(mt,n);
adjuncta;
inversa(minv,n); end
else
writeln('Matricea nu este
inversabila!');
readln;
readkey;
end.
este......;
for (i=1;i<=n;i++)
{
cout<<\n;
for( j=1;j<=n;j++)
cout<<minv[i][j]<< ;
}
}


void main()
{
cout<<numarul de linii si coloane
al matricii este....;cin>>n;
cout<<elementele matricii....
citire();
cout<<\n determinantul matricii
este.....;
detms:=determinant(ms,n,1,1,1);
cout<<detms<<\n;
if (detms!=0)
{
transpunere(mt,n);
adjuncta();
inversa(minv,n);
}
else
cout<<matricea nu este
inversabila!;
getch();}
IV.3.2.7 Rezolvarea sistemelor de m ecuaii cu n necunoscute
Prezentm mai jos secvena de program ce realizeaz rezolvarea unui sistem
compatibil determinat/nedeterminat. n cazul n care sistemul este compatibil nedeterminat
se obine o soluie singular dup citirea unor valori pentru necunoscutele secundare.
Programul are la baz urmtorul algoritm:
m=n
1. det A 0 sistem Cramer
Petru Florin Gavril Capitolul IV - Matrice



155
2. det A=0
- rang A=rang compatibil nedeterminat
- rang A rang incompatibil
m>n
1. rang A=rang
- rang A=n compatibil determinat
- rang A<n compatibil nedeterminat
2. rang A rang incompatibil
n>m
1. rang A=rang compatibil nedeterminat
2. rang A rang incompatibil
Pascal
(secven program)
C++
(secven program)
program
compatibilitatea_unui_sistem;
uses crt;
type
vector=array[1..10] of integer;
matrice=array[1..10] of vector;
var ms,ms1:matrice;
vlin,vcol,lr,cr,vlin1,

vcol1, necsec:vector;

i,j,det_A,r1,r2,nlin,nlr,ncr,nlin1,
ncr1,

ec,nec:integer;
procedure cauta
(a:matrice;m,n:integer; var
x,y:integer);
var i,j:integer;
begin
{vezi IV.3.5}
end;

procedure
c_minor(vlin,vcol:vector;nlin:integ
// compatibilitatea_unui_sistem;
int
ms[10][10],ms1[10][10],vlin[10],
vcol[10],lr[10],cr[10],vlin1[10],vc
ol1[10],necsec[10],i,j,det_A,r1,r2,
nlin,nlr,ncr,nlin1,ncr1,ec,nec;

void cauta(int a[][10],int m, int
n, int &x,int &y)
{int i,j;
//vezi IV.3.5
}

void c_minor(int vlin[],int
vcol[],int nlin, int a[][10],int
minor[][10])
{
//vezi IV.3.5
};

void init (int m,int n)
{int i;
//vezi IV.3.5
}

Petru Florin Gavril Capitolul IV - Matrice



156
er;a:matrice;var minor:matrice;
m,n:integer);
var i,j:integer;
begin
{vezi IV.3.5}
end;

procedure init (m,n:integer);
var i:integer;
begin
{vezi IV.3.5}
end;

procedure elimina(var v:vector;var
dv:integer;x:integer);
var j,i:integer;
begin
{vezi IV.3.5}
end;

function det(a:matrice;n:integer;

i,j,p:integer):integer;
var b:matrice; k,l,x:integer;
begin
{vezi IV.3.4.1}
end;

function
rang(a:matrice;m,n:integer):integer
;
var l,c,i,j,detm,dmax:integer;
minor:matrice; stoprang:boolean;
begin
{vezi IV.3.5}
end;

procedure citire;
var i,j:integer;
begin
write('Nr. de ec...'); readln(ec);
void elimina(int v[],int &dv, int
x)
{int i,j;
//vezi IV.3.5
}

int det(int a[][10],int n,int i,
int j, int p)
{
int b[10][10];
int k,l,x;
//vezi IV.3.4.1
}

int rang(int a[][10],int m,int n)
{int l,c,i,j,detm,dmax;
int minor[10][10];
int stoprang;
//vezi IV.3.5
}

void citire()
{
int i,j;
cout<<Nr. de ec...;
cin>>ec;
cout<<Nr. de necunoscute...;
cin>>nec;
cout<<Coeficientii matricii
sistemului<<endl;
for( i=1;i<=ec;i++)
{
cout<<Coeficientii ecuatiei
<<i<<:\n;
for( j=1;j<=nec;j++)
cin>>ms[i][j];
cout<<Termenul liber al
ecuatiei <<i<<:;
cin>>ms[i]nec+1;
}
}
Petru Florin Gavril Capitolul IV - Matrice



157
write('Nr. de necunoscute...');
readln(nec);
writeln('Coeficientii matricii
sistemului');
for i:=1 to ec do
for j:=1 to nec+1 do
read(ms[i,j]);
end;

procedure
afisare_sistem(a:matrice;m,n:intege
r);
var i,j:integer;
begin
writeln('Sistemul este:');
for i:=1 to m do begin
for j:=1 to n-1 do
if a[i,j]<0 then
write(a[i,j],'X',j)
else
write('+',a[i,j],'X',j);
if a[i,n]<0
then
write(a[i,n],'X',n,'=',a[i,n+1])
else
write('+',a[i,n],'X',n,'=',a[i,n+1]
);
writeln;
end;
end;

function
calcul_solutie(a:matrice;i,xx:integ
er):real;
var l:integer;
begin
{Inlocuim coloana i cu coloana
termenilor liberi pentru calculul
lui Xi}
for l:=1 to ec do
a[l,i]:=a[l,nec+1];

void afisare_sistem(int a[][10],int
m,int n)
{
int i,j;
cout<<Sistemul este:<<endl;
for( i=1;i<=n;i++)
{
for( j=1;j<=n-1;j++)
if (a[i][j]<0)
cout<<a[i][j]<<'X'<<j;
else
cout<<'+'<<a[i][j]<<'X'<<j;
if (a[i,n]<0)

cout<<a[i][n]<<'X'<<n<<'='<<a[i][n+
1];
else
cout<<'+'<<a[i][n]<<'X'<<n<<'='<<a[
i,n+1]<<endl;
}
}

float calcul_solutie(int
a[][10],int i,int xx);
{int b[10][10], l,c;
for (l=1;l<=ec;l++)
for(c=1;c<=nec;c++)
b[l][c]=a[l][c];
/*Inlocuim coloana i cu coloana
termenilor liberi pentru calculul
lui Xi*/
for (l=1;l<=ec;l++)
b[l][i]=a[l][nec+1];
//Solutia este egala cu:
return det(b,ec,1,1,1)/xx;
}

void afisare_solutii(int ms[][10],
int x)
{int i;
Petru Florin Gavril Capitolul IV - Matrice



158
{Solutia este egala cu:}

calcul_solutie:=det(a,ec,1,1,1)/xx;
end;

procedure
afisare_solutii(ms:matrice;x:intege
r);
var i:integer;
begin
writeln('Solutiile sunt:');
for i:=1 to ec do

write('X',i,'=',calcul_solutie(ms,i
,x):6:2,' ');
end;

procedure compatibil_nedeterminat;
begin
writeln('Sistem compatibil
nedeterminat!');
writeln('Necunoscutele principale
sunt:');
For i:=1 to nlin1-1 do
write('X',vcol1[i],',');
writeln('X',vcol1[nlin1]);

c_minor(vlin1,vcol1,nlin1,ms,ms1,ec
,nec);
writeln('Introduceti valori pentru
necunoscutele secundare:');
for i:=1 to ncr1 do
begin
write('X',cr1[i],'=');
readln(necsec[i]);
end;
for i:=1 to nlin1 do
begin

ms1[i,nlin1+1]:=ms[vlin1[i],nec+1];
for j:=1 to ncr1 do
cout<<Solutiile sunt:<<endl;
for (i=1;i<=ec;i++)
{cout<<'X'<<i<<'=';

cout<<calcul_solutie(ms,i,x)<<' ';}
}

void compatibil_nedeterminat()
{
cout<<Sistem compatibil
nedeterminat;
cout<<endl<<Necunoscutele
principale sunt:'<<endl;
for( i=1;i<=nlin1-1;i++)
cout<<'X'<<vcol1[i]<<',';
cout<<'X'<<vcol1[nlin1]<<endl;

c_minor(vlin1,vcol1,nlin1,ms,m1,ec,
nec);
cout<<Introduceti valori pentru
necunoscutele secundare:;
for( i=1;i<=ncr1;i++)
{
cout<<'X'<<cr1[i]<<'=';
cin>>necsec[i];
}
for( i=1;i<=nlin1;i++)
{

ms1[i][nlin1+1]=ms[vlin1[i]][nec+1]
;
for( j=1;j<=ncr1;j++)

ms1[i][nlin1+1]=ms1[i][nlin1+1]-
ms[vlin1[i]][cr1[j]]*necsec[j];
}
cout<<Obtinem:;
afisare_sistem(ms1,r1,r1);
cout<<O solutie in cazul in care
necunoscutele secundare au valorile
de mai sus:;
Petru Florin Gavril Capitolul IV - Matrice



159
ms1[i,nlin1+1]:=ms1[i,nlin1+1]-
ms[vlin1[i],cr1[j]]*necsec[j];
end;
writeln('Obtinem:');
afisare_sistem(ms1,r1,r1);
writeln('O solutie in cazul in
care necunoscutele secundare au
valorile de mai sus:');
ec:=r1;
nec:=r1;
det_A:=det(ms1,r1,1,1,1);
afisare_solutii(ms1,det_A);
end;

begin
clrscr;
citire;
afisare_sistem(ms,ec,nec);
if nec=ec
then
begin
det_A:=det(ms,ec,1,1,1);
if det_A<>0
then
begin
Writeln('Sistem Cramer!');
afisare_solutii(ms,det_A);
end
else
begin
init(ec,nec);
r1:=rang(ms,ec,nec);
writeln('Rangul matricei
A=',r1);
vlin1:=vlin;
vcol1:=vcol;
cr1:=cr;
nlin1:=r1;
ncr1:=ncr;
init(ec,nec+1);
r2:=rang(ms,ec,nec+1);
ec:=r1;
nec:=r1;
det_A:=det(ms1,r1,1,1,1);
afisare_solutii(ms1,det_A);
};

void main()
{citire();
afisare_sistem(ms,ec,nec);
if (nec==ec)
{
det_A=det(ms,ec,1,1,1);
if (det_A!=0)
{
cout<<Sistem Cramer!;
afisare_solutii(ms,det_A);
}
else
{
init(ec,nec);
r1=rang(ms,ec,nec);
cout<<Rangul matricei
A=<<r1 <<\n;
for(i=1;i<=r1;i++)

{vlin1[i]=vlin[i];vcol1[i]=vcol[i];
}
for(i=1;i<=ncr;i++)
cr1[i]=cr[i];
nlin1=r1;
ncr1=ncr;
init(ec,nec+1);
r2=rang(ms,ec,nec+1);
cout<<Rangul matricei
extinse= <<r2<<endl;
if (r1!=r2)
cout<<Sistem
incompatibil!<<endl;
else
compatibil_nedeterminat();
}
Petru Florin Gavril Capitolul IV - Matrice



160
writeln('Rangul matricei
extinse=',r2);
if r1<>r2
then
writeln('Sistem
incompatibil!')
else
compatibil_nedeterminat;
end
end
else
if ec>nec
then
begin
init(ec,nec);
r1:=rang(ms,ec,nec);
writeln('Rangul matricei
A=',r1);
vlin1:=vlin;
vcol1:=vcol;
nlin1:=r1;
ncr1:=ncr;
cr1:=cr;
init(ec,nec+1);
r2:=rang(ms,ec,nec+1);
writeln('Rangul matricei
extinse=',r2);
if r1=r2
then
if r1=nec
then
begin
writeln('Sistem
compatibil determinat!!');
for i:=1 to nlr do
for j:=1 to nec+1 do
ms[vlin1[nlin1],j]:=
ms[vlin1[nlin1],j]+ms[lr[i],j];
ec:=nec;
writeln('Obtinem:');

}
else
if (ec>nec)
{
init(ec,nec);
r1=rang(ms,ec,nec);
cout<<Rangul matricei A=<<r1
<<\n;
for(i=1;i<=r1;i++)
{vlin1[i]=vlin[i];
vcol1[i]=vcol[i];}
for(i=1;i<=ncr;i++)
cr1[i]=cr[i];
nlin1=r1;
ncr1=ncr;
init(ec,nec+1);
r2=rang(ms,ec,nec+1);
cout<<Rangul matricei
extinse=<< r2<<\n;
if (r1==r2)
if (r1==nec)
{
cout<<Sistem compatibil
determinat!!;
for( i=1;i<=nlr;i++)
for( j=1;j<=nec+1;j++)
ms[vlin1[nlin1]][j]=
ms[vlin1[nlin1]][j]+ms[lr[i]][j];
ec=nec;
cout<<Obtinem:;

afisare_sistem(ms,ec,nec);
det_A=det(ms,ec,1,1,1);

afisare_solutii(ms,det_A);
}
else
compatibil_nedeterminat();
else
cout<<Sistemul este
incompatibil!!;
Petru Florin Gavril Capitolul IV - Matrice



161
afisare_sistem(ms,ec,nec);
det_A:=det(ms,ec,1,1,1);

afisare_solutii(ms,det_A);
end
else
compatibil_nedeterminat
else
writeln('Sistemul este
incompatibil!!');
end
else
begin
init(ec,nec);
r1:=rang(ms,ec,nec);
writeln('Rangul matricei
A=',r1);
vlin1:=vlin;
vcol1:=vcol;
nlin1:=r1;
ncr1:=ncr;
cr1:=cr;
init(ec,nec+1);
r2:=rang(ms,ec,nec+1);
writeln('Rangul matricei
extinse=',r2);
if r1<>r2
then
writeln('Sistem
incompatibil!')
else
compatibil_nedeterminat;
end;
readln;
end.
}
else
{
init(ec,nec);
r1=rang(ms,ec,nec);
cout<<Rangul matricei A=<<r1
<<\n;
for(i=1;i<=r1;i++)

{vlin1[i]=vlin[i];vcol1[i]=vcol[i];
}
for(i=1;i<=ncr;i++)
cr1[i]=cr[i];
nlin1=r1; ncr1=ncr;
init(ec,nec+1);
r2=rang(ms,ec,nec+1);
cout<<Rangul matricei
extinse=<< r2<<\n;
if (r1!=r2)
cout<<Sistem
incompatibil!<<\n;
else
compatibil_nedeterminat();
}
}
Observaie:
n cazul n care B X A = - este sistem de n ecuaii cu n necunoscute compatibil
determinat atunci o alt metod de rezolvare se obine astfel:
' 1 1
'
i i
B
n
B x B A X I B X A A = => - = - => = -



Petru Florin Gavril Capitolul IV - Matrice



162
IV.3.2.8 nmulirea optimal a unui ir de matrice
Fie matricele A
1
,A
2
,....,A
n
unde A
i
are dimensiunile d
i-1
Xd
i
, pentru i=1,2,...,n. Se
cere s se determine o ordine de efectuare a produsului A
1
xA
2
x....xA
n
efectund un numr
minim de operaii.
Deoarece nmulirea matricelor este asociativ, matricea produs A
1
A
2
A
3
poate fi
calculat prin ((A
1
A
2
)A
3
) sau (A
1
(A
2
A
3
)). Dac matricele au, spre exemplu, dimensiunile
2x5, 5x2 i 2x4 atunci produsul se poate realiza prin 36 de nmuliri n cazul ((A
1
A
2
)A
3
)
sau prin 80 de nmuliri n cazul (A
1
(A
2
A
3
)).
Problema de mai sus se reduce la gsirea acelei ordini de asociere pentru care
numrul nmulirilor s fie minim.
Rezolvarea are la baz principiul programrii dinamice studiat n clasa a XI-a la
profilul intensiv.
Algoritmul descris mai jos determin o variant optim de asociere dei n
practic se observ c soluia optim nu este unic. Soluia este obinut dinamic i
folosete o matrice ptratic n care M(i,j) memoreaz numrul optim de nmuliri ale
secvenei de produs A
i
xA
i+1
x.....xA
j
, iar M(j,i) reine poziia n cadrul secvenei i,...,j unde
se plaseaz parantezele )(.
Algoritm:
P1. Pentru a calcula A
1
xA
2
...xA
n
, putem realiza o prim parantezare astfel: (A
1
xA
2
...
A
k
)(A
k+1
...xA
n
). Parantezarea anterioar este optimal dac (A
1
xA
2
... A
k
) este
parantezat optimal i (A
k+1
...xA
n
) este de asemenea parantezat optimal.
Subproblemele problemei iniiale constau n determinarea parantezrii produselor
de forma A
i
xA
i+1
... A
j
, 1<=i<=j<=n. Subproblemele nu sunt independente. De
exemplu, pentru a determina parantezarea optim a produsului A
1
x...xA
4
, trebuie
calculate anterior valorile optime ale produselor A
1
xA
2
xA
3
, A
2
xA
3
xA
4
, A
1
xA
2
,
A
2
xA
3
i A
3
xA
4
. prin urmare ambele criterii sunt satisfcute.
P2. Soluiile optime ale subproblemelor se rein, cum spuneam mai sus, ntr-o matrice
M de dimensiune nXn, M[i,j]= numrul minim de nmuliri elementare necesare
pentru obinerea produsului A
i
xA
i+1
... A
j
, 1<=i<=j<=n.
Se observ c:
M[i,i]=0, i=1,2,...,n
M[i,j]=min{M[i,k]+M[k+1,j]+d
i
xd
k+1
xd
j+1
|1<=k<j}
Dac se dorete doar aflarea numrului optim de nmuliri atunci se utilizeaz
doar partea superior triunghiular a matricei. Pentru a afia i o soluie optim, nu
Petru Florin Gavril Capitolul IV - Matrice



163
numai numrul nmulirilor necesare, M[j,i] va reine valoarea indicelui k obinut
pentru M[i,j].
P3. Aflarea soluiei printr-o implementare recursiv a relaiei de recuren este
ineficient deoarece multe dintre subprobleme se suprapun, ceea ce conduce la o
rezolvare a relaiei de recuren n mod bottom-up:
pentru h1, n execut
pentru i1, n-1 execut
j i+h
mininfinit
pentru ki,j-1 execut
dac min>M[i,k]+M[k,j]+d[i]*d[k+1]*d[j+1]
atunci
min M[i,k]+M[k,j]+d[i]*d[k+1]*d[j+1]
kmink
sf. dac
M[i,j]min
M[j,i]kmin
sf. pentru
sf. pentru
sf. pentru
Numrul minim de nmuliri necesare este memorat n M[1,n].
P4. Codul surs conine i reconstituirea soluiei(obinut recursiv).
Pascal
(secven program)
C++
(secven program)
program inmultire_optima;
const oo=10000000000;
var n,i,j,h,kmin:integer;
d:array[1..50] of integer;
min:longint;
m:array[1..50,1..50] of longint;

procedure citire;
var i:integer;
begin
write('Numarul de matrice din
#include<iostream.h>
long oo=10000000000;
int n;
int d[50];
long m[50][50];

void citire();
{int i;
cout<<Numarul de matrice din
produs:;
cin>>n;
Petru Florin Gavril Capitolul IV - Matrice



164
produs:');
readln(n);
for i:=1 to n do
begin
write('Dimensiune ',i,':')
readln(d[i]);
end;
end;

procedure afisare(i,j:integer);
begin
if i=j
then
write ('A',i)
else
begin
write('(');
afisare(i,m[j,i]);
write(')(');
afisare(m[j,i]+1,j)
write(')');
end;
end;
procedure minim(i,j:integer;var
min:longint; kmin: longint);
var
k:integer;
begin
min=oo;
for k:=i to j-1 do
if
min>m[i,k]+m[k+1,j]+d[i]*d[k+1]*

d[j+1]
then
begin

min=m[i,k]+m[k+1,j]+d[i]*d[k+1]*d[j
+1];
kmin:=k;
end;
for (i=1;i<=n;i++)
{
cout<<Dimensiune <<i<<':';
cin>>d[i];
}
}

void afisare(int i,int j)
{
if (i==j)
cout<<'A'<<i;
else
{
cout<<'(';
afisare(i,m[j][i]);
cout<<)(;
afisare(m[j,i]+1,j)
cout<<);
}
}
void minim(int i,int j,long &min,int
&kmin)
{
int k;
min=oo;
for (k=i;k<=j-1;k++)
if
(min>m[i,k]+m[k+1,j]+d[i]*d[k+1]*
d[j+1])
{
min=m[i,k]+m[k+1,j]+d[i]*d[k+1]*d[j+1
];
kmin:=k;
}
}

void main()
{int h,i,j,kmin;
long min;
citire();
for (h=1;h<=n-1;h++)
Petru Florin Gavril Capitolul IV - Matrice



165
end;
begin
citire;
for h:=1 to n-1 do
for i:=1 to n-1 do
begin
j:=i+h;
minim(i,j,min,kmin);
m[i,j]:=min;
m[j,i]:=kmin
end;
writeln('Numarul optim de
inmultiri:', m[1,n]);
writeln('Modalitatea de inmultire
este:');
afisare(1,n);
end.
for( i=1;i<=n-1;i++)
{
j=i+h;
minim(i,j,min,kmin);
m[i][j]:=min;
m[j][i]:=kmin
}
cout<<Numarul optim de
inmultiri:<< m[1][n]<<endl;
cout<<Modalitatea de inmultire
este:;
afisare(1,n);
}

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