Sunteți pe pagina 1din 15

Determinarea matricei inverse prin metoda Gauss-Jordan

LABORATOR 6
DETERMINAREA MATRICEI INVERSE PRIN METODA
GAUSS-JORDAN
1. Consideraii teoretice
Rezolvarea sistemelor de ecuaii liniare constituie unul dintre subiectele larg
abordate de calculul numeric. n parte, acest fapt se datoreaz numeroaselor clase
de fenomene care fie au ca model matematic sisteme de ecuaii algebrice liniare, fie
genereaz modele de acest gen.
Metodele de rezolvare a sistemelor de ecuaii liniare se pot grupa, n principal, n
trei mari clase:
- metode ce utilizeaz calculul de determinani
- metode directe
- metode iterative
Din punct de vedere numeric, metodele care utilizeaz calcul de determinani sunt
improprii procesrii automate, fapt care face ca algoritmii numerici s ocoleasc
acest tip de abordare. elelalte dou clase de metode, ns, sunt utilizate n ponderi
similare.
nainte de a trece la o analiz detaliat a metodelor amintite mai sus, s
precizm c!teva specificiti relative la ecuaiile algebrice liniare. n scopul facilitrii
analizei, vom lua n considerare un sistem cu dimensiunea ", fr a reduce, n felul
acesta, generalitatea rezultatele obinute. #ie astfel:

'

+
+
y b x b ) y , x ( g
y a x a ) y , x ( f
2 1
2 1
un sistem de dou ecuaii liniare cu dou necunoscute. #iecare din cele dou ecuaii
poart numele de form liniar. $ form liniar se define%te prin intermediul a dou
proprieti:
) ax , ax ( f ) x , x ( af
) y x ( f ) y , x ( f ) y y , x x ( f
2 1 2 1
2 2 1 1 2 1 2 1

+ + + +
cu a constant arbitrar.
. Metode directe
Metodele directe permit obinerea soluiei e&acte a sistemului considerat, fc!nd
abstracie de erorile de rotun'ire %i trunc(iere, folosind un numr finit de operaii
elementare.
1
Metode numerice implementate C
n cazul metodelor directe, sistemul iniial este adus la unul ec(ivalent, cu
matricea caracteristic mult mai simpl, de regul de form triung(iular. ntr-o astfel
de situaie, rezolvarea sistemului este imediat.
.1 Metoda Gauss
)ste cunoscut %i sub numele de metoda eliminrii, fiind una dintre cele mai
vec(i %i mai utilizate metode n rezolvarea sistemelor de ecuaii liniare %i n
inversarea matricelor.
Metoda *auss reduce sistemul de ordin n la forma superior triung(iular n n-1
pa%i. Dac sistemul Ax=b se renoteaz A
0
x=b
0
, cu
( )
0
ij 0
a A A
%i
( )
T
0
n
0
2
0
1 0
b ... b b b b , atunci la pasul k se obine sistemul ec(ivalent A
k
x=b
k
, cu
( )
k
ij k
a A
, ( )
T
k
n
k
2
k
1 k
b ... b b b . +asul k const n eliminarea lui x
k
din ecuaiile de rang
k+i, i=1(n-k). naintea pasului k matricea A
k-1
are primele k-1 coloane aduse la forma
superior triung(iular, adic
0 a
1 k
ij

pentru i>j %i j=1,2,...,k-1. ,a pasul k, pentru


ik+1 se scade din ecuaia de rang i pe cea de rang k nmulit cu factorul
1 k
kk
1 k
ik
ik
a
a
t

.
+rimele k ecuaii rm!n nesc(imbate.
De remarcat faptul c:
0 a
1 k
kk

-../0
1ceste elemente prezint un rol deosebit de important, fiind numite pivoi. Dac nici
unul dintre pivoii obinui n cei n-1 pa%i nu este nul sau mai mic dec!t cea mai mic
valoare reprezentabil pe sistemul de calcul automat, se obine n final sistemul
superior triung(iular A
n-1
x=b
n-1
. Dac un pivot este nenul dar mult mai mic n
comparaie cu numrtorul, factorul
1 k
kk
1 k
ik
ik
a
a
t

va fi afectat de erori mari de rotun'ire,


fapt care va duce la pierderea preciziei calculelor din acest moment. +entru a
mpiedica un astfel de comportament, se procedeaz la a%a numita operaie de
pivotare. n acest sens, la fiecare pas k, naintea eliminrii lui x
k
se alege coeficientul
cel mai mare n modul al acestei variabile, relativ la toate ecuaiile de rang ik n care
ea intervine, adic:
k s n , a max a
1 k
ik
n
k i
1 k
sk

-.."0
1poi, ecuaia de rang k se interverte%te cu ecuaia de rang s gsit mai sus. n felul
acesta se asigur imposibilitatea utilizrii unui pivot nul -dac toi
1 k
ik
a

considerai ar
fi nuli atunci rezult
0 A det
1 k

0. 2n pivot nul, fr posibilitate de nlocuire a lui cu


un alt parametru nenul, indic faptul c matricea sistemului este singular %i sistemul
nu are soluie unic sau este incompatibil.
1lgoritmul de pivotare poate fi implementat u%or pe un sistem programabil,
elementele matriceale %i termenii liberi succesivi fiind stocai n memorie n acelea%i
spaii cu cei iniiali -prin renlocuire0.
+asul k al algoritmului *auss este de forma:
2
Determinarea matricei inverse prin metoda Gauss-Jordan
1. 3e determin pivotul
1 k
sk
a

dup relaia -.."0. Dac

1 k
sk
a
- fiind precizia
calculelor 4 spre e&emplu 10
-p
dac se lucreaz cu p zecimale0, atunci
matricea sistemului este singular %i algoritmul este oprit.
2. Dac k s , se intervertesc elementele sj
a
%i kj
a
,
n j k
%i respectiv b
s
%i
b
k
.
3. +entru i=k+1,...,n se pune
kk
ik
ik
a
a
t
,
k ik i i
b t b b
. +entru
n ,..., 1 k j +
se
pune kj ik ij ij
a t a a
.
2neori, dac matricea sistemului este slab condiionat, se apeleaz la fiecare
pas k la a%a numita pivotare total. n cadrul acestei proceduri se calculeaz:

,
_



1 k
ij
n
k j
n
k i
1 k
sp
a max max a
-..50
n acest caz, pentru a aduce pivotul ma&im n poziia -k,k0 trebuie intervertite at!t
liniile s %i k, c!t %i coloanele p %i k ale matricei sistemului. n acest fel, ns, ordinea
necunoscutelor se sc(imb. Dac se dore%te ca n final ordinea necunoscutelor s
fie pstrat, este necesar ca dup rezolvarea sistemului s se efectueze o procedur
de reobinere a ordinii soluiilor conform cu ordinea iniial a necunoscutelor
sistemului. +entru aceasta, va fi necesar ca la fiecare intersc(imbare de coloane s
se memoreze indicii p corespunztori fiecrui pas k.
3 ptrundem mai ad!nc n mecanismul algoritmului *auss. +entru aceasta s
considerm, fr a reduce generalitatea analizei, un sistem particular, de ordin 5, de
forma:

'

+ +
+ +
+ +
3 3 33 2 32 1 31
2 3 23 2 22 1 21
1 3 13 2 12 1 11
b x a x a x a
b x a x a x a
b x a x a x a
+resupunem c matricea
( )
ij
a A
este nesingular, deci 0 A det . 1tunci, sistemul
are soluie unic ce poate fi obinut prin algoritmul *auss.
1lgoritmul *auss implic o serie de pa%i succesivi, fiecare dintre ace%tia fiind
compus din dou operaii: una de normalizare %i alta de reducere.
+asul /
a) Normalizare
3e nmule%te prima ecuaie cu
11
a
1
. elelalte ecuaii rm!n nesc(imbate.
3
Metode numerice implementate C
3istemul devine:

'

+ +
+ +
+ +
3 3 33 2 32 1 31
2 3 23 2 22 1 21
1 3 13 2 12 1
b x a x a x a
b x a x a x a
b x a x a x
unde
3 , 2 j ,
a
b
b ,
a
a
a
11
1
1
11
j 1
j 1

b) Reducere

3e nmule%te prima ecuaie cu
21
a
%i se adun cu a doua, rezultatul
nlocuind cea de-a doua ecuaie. 3e nmule%te apoi prima ecuaie cu
31
a
%i
se adun cu a treia, ultima fiind nlocuit cu rezultatul astfel obinut. 3istemul
devine:

'

+
+
+ +
3 3 33 2 32
2 3 23 2 22
1 3 13 2 12 1
b x a x a
b x a x a
b x a x a x
unde
3 , 2 j , i , b b a b , a a a
i 1 1 i i ij 1 i ij
+ +
+asul "
c) Normalizare
3e nmule%te cea de-a doua ecuaie cu
22
a
1
. 3istemul devine:

'

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

3e nmule%te cea de-a dou ecuaie cu 32
a
%i se adun cu a treia.
Rezultatul nlocuie%te cea de-a treia ecuaie. 3istemul devine:

'

+
+ +
3 3 33
2 3 23 2
1 3 13 2 12 1
b x a
b x a x
b x a x a x
unde 3 2 32 3 33 32 23 33
b b a b , a a a a + +
$bservm c, a%a cum precizeaz teoria, avem de procesat un numr de doi
pa%i -n-1 cu n=30. Dup nc(eierea acestei secvene de pa%i, sistemul este adus la
4
Determinarea matricei inverse prin metoda Gauss-Jordan
forma superior triung(iular. 1cum, determinarea celor trei necunoscute nu mai
ridic nici o problem:

'

33
3
13
33
3
23 12 2 12 1 3
33
3
23 2 2
33
3
3
a
b
a
a
b
a a b a b x
a
b
a b x
a
b
x
. Metoda Gauss-Jordan
Metoda *auss poate fi adaptat pentru a opera asupra matricei e&tinse a
sistemului:
1
1
1
]
1

3 33 32 31
2 23 22 21
1 13 12 11
b a a a
b a a a
b a a a
!
1cest fapt se poate dovedi util n special c!nd se implementeaz algoritmul ntr-
un program rulabil pe un sistem de calcul, limba'ele actuale de programare dein!nd
faciliti de procesare a matricelor.
$peraiile de eliminare gaussian se realizeaz acum pe liniile matricei !. 1ceste
operaii pot fi:
- nmulirea unei linii cu o constant
- scderea unei linii din alta %i nlocuirea celei de-a doua cu rezultatul scderii
- rearan'area liniilor
n urma celor doi pa%i, matricea e&tins devine:
5
Metode numerice implementate C
1
1
1
]
1

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

Dac se acioneaz n continuare asupra acestei matrice pentru a forma n primele
trei coloane matricea unitate, se obine a%a numita metod Gauss-Jordan. n acest
caz coloana a patra va reprezenta tocmai vectorul soluie:
1
1
1
]
1

3
2
1
x 1 0 0
x 0 1 0
x 0 0 1
Metoda *auss-6ordan poate fi utilizat %i pentru calculul inversei unei matrice
date. 1stfel, dac se cere inversa matricei:
1
1
1
]
1

33 32 31
23 22 21
13 12 11
a a a
a a a
a a a
A
atunci se formeaz matricea:
6
Determinarea matricei inverse prin metoda Gauss-Jordan
1
1
1
]
1

1 0 0 a a a
0 1 0 a a a
0 0 1 a a a
"
33 32 31
23 22 21
13 12 11
prin alturarea matricei unitate la matricea A. 1lgoritmul *auss-6ordan aplicat
matricei " va transforma primele trei coloane ale acesteia n coloanele matricei
unitate %i va avea ca efect apariia n urmtoarele trei coloane a matricei inverse A
-1
.
Exemplu de aplicaie
3e d matricea nesingular:
1
1
1
]
1

2 1 1
1 # 1
1 1 $
A
3e cere s se determine matricea invers acesteia, folosind algoritmul *auss-
6ordan.
Rezolvare
3e formeaz matricea:
1
1
1
]
1

1 0 0 2 1 1
0 1 0 1 # 1
0 0 1 1 1 $
A
1plic!nd algoritmul *auss-6ordan se a'unge n final la matricea:
7
Metode numerice implementate C
1
1
1
]
1

$22 . 0 0%% . 0 0&& . 0 1 0 0


0%% . 0 200 . 0 0%% . 0 0 1 0
0&& . 0 0%% . 0 2$$ . 0 0 0 1
Rezult:
1
1
1
]
1

$22 . 0 0%% . 0 0&& . 0


0%% . 0 200 . 0 0%% . 0
0&& . 0 0%% . 0 2$$ . 0
A
1
!. I"#$e"entarea a$%orit"&$&i
1lgoritmul descris se poate implementa sub limba'ul de programare conform cu
listingul / prezentat n continuare.
Listingul 1
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(void)
{
int o,i,j,p=1,r,c,k,la!=",!rad,linii,coloane,t#
dou$le v%1"&%1"&,a%1"&%1"&,u%1"&%1"&,s%1"&%2"&,cod%1"&,linie%1"&%2"&,'
pivot%1"&,lin%1"&,col%1"&,sum%1"&%2"&,piv#
clrscr()#
(()itirea matricei directe
print(*+ati ordinul matricei de inversat,*)#
scan(*-d*,.o)#
linii=o#coloane=2/o#
or(i="#i<o#i00)
or(j="#j<o#j00)
{
print(*v%-d,-d&=*,i,j)#
scan(*-l*,.v%i&%j&)#
1
((2isarea matricei directe
print(*'n3atricea directa este,*)#
or(i="#i<o#i00)
8
Determinarea matricei inverse prin metoda Gauss-Jordan
{
print(*'n*)#
or(j="#j<o#j00)
{
print(*'t-2.2*,v%i&%j&)#
1
1
(()onstruirea matricei unitare
or(i="#i<o#i00)
or(j="#j<o#j00)
{
i(i==j) u%i&%j&=1#
else u%i&%j&="#
1
((3atricea e4tinsa
print(*'n'n3atricea e4tinsa este,'n*)#
or(i="#i<o#i00)
{
print(*'n*)#
or(j="#j<2/o#j00)
{
i(j<o) { s%i&%j&=v%i&%j&#
linie%i&%j&=v%i&%j&#
i(i==j) pivot%i&=v%i&%j&#
print(*-2.2't*,linie%i&%j&)#
1
else { s%i&%j&=u%i&%j5o&#
linie%i&%j&=u%i&%j5o&#
print(*-2.2't*,linie%i&%j&)#
1
1
1
or(i="#i<o#i00)
or(j="#j<o#j00)
{
i(i==j)
i(s%i&%j&==") p=1"/p0i#
1
c=p#
i="#
6hile(p>=1")
{
r=p-1"#cod%i&=r#
p=p(1"#i00#
1
k=i#
print(*'n'n2isea7a numarul de linie pe care pivotul este nul,*)#
i(i==")
print(*'n89 :;<=>2 ?<@A> 89BC*)#
else
or(i=k51#i>="#i55)
{
print(*'n'tlinia -1."*,cod%i&)# la!=1#
1
9
Metode numerice implementate C
print(*'n)odul de pivot,'t-d'n'n*,c)#
i(la!) !oto stop#
else
{
or(i="#i<o#i00)
{
piv=linie%i&%i&#
or(j="#j<2/o#j00)
{
linie%i&%j&=(1(piv)/linie%i&%j&#
1
or(k=i01#k<o#k00)
{
piv=linie%k&%k51&#
or(j="#j<2/o#j00)
sum%i&%j&=(51)/piv/linie%i&%j&#
or(j="#j<2/o#j00)
linie%k&%j&=linie%k&%j&0sum%i&%j&#
1
1
((3atricea re7ultanta
print(*'n3atricea re7ultanta pas 1 este,'n*)#
or(i="#i<o#i00)
{
print(*'n*)#
or(j="#j<2/o#j00)
print(*-2.2't*,linie%i&%j&)#
1
or(i=1#i<o#i00)
{
or(k=i51#k>="#k55)
{
piv=linie%k&%i&#
or(j="#j<2/o#j00)
sum%i&%j&=(51)/piv/linie%i&%j&#
or(j="#j<2/o#j00)
linie%k&%j&=linie%k&%j&0sum%i&%j&#
1
1
((3atricea re7ultanta
print(*'n'n3atricea re7ultanta pas 2 este,'n*)#
or(i="#i<o#i00)
{
print(*'n*)#
or(j="#j<2/o#j00)
print(*-2.2't*,linie%i&%j&)#
1
1
!oto end#
stop,
print(D'n2 ost intalnit un pivot nulCCCD)#
end,
!etch()#
1
10
Determinarea matricei inverse prin metoda Gauss-Jordan
1naliza programului conduce la c!teva concluzii interesante. 1stfel, o prim
constatare ar fi aceea c n cazul furnizrii n intrarea aplicaiei a unei matrice
singulare, programul genereaz o eroare de mprire cu zero. Datele de ie%ire
pentru un astfel de caz, sunt prezentate mai 'os.
Dati ordinul matricei de inversat:2
v[0,0]=1
v[0,1]=1
v[1,0]=1
v[1,1]=1
Matricea directa este:
1.00 1.00
1.00 1.00
Matricea extinsa este:
1.00 1.00 1.00 0.00
1.00 1.00 0.00 1.00
Afiseaza numarul de linie pe care pivotul este nul:
NU EXISTA PIVOT NUL!
Codul de pivot: 1
Floating point error: Divide by 0.
Abnormal program termination
ntr-adevr, matricea
1
]
1

1 1
1 1
este singular, av!nd determinantul nul.
n cazul n care cel puin unul dintre pivoi este nul, programul furnizeaz o ie%ire
de felul urmtor:
Dati ordinul matricei de inversat:2
v[0,0]=1
v[0,1]=0
v[1,0]=-1
v[1,1]=0
Matricea directa este:
1.00 0.00
-1.00 0.00
Matricea extinsa este:
11
Metode numerice implementate C
1.00 0.00 1.00 0.00
-1.00 0.00 0.00 1.00
Afiseaza numarul de linie pe care pivotul este nul:
linia 1
Codul de pivot: 11
A fost intalnit un pivot nul!!!
)ste de asemenea posibil ca nici unul dintre pivoi s nu fie nul ns cel puin
unul s fie de valoare mic. n acest caz programul se comport astfel:
Dati ordinul matricei de inversat:2
v[0,0]=0.0000001
v[0,1]=2
v[1,0]=1
v[1,1]=1
Matricea directa este:
0.00 2.00
1.00 1.00
Matricea extinsa este:
0.00 2.00 1.00 0.00
1.00 1.00 0.00 1.00
Afiseaza numarul de linie pe care pivotul este nul:
NU EXISTA PIVOT NUL!
Codul de pivot: 1
Matricea rezultanta pas 1 este:
1.00 20000000.00 10000000.00 0.00
-0.00 1.00 0.50 -0.00
Matricea rezultanta pas 2 este:
1.00 0.00 -0.50 1.00
-0.00 1.00 0.50 -0.00
12
Determinarea matricei inverse prin metoda Gauss-Jordan
Matricea direct este afi%at ca fiind
1
]
1

00 . 1 00 . 1
00 . 2 00 . 0
deoarece n formatul de afi%are
a datelor a fost fcut specificaia 22!f, dorindu-se ca elementele matriceale s
apar scrise doar cu primele dou cifre zecimale. u toate acestea, n memorie este
stocat, pentru elementul de pe prima linie %i prima coloan, valoarea 0.0000001.
Dac nu ar fi a%a, s-ar afi%a mesa'ul erorii de mprire prin zero.
3emnificativ aici este c putem sesiza faptul c operaiile de calcul matematic s-
au desf%urat la limit, observ!nd apariia unui semn minus n faa unui element nul
al blocului matriceal unitate din matricea final. 2n astfel de semn va trebui s
creeze suspiciune asupra corectitudinii rezultatului furnizat de program. ntr-adevr,
calcul!nd 7la m!n8 produsul matricei directe cu matricea rezultat, declarat ca
matrice invers, constatm c nu mai regsim matricea unitate, a%a cum ar fi trebuit.
9i mai simplu, putem verifica eroarea produs lans!nd nc o dat programul, av!nd
n intrare acum matricea de ie%ire din cazul de mai sus. )vident, nu vom putea utiliza
matricea de ie%ire a%a cum este ea afi%at, deoarece am obine mesa'ul c avem un
pivot nul. De aceea, mai nt!i va trebui s rulm programul afi!nd un numr mai
mare de cifre zecimale, de e&emplu :.
Dati ordinul matricei de inversat:2
v[0,0]=0.0000001
v[0,1]=2
v[1,0]=1
v[1,1]=1
Matricea directa este:
0.00000010 2.00000000
1.00000000 1.00000000
Matricea extinsa este:
0.00 2.00 1.00 0.00
1.00 1.00 0.00 1.00
Afiseaza numarul de linie pe care pivotul este nul:
NU EXISTA PIVOT NUL!
Codul de pivot: 1
Matricea rezultanta pas 1 este:
1.00 20000000.00 10000000.00 0.00
-0.00 1.00 0.50 -0.00
Matricea rezultanta pas 2 este:
13
Metode numerice implementate C
1.00000000 0.00000000 -0.50000003 1.00000005
-0.00000000 1.00000000 0.50000003 -0.00000005
1cum putem introduce ca intrare matricea de ie%ire de mai sus, gsind:
Dati ordinul matricei de inversat:2
v[0,0]=-0.50000003
v[0,1]=1.00000005
v[1,0]=0.50000003
v[1,1]=-0.00000005
Matricea directa este:
-0.50000003 1.00000005
0.50000003 -0.00000005
Matricea extinsa este:
-0.50 1.00 1.00 0.00
0.50 -0.00 0.00 1.00
Afiseaza numarul de linie pe care pivotul este nul:
NU EXISTA PIVOT NUL!
Codul de pivot: 1
Matricea rezultanta pas 1 este:
1.00 -2.00 -2.00 -0.00
0.00 1.00 1.00 1.00
Matricea rezultanta pas 2 este:
1.00000000 0.00000000 0.00000010 1.99999998
0.00000000 1.00000000 1.00000000 1.00000000
oncluzia este c va trebui s fim e&trem de ateni la orice informaie ne poate
furniza programul.
'. Te"e de st&di&
" 3 se scrie un program # care s cear introducerea de la tastatur a
dimensiunii unei matrice ptratice %i s calculeze matricea invers prin
metoda *auss-6ordan. Matricele alese ca e&emplu de rulare vor fi de
dimensiune rezonabil astfel nc!t matricea invers corespunztoare s poat
fi determinat fr efort, pe cale manual.
2 3 se fac observaii asupra problemelor care pot s intervin n cazul acestei
metode de inversare matriceal.
3. 3 se e&plice necesitatea introducerii n program a variabilei pi'.
14
Determinarea matricei inverse prin metoda Gauss-Jordan
$ 3 se e&plice mecanismul de determinare a codului de pivot %i semnificaia
acestuia.
% 3 se e&perimenteze funcionarea programului cu urmtoarele intrri:
1
]
1

$ 3
2 1
;
1
1
1
]
1

( & )
% # $
3 2 1
;
1
]
1

2 1
1 1
;
1
]
1

1 1
0 1
;
1
1
1
]
1

1 1 1
0 1 0
1 0 1
;
1
]
1

) #
3 1
;
1
1
1
]
1

1 1 1
0 1 0
2 0 1
& 3 se imagineze o metod de determinare a singularitii matriceale prin
calcul automat.
15

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