Sunteți pe pagina 1din 12

Curs 13 Rezolvarea sistemelor de ecuaii liniare

1
Rezolvarea sistemelor de ecuaii liniare

Exemplu
Fie circuitul din figura de mai jos pentru care se dau: R
1
=1 , R
2
=2 , R
3
=3 , E
1
=8 V,
E
2
=15 V i E
3
=3V. S se determine curenii prin cele trei rezistene.
Pentru rezolvarea problemei vom folosi legile lui Kirchhoff. Alegem sensul acelor de ceas
pentru parcurgerea ochiurilor i obinem sistemul:

+ =
=
+ =
3 3 2 2 3 2
1 1 2 2 2 1
3 1 2
I R I R E E
I R I R E E
I I I

Pentru rezolvarea acestuia i obinerea necunoscutelor I
1
, I
2
i I
3
l vom rearanja sub forma:

= +
= +
= +
3 2 3 3 2 2
1 2 2 2 1 1
3 2 1
0
E E I R I R
E E I R I R
I I I

Inlocuind valorile rezistenelor i tensiunilor electromotoare obinem:

= +
= +
= +
12 3 2
7 2
0
3 2
2 1
3 2 1
I I
I I
I I I

Pentru eliminarea lui I
1
din ecuaia a doua vom scdea din prima ecuaie pe cea de-a doua,
iar a doua ecuaie va deveni rezultatul acestei scderi. In cea de-a treia ecuaie I
1
lipsete.

= +
= +
= +
12 3 2
7 3
0
3 2
3 2
3 2 1
I I
I I
I I I

Acest lucru este posibil deoarece un system de ecuaii, B, obinut dintr-un sistem A are
aceleai soluii ca i sistemul A dac schimbarea const n:
a) interschimbarea a dou ecuaii ale sistemului
b) nmulirea unei ecuaii cu o constant nenul
c) nlocuirea unei ecuaii cu suma dintre ecuaia respectiv i multiplul alteia


Fig.1 Exemplu de reea electric de curent continuu
Curs 13 Rezolvarea sistemelor de ecuaii liniare

2
Imprim a doua ecuaie cu -3 i pe cea de-a doua cu 2:

= +
=
= +
6
2
3
3
7
3
1
0
3 2
3 2
3 2 1
I I
I I
I I I

Pentru eliminarea lui I
2
din a treia ecuaie scdem ecuaia 3 din 2, iar a treia ecuaie va fi
rezultatul acestei scderi:

=
=
= +
3
11
6
11
3
7
3
1
0
3
3 2
3 2 1
I
I I
I I I

Ultima ecuaie a sistemului permite obinerea direct a lui I
3
, iar celelalte dou intensiti se
obin prin substituie invers, a lui I
3
n a doua ecuaie i apoi a lui I
2
i I
3
n prima ecuaie.
Astfel: I
3
=2 A, I
2
=3 A i I
1
=1 A.
Aadar, pentru rezolvarea sistemului, matricea acestuia a fost adus la o form (superior)
triunghiular care a permis determinarea direct a soluiei ultimei ecuaii i apoi obinerea
celorlalte soluii prin substituii inverse.

Metoda de eliminare a lui Gauss
Metoda lui Gauss este una din metode tradiionale directe de rezolvare a sistemelor de
ecuaii liniare. Ideea de baz a metodei const n aducerea sistemului de ecuaii prin
transformri elementare la o form echivalent, avnd matrice superior sau inferior
triunghiular, urmat de rezolvarea sistemului rezultat prin procedee recurente specifice,
foarte eficiente.

Transformarea sistemului iniial ntr-un sistem de form triunghiular se realizeaz cu
ajutorul a trei operaii elementare:
a) interschimbarea a dou ecuaii ntre ele;
b) nmulirea unei ecuaii cu o constant nenul;
c) scderea unei ecuaii din alta i nlocuirea celei de-a doua ecuaii cu rezultatul
scderii.

Transformarea sistemului este echivalent cu eliminarea succesiv a necunoscutelor din
ecuaii, prin aceast operaie ajungndu-se la o matrice triunghiular a sistemului (faza
eliminrii). Rezolvarea sistemului cu matrice triunghiular const n determinarea
necunoscutelor i substituia lor n ecuaiile sistemului n ordine invers, fiind denumit din
acest motiv faza substituiei inverse.

Fie pentru exemplificare un sistem de trei ecuaii cu trei necunoscute:
Curs 13 Rezolvarea sistemelor de ecuaii liniare

3

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

sau sub form matricial
(
(
(

=
(
(
(

(
(
(

3
2
1
3
2
1
33 32 31
23 22 21
13 12 11
.
b
b
b
x
x
x
a a a
a a a
a a a


respectiv:
A x =b
cu A=[a
ij
] matricea sistemului,
x=[x
i
] matricea coloan a necunoscutelor
b=[b
i
] matricea coloan a termenilor liberi.

Pivotarea parial
Pentru majoritatea metodelor de rezolvare a sistemelor de ecuaii liniare - fie ele
directe sau iterative - se ajunge ca la un moment dat s fie necesar mprirea la un
element diagonal din matricea A, a
jj
. Acest element poart numele generic de pivot. Desigur,
dac acest element este nul metoda respectiv eueaz, deoarece - din punct de vedere
numeric - operaia de mprire la 0 este imposibil i, dac nu se iau masuri speciale, orice
program de calcul se ntrerupe din execuie ca urmare a producerii unei erori de tipul "Run
time error", cu un mesaj de eroare de genul "Floating point overflow".
Situaia extrem n care ntr-o matrice A poate s apar un element diagonal nul este
cea n care matricea respectiv este singular (determinantul ei este nul). Pe de alt parte,
pivotul se poate anula far ca matricea A s fie singular. Mai mult dect att, pivotul poate
fi nenul, dar cu o valoare foarte mic, astfel nct mprirea la el s conduc la producerea
unor erori de rotunjire, care prin acumulare pot denatura rezultatul.
Evitarea unor asemenea situaii se poate face prin adoptarea unei msuri care s
permit aducerea pe diagonal a unui element suficient de mare. O asemenea tehnic este
aceea a pivotrii care const n schimbarea ntre ele a dou linii sau a dou coloane, astfel
nct noul pivot sa aib o valoare absolut ct mai mare posibil. Cutarea noului pivot se
face pe coloana curent j*, pe liniile situate sub linia j*, inclusiv aceasta (pivotarea
partiala) sau pe liniile i coloanele situate sub linia j* i la dreapta coloanei j*, inclusiv
acestea (pivotarea complet).
In cazul pivotrii pariale, la un pas j*, se spune ca se executa pivotarea parial pe
coloana j*. Prin aceast tehnic se caut pe coloana j* elementul subdiagonal maxim n
valoare absolut i se schimb linia j* cu linia in care apare acel element. Deoarece
schimbarea a dou linii n matricea A nseamn de fapt schimbarea ordinii a dou ecuaii din
Curs 13 Rezolvarea sistemelor de ecuaii liniare

4
sistem, se impune ca - simultan - s se realizeze i interschimbarea termenilor liberi
corespunztori din vectorul b i de asemenea, schimbarea semnului determinantului matricii.
n cazul concret al unui sistem de trei ecuaii cu trei necunoscute, la primul pas al
etapei eliminrii urmrim eliminarea necunoscutei x
1
din toate ecuaiile sistemului, cu
excepia primei ecuaii. Pentru aceasta, mprim mai nti prima linie la elementul pivot a
11
,
presupus nenul, adic a
11
0 (dac nu este ndeplinit aceast condiie se reordoneaz
ecuaiile sistemului):

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


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

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


unde:

=
= = =
=
= =
) 1 (
1 1
) 1 (
) 1 (
1 1
) 1 (
11
1 ) 1 (
1
11
1
) 1 (
1
3 , 2 ; 3 , 2 , 1 ,
3 , 2 , 1 ,
b a b b
i j a a a a
a
b
b
j
a
a
a
i i i
j i ij ij
j
j
(2)

Aadar, primul pas al metodei eliminrii a lui Gauss conduce la ecuaia matricial:
(
(
(

=
(
(
(

(
(
(

) 1 (
3
) 1 (
2
) 1 (
1
3
2
1
) 1 (
33
) 1 (
32
) 1 (
23
) 1 (
22
) 1 (
13
) 1 (
12
.
0
0
1
b
b
b
x
x
x
a a
a a
a a
(3)

La urmtorul pas, eliminm necunoscuta x
2
din ultima ecuaie. Pentru aceasta, mprim mai
nti a doua ecuaie la elementul pivot,
) (
a
1
22
, diferit de zero (dac nu este aa, atunci
realizm interschimbarea ecuaiilor a doua i a treia) i apoi scdem linia obinut, nmulit
cu,
) (
a
1
32
, din ecuaia a treia. Acest al doilea pas conduce la ecuaia matricial:

Curs 13 Rezolvarea sistemelor de ecuaii liniare

5
(
(
(

=
(
(
(

(
(
(

) 2 (
3
) 2 (
2
) 1 (
1
3
2
1
) 2 (
33
) 2 (
23
) 1 (
13
) 1 (
12
.
0 0
1 0
1
b
b
b
x
x
x
a
a
a a
(4)

unde:

=
= = =
=
= =
) 2 (
2
) 1 (
2
) 1 ( ) 2 (
) 2 (
2
) 1 (
2
) 1 ( ) 2 (
) 1 (
22
) 1 (
2 ) 2 (
2
22
) 1 (
2
) 2 (
2
3 ; 3 , 2 ,
3 , 2 ,
b a b b
i j a a a a
a
b
b
j
a
a
a
i i i
j i ij ij
j
j
(5)

Faza eliminrii se ncheie mprind cea de a treia ecuaie la elementul pivot
) (
a
2
33
,
care, pentru un sistem cu matrice nesingular (matrice ptratic, cu determinant nenul),
trebuie s fie diferit de zero. Rezult dup acest pas sistemul:
(
(
(

=
(
(
(

(
(
(

) 3 (
3
) 2 (
2
) 1 (
1
3
2
1
) 2 (
23
) 1 (
13
) 1 (
12
.
1 0 0
1 0
1
b
b
b
x
x
x
a
a a
(6)
cu
) 2 (
33
) 2 (
3 ) 3 (
3
a
b
b =


sau matricial A
(3)
x =b
(3)
.
Se observ c matricea A
(3)
este superior triunghiular, iar sistemul obinut este
echivalent cu cel iniial A x =b, adic are soluia (x
1
, x
2
, x
3
).
Faza substituiei inverse (mersul napoi) presupune parcurgerea n sens invers a ecuaiilor
sistemului cu matrice triunghiular (6), rezultat n faza eliminrii i stabilirea soluiei
sistemului pe baza unui calcul recursiv:

+ =
=
=
) (
3
) 1 (
13 2
) 1 (
12
) 1 (
1 1
3
) 2 (
23
) 2 (
2 2
) 3 (
3 3
x a x a b x
x a b x
b x
(7)

Aadar, determinarea soluiilor se face recursiv, de la indici mari spre indici mici,
fiecare nou soluie depinznd n mod explicit numai de soluiile determinate anterior.

Curs 13 Rezolvarea sistemelor de ecuaii liniare

6

Determinantul matricii sistemului
Metoda de eliminare Gauss permite i calcularea determinantului matricii sistemului.
Se observ c, matricea A
(3)
a sistemului (6) fiind triunghiular, are determinantul egal cu
produsul elementelor diagonale, adic:
det A
(3)
=1
Avnd n vedere, ns, c prin mprirea liniilor matricii sistemului la elementele pivot rezult
o matrice a crui determinant este egal cu determinantul matricii iniiale mprit la produsul
elementelor pivot, rezult:
) 2 (
33
) 1 (
22 11
) 2 (
33
) 1 (
22 11
) 3 (
det : 1
det
det a a a A adica
a a a
A
A = = =

Metoda descris mai sus poate fi generalizat i aplicat la rezolvarea unui sistem cu
un numr oarecare de n ecuaii liniare cu n necunoscute de forma (8):

= + + +
= + + +
= + + +
m n mn m m
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
........ .......... .......... ..........
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
(8)
sau sub form matriceal:
(
(
(
(

=
(
(
(
(

(
(
(
(

m n mn m m
n
n
b
b
b
x
x
x
a a a
a a a
a a a
... ...
.
...
... ... ... ...
...
...
2
1
2
1
2 1
2 22 21
1 12 11


La fiecare pas k al fazei eliminrii se efectueaz mprirea liniei pivot k la elementul
diagonal
) k (
kk
a
1
. Deoarece este posibil ca un element pivot s fie egal cu zero (ceea ce
conduce la imposibilitatea continurii fazei eliminrii), n practic se procedeaz astfel:
a) se determin elementul maxim al matricii A
(k1)
situat pe coloana k i pe liniile l k
(pe diagonala principal i sub ea), adic elementul a
lk
;
b) se aduce elementul maxim a
lk
gsit pe diagonala principal, interschimbnd ntre ele
liniile l i k.
Relaiile de calcul al elementelor matricii sistemului i a matricii termenilor liberi sunt:
1 1 1
1
1
1
1 1 1
:


=
=
=
k
k
k
i
k
i
k
i
k
kk
k
ik k
i
k
kj
k
i
k
ij
k
ij
b m b b
respectiv
a
a
m
cu
a m a a

cu: i,j=k+1, ...,n i k=1,n-1
Curs 13 Rezolvarea sistemelor de ecuaii liniare

7

Inversa unei matrici
Fie o matrice ptratic A=[a
ij
]. Pentru determinarea inversei acestei matrici se folosete
relaia AA
-1
=I unde I este matricea unitate.
Fie matricea invers

(
(
(
(

nn n n
n
n
x x x
x x x
x x x
A
...
... ... ... ...
...
...
2 1
2 22 21
1 12 11
1


Cum AA
-1
trebuie s fie I, obinem:

=
= =
n
k
ij kj ik
n j i x a
1
,..., 1 , o

Aadar, pentru determinarea inversei matricii A trebuie rezolvate n sisteme de ecuaii
care au toate aceeai matrice A, fiind diferite doar matricile termenilor liberi. Vectorii coloan
care reprezint termenii liberi vor fi: {1, 0, ...,0}, {0, 1, 0, ...,0}, ..., respectiv {0, 0, ...,1}.
Cele n
2
elemente ale matricii A
-1
pot fi determinate folosind metoda Gauss de n ori.

Program exemplu: metoda Gauss
//Program Metoda Gauss

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#define dm 5

// Constanta dm reprezinta dimensiunea maxima a matricii sistemului
double a[dm][dm],ain[dm][dm],inv[dm][dm],prod[dm][dm];
//a este matricea sistemului
double b[dm],x[dm],det=1.0,dtm; //b este matricea termenilor liberi
int n,opt; //n este dimensiunea actuala a matricii sistemului
FILE *f; //descriptorul fisierului in care se vor scrie toate rezultatele

void stop()
{
printf("\n\n====================================");
printf("\nApasa orice tasta pentru continuare.");
printf("\n====================================");
printf("\n\nRezultatele se gasesc si in fisierul: d:\\gauss.rez");
getch();
}

Curs 13 Rezolvarea sistemelor de ecuaii liniare

8
void meniu()
//permite selectarea unei optiuni din meniu si apoi calculul corespunzator
{
clrscr();
printf("\n======= M E T O D A G A U S S =================");
printf("\n\nPuteti alege intre:\n\t1) Rezolvarea unui sistem de
ecuatii liniare");
printf("\n\t2) Determinarea inversei unei matrici\n\t3) Calculul
determinantului unei matrici");
do
{
fflush(stdin);
gotoxy(1,9);
printf("Optiunea: ");
gotoxy(12,9);
scanf("%d",&opt);
}
while(((opt!=1)&&(opt!=2))&&(opt!=3));
}

void verif()
//verifica inversarea matricii prin inmultirea acesteia cu inversa ei
//rezultatul trebuie sa fie matricea unitate
{
int i,j,k;
printf("\nVerificarea inversarii: AxA^-1");
fprintf(f,"\n\nVerificarea inversarii: AxA^-1\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
prod[i][j]=0;
for(k=0;k<n;k++)
prod[i][j]+=ain[i][k]*inv[k][j];
}
for(i=0;i<n;i++)
{
printf("\n\t\t");
fprintf(f,"\n\t\t");
for(j=0;j<n;j++)
{
if(fabs(prod[i][j])<1e-8)
prod[i][j]=0;
printf("%g\t",prod[i][j]);
fprintf(f,"%g\t",prod[i][j]);
}
}
}

void solutii()
//calculeaza solutiile sistemului liniar
{
Curs 13 Rezolvarea sistemelor de ecuaii liniare

9
int i,j;
double suma;

x[n-1]=b[n-1]/a[n-1][n-1];
for (j=n-2;j>=0;j--)
{
suma=0;
for(i=j+1;i<n;i++)
suma+=a[j][i]*x[i];
x[j]=(b[j]-suma)/a[j][j];

}
}

void tip_sol()
//tipareste solutiile sistemului
{
int i;
for(i=0;i<n;i++)
{
printf("\nx[%d]=%10.5lf",i,x[i]);
fprintf(f,"\nx[%d]=%10.5lf",i,x[i]);
}
}

void citire_mat()
//citeste matricea de intrare
{
int i,j;
gotoxy(1,10);
printf("Ordinul matricii sistemului: ");
scanf("%d",&n);
gotoxy(1,11);
printf("Matricea sistemului: ");
fprintf(f,"Matricea sistemului: \n");
for(i=0;i<n;i++)
{
fprintf(f,"\n");
for(j=0;j<n;j++)
{
gotoxy(7*j+1,i+12);
scanf("%lf",&a[i][j]);
ain[i][j]=a[i][j];
fprintf(f,"%10.5lf",a[i][j]);
}
}
}

void citire_tl()
{
//citeste matricea termenilor liberi
Curs 13 Rezolvarea sistemelor de ecuaii liniare

10
int i;
fprintf(f,"\nTermenii liberi:\n");
for(i=0;i<n;i++)
{
gotoxy(7*n+1,i+12);
scanf("%lf",&b[i]);
fprintf(f,"%10.5lf",b[i]);
}
}

double gauss(double a[dm][dm])
{
//realizeaza eliminarea Gaussiana

double t,m;
int i,j,k,l;

for(i=0;i<n;i++) //este necesar cand functia gauss() este
//apelata in functia matinv
for(j=0;j<n;j++) //altfel, la orice alt apel in afara celui
//initial matricea a ar fi
a[i][j]=ain[i][j]; //una modificata in urma
//transformarilor de la apelurile anterioare

//Se cauta elementul pivot
//de fapt linia care are in coloana k cel mai mare element

for(k=0;k<n;k++)
{
l=k; // l este indexul liniei pivot
//elementul pivot se cauta pe coloana k, in liniile aflate sub linia k
for (i=k+1;i<n;i++)
if (fabs(a[i][k])>fabs(a[k][k]))
l=i;
//Daca elementul pivot este intr-o alta linie decat cea curenta
// atunci se interschimba linia curenta cu cea in care se afla elem. pivot
if(l!=k)
{
for(j=0;j<n;j++)
{
t=a[k][j];a[k][j]=a[l][j];a[l][j]=t;
}
t=b[k];b[k]=b[l];b[l]=t;
det*=-1;
}

//Se calculeaza elementele matricii la eliminarea k
for(i=k+1;i<n;i++)
{
m=a[i][k]/a[k][k];
a[i][k]=0;
Curs 13 Rezolvarea sistemelor de ecuaii liniare

11
for(j=k+1;j<n;j++)
a[i][j]=a[i][j]-m*a[k][j];
b[i]=b[i]-m*b[k];
}

}
//Se calculeaza determinantul matricii
for(i=0;i<n;i++)
det*=a[i][i];
dtm=det;
return dtm;
}

matinv()
//calculeaza inversa matricii
{
int p,j,i,k;
double t[dm];

for(p=0;p<n;p++)
{
for(j=0;j<n;j++)

if(j==p)
b[j]=1;
else
b[j]=0;


gauss(a);
solutii();
for(k=0;k<n;k++)
inv[k][p]=x[k];

}
printf("\nMatricea inversa este:");
fprintf(f,"\n\nMatricea inversa este:\n");
for(i=0;i<n;i++)
{
printf("\n");
fprintf(f,"\n");
for(j=0;j<n;j++)
{
printf(" %10.5lf",inv[i][j]);
fprintf(f," %10.5lf",inv[i][j]);
}
}
return 0;
}

//========================================================
Curs 13 Rezolvarea sistemelor de ecuaii liniare

12

void main()
{
double x[10],det,suma;
int i,j,k;

f=fopen("d:\\gauss.rez","w");
meniu();
if(opt==1)
{
citire_mat();
citire_tl();
gauss(a);
solutii();
tip_sol();
stop();
}
else
if(opt==2)
{
citire_mat();
matinv();
verif();
stop();
}
else
{
citire_mat();
gauss(a);
printf("\nDeterminantul matricii este: %lg",dtm);
fprintf(f,"\n\nDeterminantul matricii este: %lg",dtm);
stop();
}
fclose(f);
}

Pentru testarea programului folosii exemplul prezentat la nceputul acestui curs.


Diagonalizarea matricilor

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