Documente Academic
Documente Profesional
Documente Cultură
04 Capitolul IV
04 Capitolul IV
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)
.............................................
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
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:
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
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
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)
0
In =
...
0
1
...
0
0
0
...
0
...
...
...
...
0
cu a11 = 1, i = 1, n i aij =0, () i j.
...
103
Capitolul IV - Matrice
1 daca i j
ij =
.
0
daca
i
a11 0 0 ... 0
0 a22 0 ... 0
A=
= (aijij) 1 i , j n .
... ... ... ... ...
0
0
...
a
nn
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
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
...
M mn() care reprezint mulimea matricelor ptratice de tipul (m, n) cu elemente numere
reale, M
mn(Q)
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
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
mn (C),
A =
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),
Capitolul IV - Matrice
mn(C)
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)
m n (K),
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)
2)
3)
(A + B) = A + B, unde K, A, B M (K).
4)
( + )A = A + A, unde , K, A M (K).
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
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)
(3)
2) Asociativitatea
() A M mn(K), B M np(K) i C M pq(K), are loc egalitatea:
(AB)C = A(BC)
(4)
(5)
AI n = A
(6)
(7)
A O np = O mp
(8)
(10)
A On = On A = On
(11)
() A M nn(K).
107
Capitolul IV - Matrice
An =
A
A
A, m N
mo ri
A t a kl
1 k n
1l m
, unde
mn(K)
care
1 j n
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
109
Capitolul IV - Matrice
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
a11 a12
, numrul K, notat cu:
K corp comutativ, i, j 1, 2, A =
a21 a22
110
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
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
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
Capitolul IV - Matrice
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
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
Capitolul IV - Matrice
a11 a12
a21 a22
a31 a32
a13
a23
a33
a11 a12
a21 a22
a31 a32
Figura 4.1
a13
a23
a33
Figura 4.2
a11 a12
a21 a22
d=
an1 an 2
a13
a23
an 3
a1n
a2 n
ann
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
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
n(n 1)
elemente diferite.
2
mn(C)
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
Capitolul IV - Matrice
Definiia 4.1.23
Fie A M
mn(C)
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)
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
mn(C),
poate fi
mn(C)
Capitolul IV - Matrice
n (K)
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)
n(K)
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
Capitolul IV - Matrice
n(Q)
sau A M
n(),
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.
......................................
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
117
(2)
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
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
(3)
Definiia 4.1.24:
Un sistem ordonat de elemente
1 , 2 ,..., n
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
Capitolul IV - Matrice
......................................
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)
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:
......................................
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
Capitolul IV - Matrice
a11
a21
...
a r1
a12
a22
...
ar 2
... a1r
... a2 r
0.
... ...
... arr
.........................................
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)
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:
..........................................................................
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
Capitolul IV - Matrice
..........
..........
..........
...........
(9)
122
Capitolul IV - Matrice
..........
..........
..........
..........
.
(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) Dac
2)
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
cn
.
t mn
cn1 t mn cn tn1,n
t mn t n1,n1
c1 t1 j x j
j 2
x1 =
t11
Algoritmul este:
xn =
cn
t mn
124
c1
c2
. .
cn
(4)
Capitolul IV - Matrice
cni
xn-i =
n i , j
j n i 1
xj
t ni ,ni
, i = 1, n 1 .
125
(1)
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
(2)
xi i1,3
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
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
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)
este aa, interschimbm ecuaiile a doua i a treia) i apoi scdem linia obinut, nmulit
1
cu a32
din ecuaia a treia.
126
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
2
1 1
b2 b2 a22
.
2
1
1 2
aij aij ai 2 a2 j , i 3, j 2,3
2
n sfrit, ncheiem faza eliminrii mprind cea de-a treia ecuaie la elementul pivot a33
,
0 1
0 0
1
x1 b11
a13
2
2
a23
x 2 = b2
1 x3 b33
(5)
unde
2
.
b33 b32 a33
(6)
1
1
x1 = b11 - ( a12
x2 + a13
x3)
det A
1 2 = 1
a11a22
a33
adic
1 2
a33
detA = a11 a22
(7)
127
Capitolul IV - Matrice
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)
akkk 1
k
k 1
akkk 1 , j k 1,..., n
akj akj
k
k 1
akkk 1
bk bk
(19)
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)
128
Capitolul IV - Matrice
InX=B(n)
(21)
(22)
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)
x 0 n , dat
k 1
F x k , k 0,1,2...
x
cu irul x (k )
129
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
A a ij
nn
k 1
bi a ij x j
j1
ji
respectiv
k 1
i 1, n , unde x i
. n ipoteza important
x i
k 1
k 1
xi
n
1
k
bi a ij x j , i 1, n
a ii
j1
ji
care se
Capitolul IV - Matrice
det(I B 1C ) 0
det(B 1 (B C )) 0 . Cum
sau, echivalent,
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
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
i 1 j1 a
ji
Lund norma
, adic
a ij
1.
ii
1, iar M
n
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
j1
ji
131
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
x1
k 1
x i
, x 2
k 1
k 1
a aproximaiei soluiei
,...x i1
k 1
, deja calculate, n
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
(2)
pentru
i 1, n
iar sistemul
Bx
k 1
Teorema 4.1.10
Criteriul de dominan a diagonalei pe linii asigur convergena metodei GaussSeidel pentru orice iteraie iniial
132
Capitolul IV - Matrice
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
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
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).
C++
<tip_e> a[10][20];
int n,m,i,j;
134
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]>
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
<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]>
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]
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
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;
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
136
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 ,
n-1
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;i<=n-1;i++)
for(j=i+1;j<=n;j++)
<prelucreaz a[i,j]>
<prelucreaz a[i][j]>
137
Capitolul IV - Matrice
Sub diagonala principal
for i:=2 to n do
for (i=2;i<=n;i++)
for(j=1;j<=i-1;j++)
<prelucreaz a[i,j]>
<prelucreaz a[i][j]>
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
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
else
<prelucreaz a[i,j] sub diag. princ.>
else
<prelucreaz a[i,j] sub diag. princ.>
Capitolul IV - Matrice
matricelor
sunt
probleme
abordate
la
clas
cadrul
capitolului
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
Capitolul IV - Matrice
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
vector=array[1..10] of integer;
{int i,j;
matrice=array[1..10] of vector;
var n,m:integer;
cin>>"Introduceti
elementele
de
pe
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
writeln('Introduceti
elementele
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
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.
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);
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
Capitolul IV - Matrice
afisare(a:matrice;
n,m:integer);
cout<<"Numarul de linii:"<<endl;
var i,j:integer;
cin>>n;
begin
cout<<"Numarul de coloane:";
begin
cin>>m;
write('Numarul
de
linii:');
citire(a,n,m);
readln(n);
cout<<Valoare scalar:;
write('Numarul
de
coloane:');
cin>>scalar;
readln(m);
cout<<"Produsul
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.
C++
program produs_matrice;
#include<iostream.h>
type
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
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
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
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.
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;
i,j,n,p,L:integer;
int j, int p)
procedure
citire(var
{int b[10][10],k,l,x;
144
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
if(k<j)
b[k]:=a[k];
b[l][k]=a[l+1][k];
else
b[k]:=a[k+1];
b[l][k]=a[l+1][k+1];
if (j<n)
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:);
readln(L);
cin>>L;
if(L%2==1)
145
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
prealabil
interschimbari
pana
nenule
conditie
coloane
trebuie
diagonala
aceasta
si
contina
se
fac
de
cand
in
linii
aceasta
pana
cand
aceasta
conditie
este
indeplinita*/
float
determinant(float
n)
function
{int i,j,k;
determinant(a:matrice;n:integer)
float p;
:real;
for (j=1;j<=n-1;j++)
a[][10],int
for(i=1;i<=n;i++)
begin
if(a[i][j]!=0)
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;
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;
var
ms:matrice;
vlin,vcol,lr,cr:vector;
i,j,r1,r2,nlin,nlr,ncr,ec,nec:integ
{int i,j;
er;
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])
{int i,j;
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
c_minor(vlin,vcol:vector;nlin:
{int i;
integer;a:matrice;var
minor:matrice; m,n:integer);
ramase
var
alege nimic*/
i,j:integer;
begin
neselectate;
initial
nu
se
for(i=1;i<=m;i++)
lr[i]=i;
nlr=m;
minor[i,j]:=a[vlin[i],vcol[j]];
for(j=1;j<=n;j++)
end;
cr[j]=j;
ncr=n;
var i:integer;
begin{lr
si
cr
retin
liniile
si
{int i,j;
i:=1;
while (i<=dv && v[i]!=x)
lr[i]:=i;
i++;
147
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
{int b[10][10],k,l,x;
dv:integer;x:integer);
//vezi IV.3.4.1
var j,i:integer;
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;
cauta(a,m,n,l,c);
v[j]:=v[j+1];
if (l==0)
dv:=dv-1;
then
end;
function
determinant(a:matrice;n:integer;
i,j,p:integer):integer;
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]);
else
begin
nlin=nlin+1;
for (i=1;i<=nlr;i++)
c}
for (j=1;j<=ncr;j++)
nlin:=1; rang:=1;
148
Capitolul IV - Matrice
vlin[nlin]:=l; vcol[nlin]:=c;
vlin[nlin]=lr[i];
stoprang:=false;
vcol[nlin]=cr[j];
elimina
c_minor(vlin,vcol,nlin,a,minor,m,n);
linia
si
coloana
/*se
pentru a nu fi reselectate}
construiesc
minori
de
elimina(lr,nlr,vlin[nlin]);
elimina(cr,ncr,vcol[nlin]);
while
(nlin<dmax)
and
not
detm=determinant(minor,nlin,1,1,1);
(stoprang) do
begin
nlin:=nlin+1;
cout<<"Minor de dimensiune
maxima!!"<<'\n';
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
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))
then
{ dmax=0;
writeln('Cautam
un
dimensiune
<<nlin<<"
diferit
de
0"<<'\n';
stoprang:=true;elimina(lr,nlr,vlin[
nlin]);
else
cout<<"Construim un alt
elimina(cr,ncr,vcol[nlin]);
if (nlin=m)or(nlin=n)
149
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()
{int i,j;
minor
de
dimensiune
',nlin,'
else
writeln('Construim
un
void main()
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;
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
Capitolul IV - Matrice
C++
(secven program)
(secven program)
program determinare_inversabila;
#include<iostream.h>
#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
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
Capitolul IV - Matrice
end;
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}
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];
else
calg[i1]:=mt[i1];
if(j1<j)
calg[i1][j1]=mt[i1+1][j1];
calg[i1]:=mt[i1+1];
else
calg[i1][j1]=mt[i1+1][j1+1];
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:');
begin
cout<<calg[i2][j2]<< ;
write(calg[i2,j2]:6);
cout<<\n;
writeln;
end;
if ((i+j) % 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
Capitolul IV - Matrice
madj[i,j]:=determinant(calg,n-
cout<<elementul
1,1,1,1);
a*(<<i<<','<<j<<
writeln('Elementul
adica <<madj[i][j]<<\n;
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<<
complementului
cu
cu
semn
schimbat
adica ',madj[i,j]);
semn
adica
<<madj[i][j]<<\n;
end;
readkey;
getch();
end;
end;
procedure
inversa(var
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;
writeln;
inmultind
writeln('Matricea
obtine
schimbat
inmultind
inversa
A*
cu
se
inversul
cu
inversul
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
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;
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.
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,
int
{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;
procedure
c_minor(vlin,vcol:vector;nlin:integ
155
vlin[],int
a[][10],int
Capitolul IV - Matrice
minor:matrice;
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
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
}
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;
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
de
Capitolul IV - Matrice
necunoscute...');
readln(nec);
writeln('Coeficientii
matricii
sistemului');
m,int n)
{
for i:=1 to ec do
int
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+
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
write('+',a[i,n],'X',n,'=',a[i,n+1]
);
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;
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],
Capitolul IV - Matrice
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:');
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( 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;
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
158
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
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
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
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);
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
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
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
Capitolul IV - Matrice
Capitolul IV - Matrice
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
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;
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(')');
end;
&kmin)
end;
procedure
minim(i,j:integer;var
int k;
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])
{
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
Capitolul IV - Matrice
end;
for( i=1;i<=n-1;i++)
begin
citire;
j=i+h;
minim(i,j,min,kmin);
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