Sunteți pe pagina 1din 65

Petru Florin Gavril Capitolul IV - Matrice

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 x1, x2, ...,xn este o ecuaie de forma
a1x1+a2x2+......+anxn=b (1)
unde ai(i=1,2,...,n) i b sunt numere complexe.
Vom considera un sistem de m astfel de ecuaii cu n necunoscute:
a11 x1 a12 x 2 ... a1n x n b1
a x a x ... a x b
21 1 22 2 2n n 2
(2)
.............................................
a m1 x1 a m 2 x 2 ... a mn x n bm

unde aij,bi(i=1,2,...,m,j=1,2,,n) sunt numere complexe. Numerele aij poart numele de


coeficieni ai necunoscutelor, iar numerele bi 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 x1 , x2, ...,xn 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:

a11 a12 ... a1n a11 a12 ... a1n b1



a 21 a 22 ... a 2 n a21 a22 ... a2 n b2
A = ... ... ... respectiv = ... ...
A ... ... ...
...

a ... a mn a bm
m1 am 2 m1 am 2 ... amn
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.

101
Petru Florin Gavril Capitolul IV - Matrice

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,:
A(i, j) = aij E, () (i, j) M N.
Reprezentarea n mod natural a unei matrice este un tablou bidimensional cu m linii i n
coloane se face astfel:
a11 a12 ... a1n

a21 a22 ... a2 n
A= (3)
... ... ... ...

a ... amn
m1 am 2

Datorit notaiei (3), n loc de matrice de tipul (m, n) se mai spune matrice cu m linii i n
coloane. Numerele aij 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 = aij 1im sau A = aij i1,...m (3)
1 j n j 1,...n

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 ai1, ai2 , ain, i 1, 2, m.
n mod analog, restricia funciei A la mulimea elementelor de forma (1, j), (2, j), (n, j),
unde j 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 =

aij 1i m , notaia (3) fiind introdus de M. Bocher n anul 1919.


1 j n

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.

102
Petru Florin Gavril Capitolul IV - Matrice

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

a 21
A = a31 .


a
m1
2) Dac m = 1, matricea de tipul (1, n) se numete matrice linie i este de forma:
A = (a11, a12 , a13, a1n)
3) Dac m = n, matricea de tipul (m, n) se numete matrice ptratic de ordinul n
i este de forma:
a11 a12 ... a1n

a21 a22 ... a2 n
A= .
... ... ... ...

a ... ann
n1 an 2
Pentru o matrice ptratic de ordin n, sistemul ordonat de elemente
(a11, a22, a33, ann) se numete diagonala principal a matricei A, iar sistemul ordonat de
elemente (a1n, a2n-1, a3n-2, a n1 ) se numete diagonala secundar a matricei A.
Suma de forma a11 + a22 + a33 + + a nn se numete urma matricei A i se
noteaz:
n
Tr(A) = a
i 1
ii .

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:
1 0 0 ... 0

0 1 0 ... 0
In = cu a11 = 1, i = 1, n i aij =0, () i j.
... ... ... ... ...

0 1
0 0 ...
Se mai noteaz astfel:
In = (ij) 1 i , j n , unde ij este simbolul lui Kronecker, definit astfel

103
Petru Florin Gavril Capitolul IV - Matrice

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

a11 0 0 ... 0

0 a22 0 ... 0
A= = (aijij) 1 i , j n .
... ... ... ... ...

0
0 0 ... a nn

3) matrice triunghiular de ordin n care poate fi de forma:


a11 0 0 ... 0 a11 a12 a13 ... a1n

a21 a22 0 ... 0 0 a22 a23 ... a2 n
A1 = sau A2 = .
... ... ... ... ... ... ... ... ... ...

a ... ann 0 ... ann
n1 an 2 an 3 0 0

Este matricea n care aij = 0 pentru i j, sau pentru i j.


A1 se numete matrice triunghiular inferior, iar A2 se numete matrice
triunghiular superior
4) matricea scalar de forma:
0 0 ... 0

0 0 ... 0
A= , unde C.
... ... ... ... ...

0
0 0 ...
5) matricea nul este matricea n care toate elementele sunt egale cu 0; este de
forma:
0 0 0 ... 0

0 0 0 ... 0
0n =
... ... ... ... ...

0 0
0 0 ...

n mulimea M mn(C) distingem cteva submulimi importante i anume:


M mn() 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) M mn(Q) M mn() M mn(C).

104
Petru Florin Gavril Capitolul IV - Matrice

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 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 M, j N, A(i, j) = B(i, j).
Folosind notaia (3) corespunztoare unei matrice i presupunnd c:
a11 a12 ... a1n b11 b12 ... b1n

a 21 a 22 ... a 2 n b21 b22 ... b2 n
A= i B =
... ... ... ... ... ... ... ...

a ... a mn b ... bmn
m1 am2 m1 bm 2
Atunci A = B aij = bij, () i M, j N.

IV.1.2. Operaii cu matrice


IV.1.2.1 Adunarea matricelor
Definiia 4.1.3
Fie A, B M mn (C), A = aij 11ijmn , B = bij 11ijmn . Definim matricea
1 j n
C = cij 1 i m astfel:

cij = aij + bij, () i = 1, m , j = 1, n .


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 M mn(C), A + B = B + A.
2) Asociativitatea: ()A, B, C 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 M mn(C), A + O mn = O mn + A.

105
Petru Florin Gavril Capitolul IV - Matrice

4) Matricea opus: ()A M mn(C), () A 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 M mn(C) are drept soluie unic
matricea X = A-B, cu X M mn(C).
IV.1.2.2. nmulirea matricelor cu scalari din corpul K
Definiia 4.1.5
Se numete produs dintre numrul K i matricea A = aij 1im M m n (K),
1 j n

matricea B = bij 1im M mn (K), notat B = A, unde b ij= aij.


1 j n

Deci, nmulirea cu scalari din corpul K a matricelor din M mn(K) este o operaie
extern, care asociaz fiecrei perechi (, A) K M mn(K) o matrice A 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 K este elementul unitate din K.
2) (A) = ()A, unde , K, A M (K).
3) (A + B) = A + B, unde K, A, B M (K).
4) ( + )A = A + A, unde , K, A 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 = aij 1im o matrice de tip (m, n) i B = bij 1in o matrice de tip (n, p). Prin
1 j n 1 j p

produsul matricelor A i B, notat AB se nelege o nou matrice C= cij 1im de tipul (m, p)
1 j p

106
Petru Florin Gavril Capitolul IV - Matrice

n care orice element cij 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.
n
cij = ai1b1j + ai2b2j + + ainbnj = a
k 1
b , () i= 1, m , j= 1, n
ik kj (1)

Proprieti:
1) Distributivitatea fa de adunare
Dac A M mn(K), iar B1 , B2 M np(K), atunci are loc relaia:
A(B 1 + B2) = A B 1 + AB2 (2)
Dac A1, A2 M mn(K), iar B M np(K), atunci are loc relaia:
(A1 + A2)B = A1B + A2B (3)
2) Asociativitatea
() A M mn(K), B M np(K) i C M pq(K), are loc egalitatea:
(AB)C = A(BC) (4)
3) () A M mn(K), au loc relaiile:
ImA = 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 M mn(K), au loc relaiile:
Opm A = Opn (7)
A O np = O mp (8)
unde Opm , Opn , 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 On i matricea unitate In de ordin n sunt permutabile cu orice
matrice de acelai ordin, adic au loc relaiile urmtoare:
A In = In A = A (10)
A On = On A = On (11)
() A M nn(K).

107
Petru Florin Gavril Capitolul IV - Matrice

2) Fie A M nn(K). Se definesc puterile matricei A n modul urmtor:


A0 = I n,
A1 = A,
A2 = A A,
.
n general, A
An = A A, m N

mo ri

IV.1.3. Transpusa unei matrice


Definiia 4.1.8
Fie A aij 1i m o matrice de tip (m, n). Matricea
1 j n
t

A t a kl 1 k n
1l m
, unde

t
akl = alk, () k = 1, n, l = 1, 2, m se numete transpusa matricei A.
Observaii:
1) Matricea tA este o matrice de tipul (n, m) i se obine din A lund liniile ,
respectiv coloanele lui A drept coloane, respectiv linii pentru tA (mai precis,
prima linie din a matricei tA este prima coloan a matricei A, a doua linie a
lui tA este a doua coloan a lui A . a. m. d.).
2) Dac A este o matrice ptratic de ordin n, atunci transpusa sa tA este de
asemenea o matrice ptratic de ordin n. dac k = l, atunci takk = akk i deci
diagonala principal a matricei tA 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(tA) = A , () A M mn(K).
2) t(A + B) = tA + tB, () A, B M mn(K).
3) t(A) = tA, () A M mn(K) i () .
4) Dac A aik 1i m i B bkj 1k p , atunci t(A B) = tB tA.
1 k p 1 j n

Tipuri particulare de matrice ptratice


Definiia 4.1.9
O matrice ptratic A se numete simetric dac satisface condiia: tA = A.
Observaie
O matrice simetric se caracterizeaz prin faptul c elementele sale aezate
simetric n raport cu diagonala principal sunt egale, adic aij = aji , () i, j = 1, 2, n.

108
Petru Florin Gavril Capitolul IV - Matrice

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: tA = - A.
Observaie:
ntr-o matrice antisimetric, elementele situate simetric n raport cu diagonala
principal sunt opuse, iar elementele diagonalei principale sunt nule, adic:
aij = aji , () i, j = 1, 2, n, i j
aii = 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 M n () se numete ortogonal dac i numai dac A tA = In , unde
In este matricea unitate de ordin n.
Definiia 4.1.12

O matrice AM n (C)este cu elemente pur imaginare dac a ij= aij , ( )i, j= 1, n

unde aij este conjugatul numrului complex a ij.

Definiia 4.1.13

O matrice A M n (C) se numete hermitic dac A = t( A ).


Definiia 4.1.14

O matrice A M n (C) se numete antihermitic dac A = - t( A ).


Definiia 4.1.15

O matrice A M n (C) se numete unitar dac t( A )A = A t( A ) = In.

109
Petru Florin Gavril Capitolul IV - Matrice

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 Sn le vom nota cu litere mici greceti: , , , , , . Se
obinuiete ca o permutare de gradul n s se noteze astfel:
1 2 ........... n
=
1 2 ......... n
2.Numrul tuturor permutrilor de grad n este n!.
n mulimea Sn distingem un element remarcabil i anume funcia identic
1A : A A, care poart numele de permutare identic, notat cu e. Aadar,
1 2 3 ... n
e = .
1 2 3 ... n
Definiia 4.1.17
Fie A = 1, 2, , n . Definim submulimea M = (i, j) / 1 i j n . Dac Sn
este o permutare de gradul n, o pereche ordonat (i, j) M se numete inversiune a
permutrii dac (i) (j).
Vom nota cu m() numrul tuturor inversiunilor permutrii . Se observ c m()
2
este cel mult egal cu numrul elementelor mulimii M, care este egal cu C n .

2 n(n 1)
Deci, 0 m() C n = .
2
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 K,
a11 a12
K corp comutativ, i, j 1, 2, A = , numrul K, notat cu:
a21 a22

110
Petru Florin Gavril Capitolul IV - Matrice

a11 a12
= detA = = a11a22 - a12a21
a21 a22

Observaie:
Mulimea S2 a permutrilor mulimii 1, 2 este format din dou elemente:
1 2 1 2
1 = i 2 = . m(1) = 0; m(2) = 1 deci 1 permutare par, iar 2
1 2 2 1
permutare impar.
Definiia 4.1.19
Se numete determinant asociat unei matrice de ordin 3 cu a ij K (K corp
a11 a12 a13

comutativ), i, j 1, 2, 3 , A= a 21 a 22 a 23 , numrul K, notat cu:
a a33
31 a32

a11 a12 a13


= detA = a21 a22 a23 = a
S3
1i1 a2i2 a3i3
a31 a32 a33

Definiia 4.1.22:
Se numete determinant asociat unei matrice ptratice de ordin n cu a ij K
a11 a12 a1n

a21 a22 a2 n
(K corp comutativ), i, j 1, 2, , n, A = numrul unic


a ann
1n a2 n
determinat K, dat de formula:
a11 a12 a1n
a21 a22 a2 n
= detA = = ( )a1 (1) a 2 ( 2) ...a n ( n )
S n

an1 an 2 ann

Observaii:
1. Produsul a1(1)a2(2)a n(n) se numete termen al determinantului de ordinul n.

2. Uneori numrul = detA se mai noteaz prescurtat i A sau aij 1 i n . 1 j n


3. n formula determinantului unei matrice exist n! termeni, dintre care n!/2 au
semnul (+), iar n!/2 au semnul (-).

111
Petru Florin Gavril Capitolul IV - Matrice

4. Definiia determinantului se aplic i matricelor de ordin 1, cnd A = (a 11). n


acest caz, detA = a11 .
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

a11 a12
=
a21 a22
cu dou linii i dou coloane format din 4 elemente. Valoarea determinantului (4) este dat
de expresia
= a11a22 a12a21
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

a11 a12 a13


= a21 a22 a23
a31 a32 a33
Valoarea acestui determinant poate fi calculat n dou moduri i anume:

Regula triunghiurilor
Valoarea determinantului (5) este dat de expresia:
= a11a22a33 + a13a21a32 + a12a23a31 a13a22a31 a11a23a32 a12a21a32
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

112
Petru Florin Gavril Capitolul IV - Matrice

diagonala secundar i dou produse de elemente situate n vrfurile a dou triunghiuri


(isoscele) care au bazele paralele cu diagonala secundar (vezi figura4.2).
a11 a12 a13 a11 a12 a13
a21 a22 a23 a21 a22 a23
a31 a32 a33 a31 a32 a33

Figura 4.1 Figura 4.2


Calculul determinanilor de ordin n
Fie determinantul de ordin n urmtor:
a11 a12 a13 a1n
a21 a22 a23 a2 n
d=

an1 an 2 an 3 ann

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 dij.
Numrul Aij = (-1)i+jdij se numete complementul algebric al elementului aij n
determinantul d.
Teorema 4.1.3
Fie determinantul de ordin n, d = aij 1in . Atunci, () 1 i n are loc
1 j n

egalitatea:
d = ai1Ai1 + ai2Ai2 + + ainAin

Egalitatea (1) poart denumirea de dezvoltarea determinantului d dup linia i.


Teorema 4.1.4
Fie determinantul de ordin n, d = aij 1in . Atunci, () 1 j n are loc
1 j n

egalitatea
d = a1jA1j + a2jA2j + + anjAnj
Egalitatea (3) poart denumirea de dezvoltarea determinantului d dup coloana j.

113
Petru Florin Gavril Capitolul IV - Matrice

Determinani triunghiulari
Sunt acei determinani care au toate elementele situate deasupra uneia din diagonale, nule.
a11 0 0 0
a21 a22 0 0
=
... ... ... ...
an1 an 2 ... ann

(1)
Dezvoltndu-l dup prima linie, vom avea:
a22 0 ... 0
a32 a33 ... 0
= a11
... ... ... ...
an 2 an 3 ... ann

Procednd analog, vom obine:


= a11 a22 a33 an-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 = aij 1in se numete simetric, dac elementele simetrice fa


1 j n

de diagonala principal sunt egale, adic a ij=aji


n(n 1)
Un astfel de determinant are elemente diferite.
2
2) Un determinant = aij 1in se numete antisimetric, dac elementele sale au
1 j n

proprietatea aij = - aji 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 A (ai , j )1i m o matrice din M mn(C) i k N astfel nct 1 k min(m,n).
1 j 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 Cm Cn minori de ordin k.
k k

114
Petru Florin Gavril Capitolul IV - Matrice

Definiia 4.1.23
Fie A M 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
rangOmn = 0.
Teorema 4.1.5
Fie A M 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 M mn (C) i BM 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 (ai1 , ai 2 ,..., ain ) a unei matrice A M mn(C), poate fi

privit ca un vector n spaiul liniar Cn/C i fiecare coloan t (a j1 , a j 2 ,..., a jm ) 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 M mn(C) se mai poate calcula i folosind metodele
transformrii n matricea unitate sau n matricea triunghiular, metode

115
Petru Florin Gavril Capitolul IV - Matrice

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 M 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 M n (K) este inversabil dac ()B M n (K)astfel nct
AB = BA = In.
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 M n (K) o matrice ptratic. Matricea A este inversabil dac i numai
dac este nesingular (detA 0).
Proprieti:
1) Dac A M n(K) este inversabil, atunci i A-1 este inversabil i are loc
egalitatea (A-1)-1 = A.
2) Dac A M 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
1
det A-1 =
det A
4) Inversa matricei unitate de ordin n este tot matricea unitate de ordin n:
In-1 = I n
5) Inversa matricei transpuse este egal cu transpusa matricei inverse:
(tA) -1 = t(A-1)

116
Petru Florin Gavril Capitolul IV - Matrice

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 M n(Q) sau A M n(), cu detA 0, atunci A-1 M n(Q) sau
A-1M n() .
8) Dac A Mn(Z) i detA = 1 , atunci A-1 Mn(Z), adic A este inversabil
n Mn(Z).
9) Fie A, B Mn(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 x1, x2, , xn un ansamblu de egaliti:
a11x1 a12 x2 ... a1n xn b1
a x a x ...a x b
21 1 22 2 2n n 2
(1)
......................................
am1 x1 am 2 x2 ... amn xn bm

unde aij, bi K.
Sistemul (1) poate fi scris sub form condensat astfel:
n

a
j 1
ij x j bi , 1 i m (2)

Matricea de tip mn:

117
Petru Florin Gavril Capitolul IV - Matrice

a11 a12 ... a1n



, notat i A = aij 1im , se numete
a21 a22 ... a2 n
A=
... ... ... ... 1 j n

a ... amn
m1 am 2

matricea coeficienilor sistemului, iar matricea de tip m(n-1):


a11 a12 ... a1n b1

a21 a22 ... a2 n b
A= ,
... ... ... ... ...

a bm
m1 am 2 ... amn

avnd primele n coloane, coloanele matricei A i ultima coloan format din coloana
termenilor liberi ai sistemului se numete matricea extins.
b1 x1

b2 x2
Matricea B = este matricea termenilor liberi, iar dac notm cu X = ... ,
...

b x
m m
matricea necunoscutelor, sistemul (1) se mai scrie i sub forma matriceal:
A X= B (3)
Definiia 4.1.24:
Un sistem ordonat de elemente 1 , 2 ,..., n 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

a
j 1
ij j bi , 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.

118
Petru Florin Gavril Capitolul IV - Matrice

IV.1.6.2. Sisteme de tip Cramer


Sistemele liniare de forma:

a11x1 a12 x2 ... a1n xn b1


a x a x ...a x b
21 1 22 2 2n n 2
(4)
......................................
an1 x1 an 2 x2 ... ann xn bn

n care matricea A a sistemului este o matrice ptratic cu elemente din corpul comutativ
K, A M n(K) i B = t(b1, b2 , , bn) 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)
t
unde, X = (x1, x2 , , xn) 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
d1 d d
x1 = , x2 = 2 , , xn = n (6)
d d d
dj 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:
a11x1 a12 x2 ... a1n xn b1
a x a x ...a x b
21 1 22 2 2n n 2
(1)
......................................
am1 x1 am 2 x2 ... amn xn bm

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:

119
Petru Florin Gavril Capitolul IV - Matrice

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:

a11 a12 ... a1r


a21 a22 ... a2 r
0.
... ... ... ...
a r1 ar 2 ... arr

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:
a11x1 a12 x2 ... a1n xn b1
a x a x ...a x b
21 1 22 2 2n n 2
(1)
.........................................
ar1 x1 ar 2 x2 ... arn xn br

care va fi echivalent cu (1), avnd aceeai mulime de soluii.


Matricea noului sistem are rangul r, r n.

120
Petru Florin Gavril Capitolul IV - Matrice

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 , xr+2 , , xn. Acestora din urm le atribuim
valori arbitrare, respectiv 1 , 2 , 3 , , n-r.
Se obine sistemul:
a11x1 a12 x2 ... a1r xr b1 a1,r 11 ... a1n nr
a x a x ...a x b a ... a
21 1 22 2 2r r 2 2 ,r 1 1 2 n nr
(1)
..........................................................................
ar1 x1 ar 2 x2 ... arr xrr br ar ,r 11 ... arnnr

care este un sistem Cramer, compatibil i se rezolv cu ajutorul formulelor (6). Soluia
unic a sistemului (1) este ( 1 , 2 ,..., r ) iar ( 1 , 2 ,..., r ,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 ( 1 , 2 ,..., r ,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:

121
Petru Florin Gavril Capitolul IV - Matrice

a11x1 a12 x2 ... a1n xn 0


a x a x ...a x 0
21 1 22 2 2n n
(9)
.........................................
am1 x1 am 2 x2 ... amn xn 0

Observm de la nceput c un sistem omogen este totdeauna compatibil deoarece


admite soluia banal x1 = x2 = = xn = 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:

122
Petru Florin Gavril Capitolul IV - Matrice

a11x1 a12 x2 ... a1n xn a1,n1 xn1 0


a x a x ...a x a x 0
21 1 22 2 2n n 2 ,n 1 n 1
(10)
.........................................
an1 x1 an 2 x2 ... ann xn an ,n1 xn1 0

cu matricea A = aij i1,n . Cum rangA = n, se pot forma n+1 minori de ordin maxim n,
j 1.n1

nenuli. Vom considera un 1 , minor de ordin n nenul suprimnd din A coloana 1. Acesta

va fi ales minor principal, necunoscuta x1 necunoscut secundar i x2, x3 , , xn+1 ca


necunoscute principale. Analog putem alege minorii 2 , 3 , , n 1 .

Putem rezolva ecuaiile principale n raport cu necunoscutele principale dup


formulele lui Cramer deoarece i 0. Soluiile sistemului (10) sunt formate din sisteme

de (n+1) numere proporionale cu 1 , - 2 , 3 , , (-1) n n 1 :

x1 x x xn1
=- 2 = 3 == = t.
1 2 3 1n n1
De obinem c:
x1 = t 1

x2 = -t 2

x3 = t 3

.
xn+1 = (-1) n t n 1 .

Dnd lui t valori arbitrare obinem toate soluiile sistemului (10).


Proprieti:
1) Dac 1, 2 ,..., n i 1, 2 ,..., n sunt soluii ale unui sistem omogen
atunci i 1 1 , 2 2 ,..., n n este soluie a sistemului.

2) Dac 1 , 2 ,..., n este soluie a unui sistem omogen, atunci i

k 1, k 2 ,...,k n 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:

123
Petru Florin Gavril Capitolul IV - Matrice

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 xn 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 = tij i1,n i Pb = ci i1,n , atunci sistemul devine:
j 1,n

t11x1 t12 x2 ... t1n xn c1


... t 2 n xn c2
t 22 x2
(4)
. . . . . . . . .
t mn xn cn

Din ultima ecuaie se obine:


cn
xn = .
t mn
nlocuind n penultima ecuaie, avem:
cn1 t mn cn tn1,n
xn-1 =
t mn t n1,n1

i tot aa pn la prima ecuaie, de unde se obine:


n
c1 t1 j x j
j 2
x1 = .
t11
Algoritmul este:
cn
xn =
t mn

124
Petru Florin Gavril Capitolul IV - Matrice

n
cni t n i , j xj
, i = 1, n 1 .
j n i 1
xn-i =
t ni ,ni

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:
a11x1 a12 x2 a13 x3 b1

a21x1 a22 x2 a23 x3 b2 (1)
a x a x a x b
31 1 32 2 33 3 3

sau, n forma matriceal:

125
Petru Florin Gavril Capitolul IV - Matrice

a11 a12 a13 x1 b1


a a23 x 2 = b2
21 a22 (2)
a31 a32 a33 x3 b3

unde A = aij i, j 1,3 este matricea sistemului, X = xi i1,3 este matricea coloan a

necunoscutelor, iar B = bi i 1,3 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 a11, presupus nenul (dac nu este aa, reordonm i renumerotm
ecuaiile pentru a fi ndeplinit aceast condiie):
1
x1 a12
(1)
x2 a13 x3 b11

a21x1 a22 x2 a23 x3 b2
a x a x a x b
31 1 31 2 33 3 3

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
x1 a12
(1)
x2 a13 x3 b11
1 1 1
a22 x2 a23 x3 b2 ,
a 1 x a 1 x b 1
32 2 33 3 3

unde
a11j a1 j a11 , j 1,2,3

b11 b1 a11
1 1 .
aij aij ai1 a1 j , i 1,2,3, j 1,2,3
bi1 bi ai1b11

Matriceal, primul pas al metodei lui Gauss duce la


1 1
1 a12 a13 x1 b11
1 1 1
0 a22 a23 x 2 = b2 (3)
1
0 a32 1 1
a33 x3 b3
n continuare, urmrim eliminarea necunoscutei x2 din ultima ecuaie. Pentru
1
aceasta, mprim mai nti a doua ecuaie la elementul pivot a22 , presupus nenul (dac nu
este aa, interschimbm ecuaiile a doua i a treia) i apoi scdem linia obinut, nmulit
1
cu a32 din ecuaia a treia.

126
Petru Florin Gavril Capitolul IV - Matrice

Obinem:
1 1
1 a12 a13 x1 b11
2 2
0 1 a23 x 2 = b2 (4)
0 0 2 2
a33 x3 b3
unde
a22j a21j a22 1
, j 2,3
2 1 1
b2 b2 a22
2 1 1 2 .
aij aij ai 2 a2 j , i 3, j 2,3
bi2 bi1 ai12b22
2
n sfrit, ncheiem faza eliminrii mprind cea de-a treia ecuaie la elementul pivot a33 ,

care, pentru un sistem cu matrice nesingular, trebuie s fie nenul. Rezult:


1 1
1 a12 a13 x1 b11
2 2
0 1 a23 x 2 = b2 (5)
0 0
1 x3 b33

unde
b33 b32 a33
2
.

Faza substituiei implic parcurgerea ecuaiilor sistemului (5) rezultat n faza


eliminrii, n sens invers i stabilirea soluiei sistemului potrivit procedeului recursiv:
x3 = b33
2
x2 = b22 - a23 x3 (6)

x1 = b11 - ( a12
1 1
x2 + a13 x3)

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
det A(3) = 1 2 = 1
a11a22 a33
adic
1 2
detA = a11 a22 a33 (7)

127
Petru Florin Gavril Capitolul IV - Matrice

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 xk din toate ecuaiile
sistemului, cu excepia ecuaiei pivot k i sistemul este adus la forma:
1 0 0 a11k1 a11n x1 b11

0 1 0 a22k1 a22n x2 b2 2

k
0 0 1 akk 1 aknk xk = bk k (18)
0 0 0 akk1 k 1 akk1 n xk 1 bk k1


0 k k k
0 0 ank1 ann xn bn
unde noile elemente ale liniei pivot k sunt, ca i n metoda Gauss:
akkk 1
k k 1
akj akj akkk 1 , j k 1,..., n (19)
k k 1
bk bk akkk 1

iar noile elemente ale liniilor nepivot sunt:


aikk 0
k k 1 k 1 k
aij aij aik akj , j k 1,...n, i 1,...n, i k (20)
k k 1
bi bi aikk 1bkk

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

128
Petru Florin Gavril Capitolul IV - Matrice

InX=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:
xk = bkk , k = 1,,n (22)

Ca i n cazul metodei Gauss, determinantul matricei A(n) = In 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
det A(n) = 1 n1 = 1
a11a22 ...ann
de unde
1 n1
detA = a11 a22 ann (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:
x 0 n , dat
k 1
x
F x k , k 0,1,2...

convergent la soluia sistemului (1).


cu irul x (k )
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)n se determin termenii succesivi ai unui ir x (k )
prin recuren, cu relaia:

129
Petru Florin Gavril Capitolul IV - Matrice

B x ( k 1) C x ( k ) b , 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
x ( k 1) B 1 C x ( k ) B 1 b (3)
adic
x ( k 1) M x ( k ) c , (4)
unde M B 1 C (matricea iteraiei) i c B 1 b .
Propoziia 4.1.4

Dac irul x (k ) este convergent atunci el converge la soluia sistemului (1).


S vedem n ce condiii irul x (k ) este convergent.
Teorema 4.1.9

Condiia necesar i suficient ca irul x (k ) dat de relaia (2) s fie convergent

pentru orice x(0)n este ca raza spectral a matricei M s fie subunitar, adic
(M ) 1 . 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 A a ij i b bi n . n descompunerea anterioar alegem


nn

B diag a11 ,a 22 ,...,a nn , iar metoda iterativ corespunztoare este:


n
bi a ij x j i 1, n , unde x i
k
x i
k 1
a ii x i
k 1 k
, i sunt componentele vectorilor
j1
ji

x
k
x
k 1
respectiv . n ipoteza important a ii 0, i 1, n , care asigur c matricea
n

1 k
B este nesingular, obinem recurena xi k 1
bi a ij x j , i 1, n care se
a ii j1

ji
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.

130
Petru Florin Gavril Capitolul IV - Matrice

Ecuaia caracteristic a acestei matrice este det(I B 1C ) 0 sau, echivalent,

det(B 1 (B C )) 0 . Cum B1 0 , condiia necesar i suficient de convergen este


ca toate modulele rdcinilor ecuaiei det(B C ) 0 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 M mij sunt


i, j1,n

a ij
, pentru i j
mij a ii . Dac lum 1, adic M 1 1 echivalent cu
0, pentru i j

n
M 1 max mij 1 (sume pe coloane) obinem condiia suficient de convergen
j1,n
i 1

n a ij
a
i 1
1, j 1, n .
ii
i j

1/ 2
n n 2

Dac lum e , adic M e 1 echivalent cu M e mij


1 obinem
i1 j1
i j

2
n n a ij
condiia suficient de convergen
i 1 j1 a
1.
ii
ji

n a ij
Lund norma , adic M
1, iar M
max 1 (sume pe linii),
i 1,n a ii
j1

n a ij
obinem condiia suficient de convergen a
i 1
1, j 1, n sau
ii
i j

j1
a ij a ii , pentru i 1, n , condiie care se numete dominana diagonal pe linii.
ji

131
Petru Florin Gavril Capitolul IV - Matrice

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

x i
k 1
Gauss-Seidel const n utilizarea n calculul componentei a aproximaiei soluiei

x1
k 1
, x 2
k 1
,...x i1
k 1
sistemului de la pasul k 1 a componentelor , deja calculate, n

locul componentelor x1k , x k2 ,...x ik1 de la iteraia anterioar, cum se ntmpl n cazul
metodei Jacobi.
n metoda Gauss-Seidel, recurena devine:

bi i1 a ij k 1 n a ij k
xi k 1
x j x j , pentru i 1, n , k = 0,1,2,
a ii j1 a ii ji 1 a ii

(1)

Aceasta se ncadreaz n schema precedent dac presupunem c a ii 0 pentru i 1, n


a11 0 ... 0
a a 22 ... 0
i lum drept B 21 matrice triunghiular inferior, iar C = B A
..... ..... ... ..

a n1 a n 2 ... a nn
matrice inferioar superior cu 0 pe diagonala principal. Cu aceast alegere sistemul
B x C x b se scrie dup mprirea la a ii :
bi i1 a ij n a
xi x j x j
ij

a ii j1 a ii ji 1 a ii

(2)

Bx
k 1
i 1, n Cx b , k = 0,1,2, se scrie sub forma (1).
k
pentru iar sistemul
Teorema 4.1.10
Criteriul de dominan a diagonalei pe linii asigur convergena metodei Gauss-

x
0
Seidel pentru orice iteraie iniial .

132
Petru Florin Gavril Capitolul IV - Matrice

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. coloana 2
1 2 3
1 1 1 2 a[3][2]=-5

2 12 4 7
linia 3 3 0 5 9

5 10 11
4

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

133
Petru Florin Gavril Capitolul IV - Matrice

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>; <tip_e> a[10][20];
n,m,i,j:integer; int n,m,i,j;

134
Petru Florin Gavril Capitolul IV - Matrice

............
for i:=1 to n do for(i=0;i<n;i++)
for j:=1 to m do for(j=0;j<m;j++)
<prelucreaz a[i,j]> <prelucreaz a[i][j]>
Ordinea de prelucrare a elementelor este :
a[1,1],a[1,2],...,a[1,m] a[0,0],a[0,1],...,a[0,m-1]
a[2,1],a[2,2],...,a[2,m] a[1,0],a[1,1],...,a[1,m-1]
................... ...................
a[n,1],a[n,2],....,a[n,m] 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>; <tip_e> a[10][20];
n,m,i,j:integer; int n,m,i,j;
............
for j:=1 to m do for(i=0;i<n;i++)
for i:=1 to n do for(j=0;j<m;j++)
<prelucreaz a[i,j]> <prelucreaz a[i][j]>
Ordinea de prelucrare a elementelor este :
a[1,1],a[2,1],...,a[n,1] a[0,0],a[1,0],...,a[n-1,0]
a[1,2],a[2,2],...,a[n,2] a[0,1],a[1,1],...,a[n-1,1]
................... ...................
a[1,m],a[2,m],....,a[n,m] 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> a[10][20];
<tip_e>; n,m,i,j:integer; int n,m,i,j;
............
write(nr de linii:);read(n); cout<<nr de linii;cin>>n;
write(nr de coloane:);read(m); cout<<nr de coloane;cin>>m;
for i:=1 to n do for(i=0;i<n;i++)
for j:=1 to m do for(j=0;j<m;j++)
begin {
write(a[,i,,,j,]=); cout<<a[<<i<<][<<j<<]=;
read(a[i,j]); cin>>a[i][j];
end; }

135
Petru Florin Gavril Capitolul IV - Matrice

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> a[10][20];
<tip_e>; int n,m,i,j;
n,m,i,j:integer; ............
for(i=0;i<n;i++)
for i:=1 to n do {
begin for(j=0;j<m;j++)
for j:=1 to m do cout<<a[i][j]<< ;
write(a[i,j], ); cout<<endl;
writeln; }
end;

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:

a11 a12 a13 a14 ... a1n



Diagonala principal a21 a22 a23 a24 ... a2 n Diagonala secundar
a a32 a33 a34 ... a3n
31 Zona de deasupra
a41 a42 a43 a44 ... a4 n diagonalei principale
... ... ... ... ... ...

a ann
n1 an 2 an 3 an 4 ...
Zona de sub diagonala
principal

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

136
Petru Florin Gavril Capitolul IV - Matrice

Diagonala secundar
Diagonala secundar conine elementele a 1n, a2 n-1 , a3 n-2,...,a n1 caracterizate de
relaia i+j=n+1.
Zona de deasupra diagonalei principale
Elementele de deasupra diagonalei principale sunt a12, a13, a14,...,a1n, a23, a24,
a25,...,a2n, ...., 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 a21, a31 , a32,...,a41, a42 , a43, .....,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 for (i=1;i<=n;i++)
<prelucreaz a[i,i]> <prelucreaz a[i][i]>
Diagonala secundar
for i:=1 to n do for (i=1;i<=n;i++)
<prelucreaz a[i,n-i+1]> <prelucreaz a[i][n-i+1]>
Deasupra diagonalei principale
for i:=1 to n-1 do for (i=1;i<=n-1;i++)
for j:=i+1 to n do for(j=i+1;j<=n;j++)
<prelucreaz a[i,j]> <prelucreaz a[i][j]>

137
Petru Florin Gavril Capitolul IV - Matrice

Sub diagonala principal


for i:=2 to n do for (i=2;i<=n;i++)
for j:=1 to i-1 do for(j=1;j<=i-1;j++)
<prelucreaz a[i,j]> <prelucreaz a[i][j]>
Prelucrarea ntr-o singur parcurgere a tuturor zonelor
for i:=1 to n do for (i=1;i<=n;i++)
for j:=1 to n do for(j=1;j<=n;j++)
if i=j if (i==j)
then <prelucreaz a[i,j] diag. princ.>
<prelucreaz a[i,j] diag. princ.> else
else if (i+j==n+1)
if i+j=n+1 <prelucreaz a[i,j] diag. sec.>
<prelucreaz a[i,j] diag. sec.> else
else if (i>j)
if i>j <prelucreaz a[i,j] deasupra diag.
<prelucreaz a[i,j] deasupra diag. princ.>
princ.> else
else <prelucreaz a[i,j] sub diag. princ.>
<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
138
Petru Florin Gavril Capitolul IV - Matrice

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).

139
Petru Florin Gavril Capitolul IV - Matrice

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

140
Petru Florin Gavril Capitolul IV - Matrice

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; #include<iostream.h>
type void citire(int a[][10],int n,int m)
vector=array[1..10] of integer; {int i,j;
matrice=array[1..10] of vector; cin>>"Introduceti elementele de pe
var n,m:integer; fiecare linie separate prin spatii!";
a,b,s:matrice; for(i=1;i<=n;i++)
procedure citire(var for(j=1;j<=m;j++)
a:matrice;n,m:integer); cin>>a[i][j];
var i,j:integer; }
begin void suma(int a[][10],int b[][10],int
writeln('Introduceti elementele c[][10],int n, int m)
de pe fiecare linie separate prin {int i,j;
spatii!'); for(i=1;i<=n;i++)
for i:=1 to n do for(j=1;j<=m;j++)
for j:=1 to m do c[i][j]=a[i][j]+b[i][j];
read(a[i,j]); }
end; void afisare(int a[][10],int n,int
procedure suma(a,b:matrice; var m);
c:matrice; n,m:integer); {int i,j;
var i,j:integer; for(i=1;i<=n;i++)
begin {
for i:=1 to n do for(j=1;j<=m;j++)
for j:=1 to m do cout<<a[i][j]<<' ';
c[i,j]:=a[i,j]+b[i,j]; cout<<endl;
end; }
procedure afisare(a:matrice; }
n,m:integer); void main()
var i,j:integer; {int a[10][10],b[10][10],s[10][10];
begin int n,m;
for i:=1 to n do cout<<"Numarul de linii:"<<endl;
begin cin>>n;
for j:=1 to m do cout<<"Numarul de coloane:";

141
Petru Florin Gavril Capitolul IV - Matrice

write(a[i,j]:5,' '); cin>>m;


writeln; citire(a,n,m);
end; citire(b,n,m);
end; suma(a,b,s,n,m);
cout<<"Suma dintre A:"<<endl;
begin afisare(a,n,m);
write('Numarul de linii:'); cout<<"si B:"<<endl;
readln(n); afisare(b,n,m);
write('Numarul de coloane:'); cout<<"este C:";
readln(m); afisare(s,n,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.

IV.3.2.2 nmulirea cu scalar


Pascal C++
program inmultire_scalar; #include<iostream.h>
type void citire(int a[][10],int n,int
vector=array[1..10] of integer; m)
matrice=array[1..10] of vector; {int i,j;
var n,m,scalar:integer; //citire matrice a
a:matrice; }
procedure citire(var void inmultire_scalar(int a[][10],
a:matrice;n,m:integer); int scalar, int n, int m)
var i,j:integer; {int i,j;
begin for(i=1;i<=n;i++)
{citire matrice a} for(j=1;j<=m;j++)
end; a[i][j]*=scalar;
procedure inmultire_scalar(var }
a:matrice; scalar,n,m:integer); void afisare(int a[][10],int n,int
var i,j:integer; m);
begin {int i,j;
for i:=1 to n do //afisare matrice a
for j:=1 to m do }
a[i,j]:=a[i,j]*scalar; void main()
end; {int a[10][10];

142
Petru Florin Gavril Capitolul IV - Matrice

procedure afisare(a:matrice; int n,m, scalar;


n,m:integer); cout<<"Numarul de linii:"<<endl;
var i,j:integer; cin>>n;
begin {afisare matrice a} end; cout<<"Numarul de coloane:";
begin cin>>m;
write('Numarul de linii:'); citire(a,n,m);
readln(n); cout<<Valoare scalar:;
write('Numarul de coloane:'); cin>>scalar;
readln(m); cout<<"Produsul scalar dintre
citire(a,n,m); A:"<<endl;
write(Valoare afisare(a,n,m);
scalar:);readln(scalar); cout<<"si
writeln('Produsul scalar dintre "<<scalar<<este:<<endl;
A:'); inmultire_scalar(a,scalar,n,m);
afisare(a,n,m); writeln('si afisare(a,n,m);}
,scalar,este:);
inmultire_scalar(a,scalar,n,m);
writeln('este :'); afisare(a,n,m);
readln; end.

IV.3.2.3 Produsul a dou matrice


Pascal C++
program produs_matrice; #include<iostream.h>
type void citire(int a[][10],int n,int m)
vector=array[1..10] of integer; {int i,j;
matrice=array[1..10] of vector; //citire matrice a
var n,m,p:integer; }
a,b,pr:matrice; void produs(int a[][10],int
procedure citire(var b[][10],int c[][10],int n, int m, int
a:matrice;n,m:integer); p)
var i,j:integer; {int s,i,j,k;
begin for(i=1;i<=n;i++)
{citire matrice a} for(j=1;j<=p;j++)
end; {
procedure produs(a,b:matrice; var s=0;
c:matrice; n,m,p:integer); for(k=1;k<=m;k++)
var s,i,j,k:integer; s+=a[i][k]*b[k][j];
begin c[i][j]=s;
for i:=1 to n do }
for j:=1 to p do }
begin void afisare(int a[][10],int n,int

143
Petru Florin Gavril Capitolul IV - Matrice

s:=0; m);
for k:=1 to m do {int i,j;
s:=s+a[i,k]*b[k,j]; //afisare matrice a
c[i,j]:=s; }
end; void main()
end; {int a[10][10],b[10][10],pr[10][10];
procedure afisare(a:matrice; int n,m,p;
n,m:integer); cout<<Matricea A:<<endl;
var i,j:integer; cout<<"Numarul de linii:";
begin cin>>n;
{afisare matrice a} cout<<"Numarul de coloane:";
end; cin>>m;
begin citire(a,n,m);
writeln(Matricea A:); cout<<Matricea B:<<endl;
write('Numarul de linii:'); cout<<Numarul de coloane:
readln(n); cin>>p;
write('Numarul de coloane:'); citire(b,m,p);
readln(m); citire(a,n,m); produs(a,b,pr,n,m,p);
writeln(Matricea B:); cout<<"Produsul dintre A:"<<endl;
write('Numarul de coloane:'); afisare(a,n,m);
readln(p); citire(b,m,p); cout<<"si B:"<<endl;
produs(a,b,pr,n,m,p); afisare(b,n,m);
writeln('Produsul dintre cout<<"este C:"<<endl;
A:');afisare(a,n,m);writeln('si afisare(pr,n,p);}
B:'); afisare(b,m,p); writeln('este
C:'); afisare(pr,n,p); end.

IV.3.2.4 Determinantul unei matrice


IV.3.2.4.1 Calculul determinantului prin dezvoltare dup o linie L
Pascal C++
(secven program) (secven program)
program determinant; #include<iostream.h>
type vector=array[1..10] of void citire(int a[][10],int n,int
integer; m)
matrice=array[1..10] of {int i,j;
vector; //citire matrice a
var }
a:matrice; int det (int a[][10],int n,int i,
i,j,n,p,L:integer; int j, int p)
procedure citire(var {int b[10][10],k,l,x;

144
Petru Florin Gavril Capitolul IV - Matrice

a:matrice;n:integer) if (n==1)
var i,j:integer; return a[1][1];
begin else
{citire matrice a} if (n==2)
end; return a[1][1]*a[2][2]-
function det a[1][2]*a[2][1];
(a:matrice;n:integer;i,j,p:inte ger else
):integer; {//construim complementul
var b:matrice; algebric
k,l,x:integer; //al elementului a[i][j]
begin x:=a[i][j];
if n=1 for (l=1;l<=n-1;l++)
then for (k=1;k<=n-1;k++)
det:=a[1][1] if(l<i)
else if(k<j)
begin b[l][k]=a[l][k];
x:=a[i,j]; else
{constr. complementul algebric al b[l][k]=a[l][k+1];
a[i][j]} else
for k:=1 to i-1 do if(k<j)
b[k]:=a[k]; b[l][k]=a[l+1][k];
for k:=i to n-1 do else
b[k]:=a[k+1]; b[l][k]=a[l+1][k+1];
for l:=1 to n-1 do if (j<n)
for k:=j to n-1 do return p*x*det(b,n-
b[l][k]:=b[l][k+1]; 1,1,1,1)+det
if j<n
then (a,n,i,j+1,-p);
det:=p*x*det(b,n-1,1,1,1) else
+det(a,n,i,j+1,-p) return p*x*det(b,n-
else 1,1,1,1);
det:=p*x*det(b,n-1,1,1,1); }
end; }
end; void main()
{int a[10][10],n,L,p;
begin cout<<Dimensiune A:;
write(Dimensiune A:);readln(n); cin>>n;
citire(a,n); citire(a,n);
write(Se dezvolta linia:); cout<<Se dezvolta linia;
readln(L); cin>>L;
if L mod 2=1 then p=1 if(L%2==1)

145
Petru Florin Gavril Capitolul IV - Matrice

else p=-1; p=1;


writeln('det(A)=',detl(a,n,L,1,p)); else
end. p=-1;
cout<<det(A)=<<det(a,n,L,1,p);
}

IV.3.2.4.2 Calculul determinantului prin transformare n matrice


triunghiular
Pascal C++
(subprogram) (subprogram)
type matrice=array[1..10,1..10] of /*matricea a trebuie sa contina
real; elemente nenule pe diagonala
{matricea a trebuie sa contina principala; daca nu indeplineste
elemente nenule pe diagonala aceasta conditie se fac in prealabil
principala; daca nu indeplineste interschimbari de linii si coloane
aceasta conditie se fac in pana cand aceasta conditie este
prealabil interschimbari de linii indeplinita*/
si coloane pana cand aceasta float determinant(float a[][10],int
conditie este indeplinita} n)
function {int i,j,k;
determinant(a:matrice;n:integer) float p;
:real; for (j=1;j<=n-1;j++)
var i,j,k:integer; p:real; for(i=1;i<=n;i++)
begin if(a[i][j]!=0)
for j:=1 to n-1 do for (k=j;k<=n;k++)
for i:=j+1 to n do a[i][k]= -
if a[i,j]<>0 a[i][k]/a[j][j]*a[j][k]
for k:=j to n do +a[i][k];
a[i,k]:=- p:=1;
a[i,k]/a[j,j]*a[j,k]+a[i,k]; for i:=1 to n do
p:=1; p=p*a[i,i];
for i:=1 to n do return p;
p=p*a[i,i]; }
determinant:=p;
end;

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.

146
Petru Florin Gavril Capitolul IV - Matrice

Pascal C++
(secven program) (secven program)
program rang_matrice; #include <iostream.h>
type int
vector=array[1..10] of integer; ms[10][10],vlin[10],vcol[10],lr[10];
matrice=array[1..10] of vector; int nlin,nlr,ncr,ec,nec, cr[10];
var ms:matrice;
vlin,vcol,lr,cr:vector; void cauta(int a[][10],int m, int n,
int &x,int &y)
i,j,r1,r2,nlin,nlr,ncr,ec,nec:integ {int i,j;
er; /*se cauta in matricea a un element
diferit de 0; coordonatele sale se
procedure cauta memoreaza in x si y*/
(a:matrice;m,n:integer; var }
x,y:integer); void c_minor(int vlin[],int
var i,j:integer; vcol[],int nlin, int a[][10],int
begin minor[][10])
{se cauta in matricea a un element {int i,j;
diferit de 0; coordonatele sale se for(i=1;i<=nlin;i++)
memoreaza in x si y} for(j=1;j<=nlin;j++)
end; minor[i][j]=a[vlin[i]][vcol[j]];
}
procedure void init(int m,int n)
c_minor(vlin,vcol:vector;nlin: {int i;
integer;a:matrice;var /*lr si cr retin liniile si coloane
minor:matrice; m,n:integer); ramase neselectate; initial nu se
var i,j:integer; alege nimic*/
begin for(i=1;i<=m;i++)
for i:=1 to nlin do lr[i]=i;
for j:=1 to nlin do nlr=m;
minor[i,j]:=a[vlin[i],vcol[j]]; for(j=1;j<=n;j++)
end; cr[j]=j;
ncr=n;
procedure init (m,n:integer); }
var i:integer;
begin{lr si cr retin liniile si void elimina(int v[],int &dv, int x)
coloane ramase neselectate; initial {int i,j;
nu se alege nimic} i:=1;
for i:=1 to m do while (i<=dv && v[i]!=x)
lr[i]:=i; i++;

147
Petru Florin Gavril Capitolul IV - Matrice

nlr:=m; for (j=i;j<=dv-1;j++)


for i:=1 to n do v[j]=v[j+1];
cr[i]:=i; dv--;
ncr:=n; }
end; int determinant (int a[][10],int
n,int i, int j, int p)
procedure elimina(var v:vector;var {int b[10][10],k,l,x;
dv:integer;x:integer); //vezi IV.3.4.1
var j,i:integer; }
begin{elimina o linie sau o coloana
din lr sau cr dupa selectare} int rang(int a[][10],int m,int n)
i:=1; {int l,c,i,j,detm,dmax,i1,j1;
while (i<=dv) and (v[i]<>x) do int minor[10][10];
i:=i+1; int stoprang;
for j:=i to dv-1 do cauta(a,m,n,l,c);
v[j]:=v[j+1]; if (l==0)
dv:=dv-1; then
end; return 0;{matrice nula}
else
function {
determinant(a:matrice;n:integer; //se pastreaza linia l si coloana
i,j,p:integer):integer; c
var b:matrice;k,l,x:integer; nlin=1;
begin{vezi IV.3.4.1}end; rang=1;
vlin[nlin]=l;
function vcol[nlin]=c;
rang(a:matrice;m,n:integer):integer stoprang=0;
; if (m>n)
var dmax=n;
l,c,i,j,detm,dmax,i1,j1:integer; else
minor:matrice; stoprang:boolean; dmax=m;
begin //se elimina linia si coloana
{cautam un element diferit de 0} pentru a nu fi reselectate
cauta(a,m,n,l,c); elimina(lr,nlr,vlin[nlin]);
if (l=0) elimina(cr,ncr,vcol[nlin]);
then rang:=0;{matrice nula} while (nlin<dmax && (!stoprang))
else {
begin nlin=nlin+1;
{se pastreaza linia l si coloana for (i=1;i<=nlr;i++)
c} for (j=1;j<=ncr;j++)
nlin:=1; rang:=1; {

148
Petru Florin Gavril Capitolul IV - Matrice

vlin[nlin]:=l; vcol[nlin]:=c; vlin[nlin]=lr[i];


stoprang:=false; vcol[nlin]=cr[j];
if m>n then dmax:=n
else dmax:=m; c_minor(vlin,vcol,nlin,a,minor,m,n);
{se elimina linia si coloana /*se construiesc minori de
pentru a nu fi reselectate} dimensiuni superioare celui curent cu
elimina(lr,nlr,vlin[nlin]); det. Diferit de 0*/
elimina(cr,ncr,vcol[nlin]);
while (nlin<dmax) and not detm=determinant(minor,nlin,1,1,1);
(stoprang) do if (i==nlr && j==ncr)
begin nlin:=nlin+1; cout<<"Minor de dimensiune
for i:=1 to nlr do maxima!!"<<'\n';
for j:=1 to ncr do if (detm!=0)
begin vlin[nlin]:=lr[i]; {
vcol[nlin]:=cr[j]; if ((i<nlr &&
j<ncr)||(i==nlr&&j<ncr))
c_minor(vlin,vcol,nlin,a,minor,m,n) cout<<"Cautam un minor de
; dimensiune "<<nlin<<"+1 cu
{se construiesc minori de determinantul diferit de 0"<<'\n';
dimensiuni superioare celui curent stoprang=1;
cu det. Diferit de 0}
elimina(lr,nlr,vlin[nlin]);
detm:=determinant(minor,nlin,1,1,1)
; elimina(cr,ncr,vcol[nlin]);
if (i=nlr) and (j=ncr) if (nlin==m || nlin==n)
then writeln(f,'Minor de nlin=nlin+1;
dimensiune maxima!!'); j=ncr+1;//iesire fortata
if detm<>0 i=nlr+1;
then begin }
if ((i<nlr) and else
(j<ncr))or ((i=nlr)and(j<ncr)) if (i==nlr && j==ncr)
then { dmax=0;
writeln('Cautam un cout<<"Am epuizat toate
minor de dimensiune ',nlin,'+1 cu posibilitatile de a gasi un minor de
determinantul diferit de 0'); dimensiune <<nlin<<" diferit de
0"<<'\n';
stoprang:=true;elimina(lr,nlr,vlin[ }
nlin]); else
cout<<"Construim un alt
elimina(cr,ncr,vcol[nlin]); minor de aceeasi dimensiune"<<'\n';
if (nlin=m)or(nlin=n) }

149
Petru Florin Gavril Capitolul IV - Matrice

then nlin:=nlin+1; if (stoprang)


j:=ncr+1;{iesire stoprang=0;
fortata} }
i:=nlr+1; end if (!stoprang)
else return nlin-1;
if (i=nlr)and(j=ncr) }
then begin }
dmax:=0;
writeln('Am epuizat void citire()
toate posibilitatile de a gasi un {int i,j;
minor de dimensiune ',nlin,' //citire matrice ms [ecXnec]
diferit de 0'); end }
else
writeln('Construim un void main()
alt minor de aceeasi dimensiune') {
end; citire();
if stoprang then init(ec,nec);
stoprang:=false; for (i=1;i<=ec;i++)
end; {
if not(stoprang) then for( j=1;j<=nec;j++)
rang:=nlin-1; cout<<ms[i,j]<< ;
end; cout<<\n;
end; }
procedure citire; r1=rang(ms,ec,nec);
var i,j:integer; cout<<Rangul matricei A=<<r1;
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.

150
Petru Florin Gavril Capitolul IV - Matrice

IV.3.2.6 Determinarea inversei unei matrice


Algoritmul studiat la orele de algebr se aplic i pentru determinarea inversei
unei matrice.
Pascal C++
(secven program) (secven program)
program determinare_inversabila; #include<iostream.h>
type vector=array[1..5] of integer; #include<stdio.h>
matrice=array[1..5] of vector; int
linieadj=array[1..5] of real; ms[10][10],mt[10][10],madj[10][10];
matrice_reala=array[1..5] of float minv[10][10];
linieadj; int i,j,n,i1,j1,detms;
var
ms,mt,madj:matrice; void citire();
minv:matrice_reala; {
i,j,n,i1,j1,detms:integer; //citire matrice ms
}
procedure citire;
begin{citire matrice ms[nXn]}end; void transpunere(int a[][10], int
n)
procedure transpunere(var {int i,j,aux;
a:matrice; n:integer); for( i=1;i<=n-1;i++)
var i,j,aux:integer; for (j=i+1;j<=n;j++)
begin {
for i:=1 to n-1 do aux:=a[i][j];
for j:=i+1 to n do a[i,j]:=a[j][i];
begin a[j][i]:=aux;
}
aux:=a[i,j];a[i,j]:=a[j,i];a[j,i]:= cout<<\n<<matricea transpusa
aux; este:<<\n;
end; for(i=1;i<=n;i++)
writeln; {
writeln('Matricea transpusa cout<<\n;
este....'); for(j=1;j<=n;j++)
for i:=1 to n do cout<<a[i][j]<< ;
begin writeln; }
for j:=1 to n do cout<<\n;
write(a[i,j]:5); }
end;
writeln; int determinant (int a[][10],int

151
Petru Florin Gavril Capitolul IV - Matrice

end; n,int i, int j, int p)


{int b[10][10],k,l,x;
function determinant //vezi IV.3.4.1
(a:matrice;n:integer; }
i,j,p:integer):integer;
var b:matrice; k,l,x:integer; void adjuncta();
begin {
{vezi IV.3.4.1} int i,j,i1,j1,i2,j2, calg[10][10];
end; for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
procedure adjuncta; {
var for (i1=1;i1<=n-1;i1++)
i,j,i1,j1,i2,j2:integer; for (i1=1;j1<=n-1;j1++)
calg:matrice; if(i1<i)
begin if(j1<j)
for i:=1 to n do calg[i1][j1]=mt[i1][j1];
for j:=1 to n do else
begin calg[i1][j1]=mt[i1][j1+1];
for i1:=1 to i-1 do else
calg[i1]:=mt[i1]; if(j1<j)
for i1:=i to n-1 do calg[i1][j1]=mt[i1+1][j1];
calg[i1]:=mt[i1+1]; else
for i1:=1 to n-1 do calg[i1][j1]=mt[i1+1][j1+1];
for j1:=j to n-1 do cout<<calculam determinantul
calg[i1,j1]:=calg[i1,j1+1]; complementului algebric al
writeln('Calculam determinantul elementului
complementului algebric al at(<<i<<','<<j<<)=<<mt[i][j])<<
elementului \n;
aT(',i,',',j,')=',mt[i,j]); cout<<complementul algebric
writeln('Complementul algebric este:;
este:'); for i2:=1 to n-1 do
for i2:=1 to n-1 do {
begin for j2:=1 to n-1 do
for j2:=1 to n-1 do cout<<calg[i2][j2]<< ;
write(calg[i2,j2]:6); cout<<\n;
writeln; }
end; if ((i+j) % 2==0)
if (i+j) mod 2=0 {
then
begin madj[i,j]:=determinant(calg,n-
1,1,1,1);

152
Petru Florin Gavril Capitolul IV - Matrice

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

procedure inversa(var void inversa(float minv[][10], int


minv:matrice_reala; n:integer); n)
var i,j:integer; {
begin int i,j;
writeln; cout<<\n matricea adjuncta
writeln('Matricea adjuncta este......<<\n;
este......'); for (i=1;i<=n;i++)
for i:=1 to n do {
begin cout<<\n;
writeln; for(j=1;j<=n;j++)
for j:=1 to n do cout<<madj[i][j]<< ;
write(madj[i,j]:6); }
end; cout<<matricea inversa se obtine
writeln; inmultind a* cu inversul
writeln('Matricea inversa se determinantului metricei a<<\n;
obtine inmultind A* cu inversul for (i=1;i<=n;i++)
determinantului metricei A'); for (j=1;j<=n;j++)
for i:=1 to n do {
for j:=1 to n do minv[i][j]=madj[i][j];
begin minv[i][j]=minv[i][j]/detms;
minv[i,j]:=madj[i,j]; }
minv[i,j]:=minv[i,j]/detms; cout<<matricea inversa

153
Petru Florin Gavril Capitolul IV - Matrice

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

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

154
Petru Florin Gavril Capitolul IV - Matrice

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 C++
(secven program) (secven program)
program // compatibilitatea_unui_sistem;
compatibilitatea_unui_sistem; int
uses crt; ms[10][10],ms1[10][10],vlin[10],
type vcol[10],lr[10],cr[10],vlin1[10],vc
vector=array[1..10] of integer; ol1[10],necsec[10],i,j,det_A,r1,r2,
matrice=array[1..10] of vector; nlin,nlr,ncr,nlin1,ncr1,ec,nec;
var ms,ms1:matrice;
vlin,vcol,lr,cr,vlin1, void cauta(int a[][10],int m, int
n, int &x,int &y)
vcol1, necsec:vector; {int i,j;
//vezi IV.3.5
i,j,det_A,r1,r2,nlin,nlr,ncr,nlin1, }
ncr1,
void c_minor(int vlin[],int
ec,nec:integer; vcol[],int nlin, int a[][10],int
procedure cauta minor[][10])
(a:matrice;m,n:integer; var {
x,y:integer); //vezi IV.3.5
var i,j:integer; };
begin
{vezi IV.3.5} void init (int m,int n)
end; {int i;
//vezi IV.3.5
procedure }
c_minor(vlin,vcol:vector;nlin:integ

155
Petru Florin Gavril Capitolul IV - Matrice

er;a:matrice;var minor:matrice; void elimina(int v[],int &dv, int


m,n:integer); x)
var i,j:integer; {int i,j;
begin //vezi IV.3.5
{vezi IV.3.5} }
end;
int det(int a[][10],int n,int i,
procedure init (m,n:integer); int j, int p)
var i:integer; {
begin int b[10][10];
{vezi IV.3.5} int k,l,x;
end; //vezi IV.3.4.1
}
procedure elimina(var v:vector;var
dv:integer;x:integer); int rang(int a[][10],int m,int n)
var j,i:integer; {int l,c,i,j,detm,dmax;
begin int minor[10][10];
{vezi IV.3.5} int stoprang;
end; //vezi IV.3.5
}
function det(a:matrice;n:integer;
void citire()
i,j,p:integer):integer; {
var b:matrice; k,l,x:integer; int i,j;
begin cout<<Nr. de ec...;
{vezi IV.3.4.1} cin>>ec;
end; cout<<Nr. de necunoscute...;
cin>>nec;
function cout<<Coeficientii matricii
rang(a:matrice;m,n:integer):integer sistemului<<endl;
; for( i=1;i<=ec;i++)
var l,c,i,j,detm,dmax:integer; {
minor:matrice; stoprang:boolean; cout<<Coeficientii ecuatiei
begin <<i<<:\n;
{vezi IV.3.5} for( j=1;j<=nec;j++)
end; cin>>ms[i][j];
cout<<Termenul liber al
procedure citire; ecuatiei <<i<<:;
var i,j:integer; cin>>ms[i]nec+1;
begin }
write('Nr. de ec...'); readln(ec); }

156
Petru Florin Gavril Capitolul IV - Matrice

write('Nr. de necunoscute...');
readln(nec); void afisare_sistem(int a[][10],int
writeln('Coeficientii matricii m,int n)
sistemului'); {
for i:=1 to ec do int i,j;
for j:=1 to nec+1 do cout<<Sistemul este:<<endl;
read(ms[i,j]); for( i=1;i<=n;i++)
end; {
for( j=1;j<=n-1;j++)
procedure if (a[i][j]<0)
afisare_sistem(a:matrice;m,n:intege cout<<a[i][j]<<'X'<<j;
r); else
var i,j:integer; cout<<'+'<<a[i][j]<<'X'<<j;
begin if (a[i,n]<0)
writeln('Sistemul este:');
for i:=1 to m do begin cout<<a[i][n]<<'X'<<n<<'='<<a[i][n+
for j:=1 to n-1 do 1];
if a[i,j]<0 then else
write(a[i,j],'X',j) cout<<'+'<<a[i][n]<<'X'<<n<<'='<<a[
else i,n+1]<<endl;
write('+',a[i,j],'X',j); }
if a[i,n]<0 }
then
write(a[i,n],'X',n,'=',a[i,n+1]) float calcul_solutie(int
else a[][10],int i,int xx);
write('+',a[i,n],'X',n,'=',a[i,n+1] {int b[10][10], l,c;
); for (l=1;l<=ec;l++)
writeln; for(c=1;c<=nec;c++)
end; b[l][c]=a[l][c];
end; /*Inlocuim coloana i cu coloana
termenilor liberi pentru calculul
function lui Xi*/
calcul_solutie(a:matrice;i,xx:integ for (l=1;l<=ec;l++)
er):real; b[l][i]=a[l][nec+1];
var l:integer; //Solutia este egala cu:
begin return det(b,ec,1,1,1)/xx;
{Inlocuim coloana i cu coloana }
termenilor liberi pentru calculul
lui Xi} void afisare_solutii(int ms[][10],
for l:=1 to ec do int x)
a[l,i]:=a[l,nec+1]; {int i;

157
Petru Florin Gavril Capitolul IV - Matrice

{Solutia este egala cu:} cout<<Solutiile sunt:<<endl;


for (i=1;i<=ec;i++)
calcul_solutie:=det(a,ec,1,1,1)/xx; {cout<<'X'<<i<<'=';
end;
cout<<calcul_solutie(ms,i,x)<<' ';}
procedure }
afisare_solutii(ms:matrice;x:intege
r); void compatibil_nedeterminat()
var i:integer; {
begin cout<<Sistem compatibil
writeln('Solutiile sunt:'); nedeterminat;
for i:=1 to ec do cout<<endl<<Necunoscutele
principale sunt:'<<endl;
write('X',i,'=',calcul_solutie(ms,i for( i=1;i<=nlin1-1;i++)
,x):6:2,' '); cout<<'X'<<vcol1[i]<<',';
end; cout<<'X'<<vcol1[nlin1]<<endl;

procedure compatibil_nedeterminat; c_minor(vlin1,vcol1,nlin1,ms,m1,ec,


begin nec);
writeln('Sistem compatibil cout<<Introduceti valori pentru
nedeterminat!'); necunoscutele secundare:;
writeln('Necunoscutele principale for( i=1;i<=ncr1;i++)
sunt:'); {
For i:=1 to nlin1-1 do cout<<'X'<<cr1[i]<<'=';
write('X',vcol1[i],','); cin>>necsec[i];
writeln('X',vcol1[nlin1]); }
for( i=1;i<=nlin1;i++)
c_minor(vlin1,vcol1,nlin1,ms,ms1,ec {
,nec);
writeln('Introduceti valori pentru ms1[i][nlin1+1]=ms[vlin1[i]][nec+1]
necunoscutele secundare:'); ;
for i:=1 to ncr1 do for( j=1;j<=ncr1;j++)
begin
write('X',cr1[i],'='); ms1[i][nlin1+1]=ms1[i][nlin1+1]-
readln(necsec[i]); ms[vlin1[i]][cr1[j]]*necsec[j];
end; }
for i:=1 to nlin1 do cout<<Obtinem:;
begin afisare_sistem(ms1,r1,r1);
cout<<O solutie in cazul in care
ms1[i,nlin1+1]:=ms[vlin1[i],nec+1]; necunoscutele secundare au valorile
for j:=1 to ncr1 do de mai sus:;

158
Petru Florin Gavril Capitolul IV - Matrice

ms1[i,nlin1+1]:=ms1[i,nlin1+1]- ec:=r1;
ms[vlin1[i],cr1[j]]*necsec[j]; nec:=r1;
end; det_A:=det(ms1,r1,1,1,1);
writeln('Obtinem:'); afisare_solutii(ms1,det_A);
afisare_sistem(ms1,r1,r1); };
writeln('O solutie in cazul in
care necunoscutele secundare au void main()
valorile de mai sus:'); {citire();
ec:=r1; afisare_sistem(ms,ec,nec);
nec:=r1; if (nec==ec)
det_A:=det(ms1,r1,1,1,1); {
afisare_solutii(ms1,det_A); det_A=det(ms,ec,1,1,1);
end; if (det_A!=0)
{
begin cout<<Sistem Cramer!;
clrscr; afisare_solutii(ms,det_A);
citire; }
afisare_sistem(ms,ec,nec); else
if nec=ec {
then init(ec,nec);
begin r1=rang(ms,ec,nec);
det_A:=det(ms,ec,1,1,1); cout<<Rangul matricei
if det_A<>0 A=<<r1 <<\n;
then for(i=1;i<=r1;i++)
begin
Writeln('Sistem Cramer!'); {vlin1[i]=vlin[i];vcol1[i]=vcol[i];
afisare_solutii(ms,det_A); }
end for(i=1;i<=ncr;i++)
else cr1[i]=cr[i];
begin nlin1=r1;
init(ec,nec); ncr1=ncr;
r1:=rang(ms,ec,nec); init(ec,nec+1);
writeln('Rangul matricei r2=rang(ms,ec,nec+1);
A=',r1); cout<<Rangul matricei
vlin1:=vlin; extinse= <<r2<<endl;
vcol1:=vcol; if (r1!=r2)
cr1:=cr; cout<<Sistem
nlin1:=r1; incompatibil!<<endl;
ncr1:=ncr; else
init(ec,nec+1); compatibil_nedeterminat();
r2:=rang(ms,ec,nec+1); }

159
Petru Florin Gavril Capitolul IV - Matrice

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

160
Petru Florin Gavril Capitolul IV - Matrice

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

B xi Bi'
B'

161
Petru Florin Gavril Capitolul IV - Matrice

IV.3.2.8 nmulirea optimal a unui ir de matrice


Fie matricele A1,A2 ,....,An unde Ai are dimensiunile di-1 Xdi, pentru i=1,2,...,n. Se
cere s se determine o ordine de efectuare a produsului A1 xA2 x....xAn efectund un numr
minim de operaii.
Deoarece nmulirea matricelor este asociativ, matricea produs A1 A2 A3 poate fi
calculat prin ((A1 A2)A3 ) sau (A1(A2 A3)). Dac matricele au, spre exemplu, dimensiunile
2x5, 5x2 i 2x4 atunci produsul se poate realiza prin 36 de nmuliri n cazul ((A 1 A2)A3 )
sau prin 80 de nmuliri n cazul (A1(A2 A3)).
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 AixAi+1 x.....xAj, iar M(j,i) reine poziia n cadrul secvenei i,...,j unde
se plaseaz parantezele )(.
Algoritm:
P1. Pentru a calcula A1xA2...xAn, putem realiza o prim parantezare astfel: (A1xA2...
Ak)(Ak+1 ...xAn). Parantezarea anterioar este optimal dac (A1 xA2... Ak) este
parantezat optimal i (Ak+1...xAn) este de asemenea parantezat optimal.
Subproblemele problemei iniiale constau n determinarea parantezrii produselor
de forma AixAi+1... Aj, 1<=i<=j<=n. Subproblemele nu sunt independente. De
exemplu, pentru a determina parantezarea optim a produsului A1 x...xA4, trebuie
calculate anterior valorile optime ale produselor A1xA2 xA3 , A2 xA3 xA4, A1xA2 ,
A2 xA3 i A3 xA4. 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 AixAi+1 ... Aj, 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]+dixdk+1 xdj+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

162
Petru Florin Gavril Capitolul IV - Matrice

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 C++
(secven program) (secven program)
program inmultire_optima; #include<iostream.h>
const oo=10000000000; long oo=10000000000;
var n,i,j,h,kmin:integer; int n;
d:array[1..50] of integer; int d[50];
min:longint; long m[50][50];
m:array[1..50,1..50] of longint;
void citire();
procedure citire; {int i;
var i:integer; cout<<Numarul de matrice din
begin produs:;
write('Numarul de matrice din cin>>n;

163
Petru Florin Gavril Capitolul IV - Matrice

produs:'); for (i=1;i<=n;i++)


readln(n); {
for i:=1 to n do cout<<Dimensiune <<i<<':';
begin cin>>d[i];
write('Dimensiune ',i,':') }
readln(d[i]); }
end;
end; void afisare(int i,int j)
{
procedure afisare(i,j:integer); if (i==j)
begin cout<<'A'<<i;
if i=j else
then {
write ('A',i) cout<<'(';
else afisare(i,m[j][i]);
begin cout<<)(;
write('('); afisare(m[j,i]+1,j)
afisare(i,m[j,i]); cout<<);
write(')('); }
afisare(m[j,i]+1,j) }
write(')'); void minim(int i,int j,long &min,int
end; &kmin)
end; {
procedure minim(i,j:integer;var int k;
min:longint; kmin: longint); min=oo;
var for (k=i;k<=j-1;k++)
k:integer; if
begin (min>m[i,k]+m[k+1,j]+d[i]*d[k+1]*
min=oo; d[j+1])
for k:=i to j-1 do {
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]* ];
kmin:=k;
d[j+1] }
then }
begin
void main()
min=m[i,k]+m[k+1,j]+d[i]*d[k+1]*d[j {int h,i,j,kmin;
+1]; long min;
kmin:=k; citire();
end; for (h=1;h<=n-1;h++)

164
Petru Florin Gavril Capitolul IV - Matrice

end; for( i=1;i<=n-1;i++)


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

165

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