You are on page 1of 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

a 21
A = ...

a
m1

a12
a 22
...
am 2

a11
... a1n

... a 2 n
a21
A
... ... respectiv = ...

a
... a mn
m1

a12
a22
...
am 2

... a1n
... a2 n
... ...
... amn

b1

b2
...

bm

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

a21
A=
...

a
m1

a12
a22
...
am 2

... a1n

... a2 n
... ...

... amn

(3)

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


1 j n

j 1,...n

(3)

Restricia funciei A la mulimea elementelor de forma (i, 1), (i, 2), (i, n) definete linia
de rang i a matricei. De fapt, linia de rang i a matricei este determinat de irul de
elemente 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
1 j n

, notaia (3) fiind introdus de M. Bocher n anul 1919.

Noiunea de matrice s-a introdus pentru algebrizarea noiunii de reprezentare geometric


unei transformri geometrice asociindu-i-se o matrice pentru a reduce studiul
transformrilor geometrice la studiul matricelor.
Matricele pot fi gndite i ca o generalizare a vectorilor vectorii sunt matrice cu o singur
linie sau cu o singur coloan.
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

a21 a22
A=
... ...

a
n1 an 2

... a1n

... a2 n
.
... ...

... ann

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
n(C)

mn(C)

mulimea tuturor matricelor de tip (m, n) cu elemente din C. n mulimea M

exist i urmtoarele cazuri particulare de matrice:


1) matricea unitate de ordin n de forma:

0
In =
...

0
1
...
0

0
0
...
0

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

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

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

2) matricea diagonal de ordin n de forma:

a11 0 0 ... 0

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

0
0
...
a
nn

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

a11 0

a21 a22
A1 =
... ...

a
n1 an 2

... 0

... 0
sau A2 =
... ...

... ann

0
0
...
an 3

a11 a12

0 a22
... ...

0
0

a13
a23
...
0

... a1n

... a2 n
.
... ...

... ann

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
A=
...

0
0
... ...
0 0

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

0
, unde C.
...

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

0
0n =
...

n mulimea M

mn(C)

0
0
...
0

0
0
...
0

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

0
...

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

a 21
A=
...

a
m1

... a1n

... a 2 n
i B =
... ...

... a mn

a12
a 22
...
am2

b11 b12

b21 b22
... ...

b
m1 bm 2

... b1n

... b2 n
... ...

... bmn

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


1 j n

m n (K),

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

An =
A
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

A t a kl

1 k n
1l m

, unde

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:

2
...........
n
1

=
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

Deci, 0 m() C n =

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

110

Petru Florin Gavril

Capitolul IV - Matrice

= detA =

a11 a12
= a11a22 - a12a21
a21 a22

Observaie:
Mulimea S2 a permutrilor mulimii 1, 2 este format din dou elemente:

1 2
1 2
i 2 =
. m(1) = 0; m(2) = 1 deci 1 permutare par, iar 2
1 =
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

comutativ), i, j 1, 2, 3 , A= a 21 a 22
a
31 a32

a11
= detA = a21
a31

a13

a 23 , numrul K, notat cu:


a33

a12
a22
a32

a13
a23 =
a33

S3

1i1

a2i2 a3i3

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

a11 a12

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

a
1n a2 n

a1n

a2 n
numrul unic

ann

determinat K, dat de formula:

a11 a12
a21 a22
= detA =

an1 an 2

a1n
a2 n
= ( )a1 (1) a 2 ( 2) ...a n ( n )

S n
ann

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

1 j n

2. Uneori numrul = detA se mai noteaz prescurtat i A sau aij 1 i 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
a21

a12
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
= a21
a31

a12
a22
a32

a13
a23
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
a21 a22
a31 a32

a13
a23
a33

a11 a12
a21 a22
a31 a32

Figura 4.1

a13
a23
a33

Figura 4.2

Calculul determinanilor de ordin n


Fie determinantul de ordin n urmtor:

a11 a12
a21 a22
d=

an1 an 2

a13
a23

an 3

a1n
a2 n

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
1 j n

j n are loc

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:

= a11

a22
a32
...
an 2

0
a33
...
an 3

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


Un astfel de determinant are

n(n 1)
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
1 j n

mn(C)

i k N astfel nct 1 k min(m,n).

Dac lum din matricea a k linii i k coloane, elementele care se gsesc la intersecia
acestor linii i coloane formeaz o matrice ptratic al crei determinant se numete minor
de ordin k al matricei A.
Din matricea A se pot obine Cm Cn minori de ordin 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
det A-1 =

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

......................................
am1 x1 am 2 x2 ... amn xn bm

(1)

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

a
j 1

ij

x j bi , 1 i m

Matricea de tip mn:

117

(2)

Petru Florin Gavril

Capitolul IV - Matrice

a11

a21
A=
...

a
m1

... a1n

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

... amn

a12
a22
...
am 2

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

a11

a21
A=
...

a
m1

a12
a22
...
am 2

... a1n
... a2 n
... ...
... amn

b1

b
,
...

bm

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

b1

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

b
m

x1

x2
... ,

x
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

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

......................................
an1 x1 an 2 x2 ... ann xn bn

(4)

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)

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
x1 =

d1
d
d
, x2 = 2 , , xn = n
d
d
d

(6)

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

......................................
am1 x1 am 2 x2 ... amn xn bm

(1)

Vom pstra de asemenea toate notaiile fcute la nceput. Evident, n cele ce urmeaz, se
pune problema compatibilitii unui astfel de sistem de ecuaii liniare. Pentru rezolvarea
acestei situaii exist cteva rezultate remarcabile i anume:

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 propriuzis 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
a21
...
a r1

a12
a22
...
ar 2

... a1r
... a2 r
0.
... ...
... 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

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

(1)

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

..........................................................................
ar1 x1 ar 2 x2 ... arr xrr br ar ,r 11 ... arnnr

(1)

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

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

am1 x1 am 2 x2 ... amn xn 0

(9)

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

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

an1 x1 an 2 x2 ... ann xn an ,n1 xn1 0

(10)

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 :

xn1
x
x
x1
=- 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, 2 ,..., n i 1, 2 ,..., n sunt soluii ale unui sistem omogen


atunci i 1 1 , 2 2 ,..., n n este soluie a sistemului.
Dac 1 , 2 ,..., n este soluie a unui sistem omogen, atunci i
k 1, k 2 ,...,k n este soluie a aceluiai sistem.

1) Dac

2)

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

t12 x2
t 22 x2
.
.

t11x1

... t1n xn
... t 2 n xn
. . .
.
t mn xn

Din ultima ecuaie se obine:


xn =

cn
.
t mn

nlocuind n penultima ecuaie, avem:


xn-1 =

cn1 t mn cn tn1,n
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:
xn =

cn
t mn

124

c1
c2
. .
cn

(4)

Petru Florin Gavril

Capitolul IV - Matrice

cni
xn-i =

n i , j
j n i 1

xj

t ni ,ni

, i = 1, n 1 .

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


a x a x a x b
32 2
33 3
3
31 1
sau, n forma matriceal:

125

(1)

Petru Florin Gavril

Capitolul IV - Matrice

a11 a12
a
21 a22
a31 a32

i, j 1,3

unde A = aij

a13 x1 b1
a23 x 2 = b2
a33 x3 b3

este matricea sistemului, X =

(2)

xi i1,3

este matricea coloan a

necunoscutelor, iar B = bi i 1,3 este matricea coloan a termenilor liberi, notaii cu care neam 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)
1
x1 a12
x2 a13
x3 b11

a21x1 a22 x2 a23 x3 b2


a x a x a x b
31 2
33 3
3
31 1

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

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 a12

1
0 a22
1
0 a32

1
x1 b11
a13
1
1
a23
x 2 = b2
1
1
a33
x3 b3

(3)

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 a12

0 1
0 0

1
x1 b11
a13
2
2
a23
x 2 = b2
2
2
a33
x3 b3

(4)

unde
1

a22j a21j a22


, 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 a12

0 1
0 0

1
x1 b11
a13
2
2
a23
x 2 = b2
1 x3 b33

(5)

unde
2
.
b33 b32 a33

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)

1
1
x1 = b11 - ( a12
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(3) =

det A
1 2 = 1
a11a22
a33

adic
1 2
a33
detA = a11 a22

(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:

0
0

0
1

0
0

0 a11k1
0 a22k1

k
1 akk 1
0 akk1 k 1

k
0 ank1

a11n x1 b11


a22n x2 b2 2



aknk xk = bk k
akk1 n xk 1 bk k1



k
k
ann
xn bn

(18)

unde noile elemente ale liniei pivot k sunt, ca i n metoda Gauss:

akkk 1
k
k 1
akkk 1 , j k 1,..., n
akj akj
k
k 1
akkk 1
bk bk

(19)

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
k
k 1
aikk 1bkk
bi bi

(20)

Se observ c la pasul k se modific toate elementele matricei sistemului situate


n dreapta coloanei k, coloan care devine identic cu coloana corespunztoare a matricei
unitate. La fiecare pas se modific, n schimb, toate elementele matricei termenilor liberi.
n final, dup pasul k=n, sistemul are forma

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(n) =

det A
1
n1 = 1
a11a22
...ann

de unde
n1
1
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
F x k , k 0,1,2...
x

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

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)

x ( k 1) M x ( k ) c ,

(4)

adic

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

nn

b bi n . n descompunerea anterioar alegem

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


a ii x i

k 1

bi a ij x j

j1
ji

respectiv

k 1

i 1, n , unde x i

. n ipoteza important

B este nesingular, obinem recurena

x i

k 1

sunt componentele vectorilor

a ii 0, i 1, n , care asigur c matricea

k 1

xi

n
1
k

bi a ij x j , i 1, n

a ii
j1

ji

care se

numete metoda lui Jacobi.


Conform teoremei anterioare, condiia necesar i suficient de convergen a
metodei lui Jacobi este ca modulele valorilor proprii ale matricei iteraiei s fie subunitare.
130

Petru Florin Gavril

Capitolul IV - Matrice

det(I B 1C ) 0

Ecuaia caracteristic a acestei matrice este

det(B 1 (B C )) 0 . Cum

sau, echivalent,

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

a ij
, pentru i j
mij a ii
.
0, pentru i j

1,

Dac lum

adic

M mij

M 1 1

i, j1,n

sunt

echivalent cu

M 1 max mij 1 (sume pe coloane) obinem condiia suficient de convergen


j1,n

a ij

a
i 1
i j

i 1

1, j 1, n .

ii

1/ 2

Dac lum

n n
2

M e mij
i1 j1

i j

e , adic M e 1 echivalent cu
n

condiia suficient de convergen

i 1 j1 a
ji

Lund norma

, adic

a ij

1.

ii

1, iar M
n

obinem condiia suficient de convergen

1 obinem

i 1
i j

i 1,n

a ij

a ij

j1

a ii

max

1 (sume pe linii),

1, j 1, n

sau

ii

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

j1
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
Gauss-Seidel const n utilizarea n calculul componentei
sistemului de la pasul
locul componentelor

k 1

a componentelor

x1k , x k2 ,...x ik1

x1

k 1

x i

, x 2

k 1

k 1

a aproximaiei soluiei

,...x i1

k 1

, deja calculate, n

de la iteraia anterioar, cum se ntmpl n cazul

metodei Jacobi.
n metoda Gauss-Seidel, recurena devine:
k 1

xi

bi i1 a ij k 1 n a ij k
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

i lum drept

a11 0
a
a 22
B 21
..... .....

a n1 a n 2

... 0
... 0
... ..

... a nn

a ii 0 pentru i 1, n

matrice triunghiular inferior, iar C = B A

matrice inferioar superior cu 0 pe diagonala principal. Cu aceast alegere sistemul

B x C x b se scrie dup mprirea la a ii :


n a
bi i1 a ij
ij
xi x j x j
a ii j1 a ii
ji 1 a ii

(2)
pentru

i 1, n

iar sistemul

Bx

k 1

Cx b , k = 0,1,2, se scrie sub forma (1).


k

Teorema 4.1.10
Criteriul de dominan a diagonalei pe linii asigur convergena metodei GaussSeidel 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
1
2
linia 3 3
4

1 1 2

12 4 7
0 5 9

5 10 11

a[3][2]=-5

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>;


n,m,i,j:integer;

<tip_e> a[10][20];
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>;


n,m,i,j:integer;

<tip_e> a[10][20];
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
var

a:array[1..10,1..20]

C++
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
var

C++

a:array[1..10,1..20]

of

<tip_e>;

<tip_e> a[10][20];
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:

Diagonala principal

a11

a21
a
31
a41
...

a
n1

a12
a22
a32
a42
...
an 2

a13
a23
a33
a43
...
an 3

a14
a24
a34
a44
...
an 4

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

a1n

a2 n
a3n

a4 n
...
ann

Diagonala secundar
Zona de deasupra
diagonalei principale

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
<prelucreaz a[i,i]>

for (i=1;i<=n;i++)
<prelucreaz a[i][i]>
Diagonala secundar

for i:=1 to n do
<prelucreaz a[i,n-i+1]>

for (i=1;i<=n;i++)
<prelucreaz a[i][n-i+1]>
Deasupra diagonalei principale

for i:=1 to n-1 do


for j:=i+1 to n do

for (i=1;i<=n-1;i++)
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)
<prelucreaz a[i,j] diag. sec.>

if i+j=n+1
<prelucreaz a[i,j] diag. sec.>

else

else

if (i>j)
<prelucreaz a[i,j] deasupra diag.

if i>j

<prelucreaz a[i,j] deasupra diag. princ.>


princ.>

else
<prelucreaz a[i,j] sub diag. princ.>

else
<prelucreaz a[i,j] sub diag. princ.>

IV.3. Analiz interdisciplinar


IV.3.1. Matricea n programele colare
Se remarc nc de la nceput diferenele care apar n modul de definire a
matricelor n matematic(funcie) i informatic(tablou bidimensional).
Matricea, ca tip de dat, se studiaz n clasa a IX-a la profilul matematicinformatic 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 XIa(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

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;
var n,m:integer;

cin>>"Introduceti

elementele

de

pe

fiecare linie separate prin spatii!";

a,b,s:matrice;
procedure

for(i=1;i<=n;i++)
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

de pe fiecare linie separate prin

c[][10],int n, int m)
{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;
procedure

void
suma(a,b:matrice;

var

c:matrice; n,m:integer);

a[][10],int

n,int

m);
{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(int

}
afisare(a:matrice;

n,m:integer);

void main()

var i,j:integer;

{int a[10][10],b[10][10],s[10][10];

begin
for i:=1 to n do
begin
for j:=1 to m do

int n,m;
cout<<"Numarul de linii:"<<endl;
cin>>n;
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

vector=array[1..10] of integer;

m)

matrice=array[1..10] of vector;

{int i,j;

var n,m,scalar:integer;
}
citire(var

void

inmultire_scalar(int

a:matrice;n,m:integer);

int scalar, int n, int m)

var i,j:integer;

{int i,j;

begin

for(j=1;j<=m;j++)

end;
a:matrice;

a[i][j]*=scalar;
inmultire_scalar(var
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
for j:=1 to m do
a[i,j]:=a[i,j]*scalar;
end;

a[][10],

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

{citire matrice a}
procedure

n,int

//citire matrice a

a:matrice;
procedure

a[][10],int

//afisare matrice a
}
void main()
{int a[10][10];

142

Petru Florin Gavril


procedure

Capitolul IV - Matrice
afisare(a:matrice;

int n,m, scalar;

n,m:integer);

cout<<"Numarul de linii:"<<endl;

var i,j:integer;

cin>>n;

begin

cout<<"Numarul de coloane:";

{afisare matrice a} end;

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

citire(a,n,m);

scalar

dintre

A:"<<endl;

write(Valoare

afisare(a,n,m);

scalar:);readln(scalar);
writeln('Produsul

cout<<"si

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;
procedure

void
citire(var

produs(int

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

a[][10],int

{
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

143

afisare(int

a[][10],int

n,int

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:);
write('Numarul

cout<<Matricea B:<<endl;

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:);
write('Numarul

cout<<"Produsul dintre A:"<<endl;

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
B:');

afisare(b,m,p);

C:'); afisare(pr,n,p);

afisare(pr,n,p);}

writeln('este
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;
type

#include<iostream.h>

vector=array[1..10]

of

void

integer;
matrice=array[1..10]

citire(int

a[][10],int

n,int

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

function

det

a[1][1]*a[2][2]-

a[1][2]*a[2][1];

(a:matrice;n:integer;i,j,p:inte ger

else

):integer;

{//construim

var b:matrice;

complementul

algebric

k,l,x:integer;

//al elementului

begin

a[i][j]

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];
{constr.

complementul

else
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

b[l][k]:=b[l][k+1];

p*x*det(b,n-

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

else

p*x*det(b,n-

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

matrice

sa

contina

triunghiular
Pascal

C++

(subprogram)

(subprogram)

type matrice=array[1..10,1..10] of

/*matricea

real;

elemente

{matricea

elemente

nenule

principala;

trebuie
daca

sa

pe
nu

principala;

daca

pe
nu

diagonala
indeplineste

indeplineste

interschimbari de linii si coloane

prealabil

interschimbari
pana

nenule

aceasta conditie se fac in prealabil

conditie

coloane

trebuie

diagonala

aceasta
si

contina

se

fac
de

cand

in
linii

aceasta

pana

cand

aceasta

conditie

este

indeplinita*/
float

determinant(float

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;

a[][10],int

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
if a[i,j]<>0

a[i][k]=
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

(a:matrice;m,n:integer;

var

memoreaza in x si y*/
}

x,y:integer);

void

var

vcol[],int

i,j:integer;

begin

c_minor(int
nlin,

vlin[],int

int

a[][10],int

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

var

alege nimic*/

i,j:integer;

begin

neselectate;

initial

nu

se

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


nu se alege nimic}
for i:=1 to m do

{int i,j;
i:=1;
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;
while

{int l,c,i,j,detm,dmax,i1,j1;
(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;
i,j,p:integer):integer;

//se pastreaza linia l si coloana


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
{cautam un element diferit de 0}

//se

elimina

linia

si

coloana

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;
{se

elimina

c_minor(vlin,vcol,nlin,a,minor,m,n);

linia

si

coloana

/*se

pentru a nu fi reselectate}

construiesc

minori

de

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
begin

if (i==nlr && j==ncr)

nlin:=nlin+1;

cout<<"Minor de dimensiune

for i:=1 to nlr do

maxima!!"<<'\n';

for j:=1 to ncr do


begin

if (detm!=0)

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
{se construiesc minori de

"<<nlin<<"+1

cu

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
(j<ncr))or

((i<nlr)

}
and

else

((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

//citire matrice ms [ecXnec]

de

dimensiune

',nlin,'

diferit de 0'); end

else
writeln('Construim

un

void main()

alt minor de aceeasi dimensiune')

end;
if

citire();

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]

float minv[10][10];

of

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);
var

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

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]:=
aux;

cout<<\n<<matricea
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
begin

transpusa

cout<<a[i][j]<< ;

writeln;

for j:=1 to n do
write(a[i,j]:5);

cout<<\n;
}

end;
writeln;

int

151

determinant

(int

a[][10],int

Petru Florin Gavril

Capitolul IV - Matrice

end;

n,int i, int j, int p)


{int b[10][10],k,l,x;

function

determinant

(a:matrice;n:integer;

//vezi IV.3.4.1
}

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

calg[i1,j1]:=calg[i1,j1+1];

complementului

writeln('Calculam determinantul
complementului

algebric

al

elementului

algebric

at(<<i<<','<<j<<)=<<mt[i][j])<<
\n;
cout<<complementul

algebric

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

al

elementului

aT(',i,',',j,')=',mt[i,j]);
writeln('Complementul

determinantul

madj[i,j]:=determinant(calg,n1,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

cu

semn

schimbat

adica ',madj[i,j]);

semn

adica

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

writeln('Matricea

adjuncta

este......');

matricea

adjuncta

este......<<\n;
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

writeln('Matricea
obtine

schimbat

inmultind

inversa
A*

cu

se

inversul

cu

inversul

determinantului metricei a<<\n;


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;

a*

}
cout<<matricea

153

inversa

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

write('Determinantul

matricii

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

inversabila!');

inversabila!;

readln;

getch();}

nu

este

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
ec,nec:integer;
procedure
(a:matrice;m,n:integer;

c_minor(int

vcol[],int
cauta
var

nlin,

int

minor[][10])
{

x,y:integer);

//vezi IV.3.5

var i,j:integer;

};

begin
{vezi IV.3.5}
end;

void init (int m,int n)


{int i;
//vezi IV.3.5

procedure

c_minor(vlin,vcol:vector;nlin:integ

155

vlin[],int
a[][10],int

Petru Florin Gavril


er;a:matrice;var

Capitolul IV - Matrice
minor:matrice;

void elimina(int v[],int

m,n:integer);

x)

var

{int i,j;

i,j:integer;

begin

&dv,

int

//vezi IV.3.5

{vezi IV.3.5}

end;
int

det(int

procedure init (m,n:integer);

int j, int p)

var i:integer;

begin

a[][10],int

n,int

i,

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
rang(a:matrice;m,n:integer):integer

cout<<Coeficientii

matricii

sistemului<<endl;

for( i=1;i<=ec;i++)

var

l,c,i,j,detm,dmax:integer;

minor:matrice; stoprang:boolean;
begin

cout<<Coeficientii
<<i<<:\n;

{vezi IV.3.5}

for( j=1;j<=nec;j++)

end;

cin>>ms[i][j];
cout<<Termenul

procedure citire;

ecuatiei <<i<<:;

var i,j:integer;

cin>>ms[i]nec+1;

begin
write('Nr. de ec...'); readln(ec);

ecuatiei

}
}

156

liber

al

Petru Florin Gavril


write('Nr.

de

Capitolul IV - Matrice
necunoscute...');

readln(nec);

void afisare_sistem(int a[][10],int

writeln('Coeficientii

matricii

sistemului');

m,int n)
{

for i:=1 to ec do

int

for j:=1 to nec+1 do

i,j;

cout<<Sistemul este:<<endl;

read(ms[i,j]);

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

end;

{
for( j=1;j<=n-1;j++)

procedure

if

afisare_sistem(a:matrice;m,n:intege

(a[i][j]<0)

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


if

1];

a[i,j]<0

then

write(a[i,j],'X',j)

else
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])
else

float

calcul_solutie(int

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;
function

/*Inlocuim

coloana

termenilor

liberi

cu

pentru

coloana
calculul

lui Xi*/

calcul_solutie(a:matrice;i,xx:integ

for (l=1;l<=ec;l++)

er):real;
var

b[l][i]=a[l][nec+1];

l:integer;

//Solutia este egala cu:

begin

return det(b,ec,1,1,1)/xx;

{Inlocuim

coloana

termenilor

liberi

cu

coloana

pentru

calculul

lui Xi}
for l:=1 to ec do
a[l,i]:=a[l,nec+1];

}
void

afisare_solutii(int

int x)
{int i;

157

ms[][10],

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

writeln('Solutiile sunt:');

compatibil

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

nedeterminat!');
writeln('Necunoscutele

cout<<Introduceti

valori

pentru

necunoscutele secundare:;
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
necunoscutele secundare:');

ms1[i][nlin1+1]=ms[vlin1[i]][nec+1]
;

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


begin

cout<<Obtinem:;
afisare_sistem(ms1,r1,r1);
cout<<O solutie in cazul in care

ms1[i,nlin1+1]:=ms[vlin1[i],nec+1];
for j:=1 to ncr1 do

necunoscutele secundare au valorile


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
care

solutie

necunoscutele

in

};

cazul

in

secundare

au

valorile de mai sus:');

void main()
{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

if det_A<>0

matricei

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);
vlin1:=vlin;

cout<<Rangul
extinse= <<r2<<endl;

vcol1:=vcol;

if (r1!=r2)

cr1:=cr;
nlin1:=r1;

matricei

cout<<Sistem
incompatibil!<<endl;

ncr1:=ncr;

else

init(ec,nec+1);

compatibil_nedeterminat();

r2:=rang(ms,ec,nec+1);

159

Petru Florin Gavril


writeln('Rangul

Capitolul IV - Matrice
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

vlin1:=vlin;

extinse=<< r2<<\n;

vcol1:=vcol;

if (r1==r2)

nlin1:=r1;

if (r1==nec)

ncr1:=ncr;

cr1:=cr;

cout<<Sistem

init(ec,nec+1);

compatibil

determinat!!;

r2:=rang(ms,ec,nec+1);
writeln('Rangul

matricei

for( i=1;i<=nlr;i++)
matricei

for( j=1;j<=nec+1;j++)

extinse=',r2);
if r1=r2

ms[vlin1[nlin1]][j]=
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
incompatibil!!;

160

este

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

vlin1:=vlin;

extinse=<< r2<<\n;

vcol1:=vcol;

if (r1!=r2)

nlin1:=r1;

matricei

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:
1
A 1 A X B I n X
A

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

begin
write('Numarul

produs:;
de

matrice

din

cin>>n;

163

de

matrice

din

Petru Florin Gavril


produs:');

Capitolul IV - Matrice
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;
begin

if
(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

m[i,j]:=min;

de

inmultiri:<< m[1][n]<<endl;

m[j,i]:=kmin

cout<<Modalitatea

end;
writeln('Numarul

optim

este:;
optim

de

inmultiri:', m[1,n]);

afisare(1,n);
}

writeln('Modalitatea de inmultire
este:');
afisare(1,n);
end.

165

de

inmultire

You might also like