Documente Academic
Documente Profesional
Documente Cultură
= + + +
= + + +
= + + +
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
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
4
2. Exemple de afare a determinantilor cu ajutorul pivotarii totale
a. Pivot 0
La primul pas pivotul a
11
are valoarea maxima pe linie / coloana, deci nu are loc interschimbare si se
trece direct la calcul. Dupa calcul verifcam linia si coloana pentru pivotul a
22
observam ca 4 este valoarea
cea mai mare in modul si interschimbam linia a 2-a cu linia a 3-a, iar determinantul il inumultim cu -1 si
trecem la pasul II.
Observam ca la pasul III pivotul a
33
are valoarea 0, determinantul ia valoarea 0 si procesul se incheie.
b. Pivot diferit de 0
5 0 0
0 1 0 det = 1
0 4 0
1 2 1
3 1 3 det = 1
4 1 1
4 1 1
3 1 3 det = -1
1 2 1
1 1/4 1/4
0 1/4 9/4 det = -4
0 7/4 3/4
1 1/4 1/4
0 9/4 1/4 det = 4
0 3/4 7/4
1 1/4 1/4
0 1 1/9 det = 9
0 0 5/3
1 1/4 1/4
0 1 1/9 det = 15
0 0 1
1 0 0
0 1 0 det = 5
0 4 0
1 0 0
0 4 0 det = -5
0 1 0
1 0 0
0 1 0 det = -20
0 0 0
L2 <-> L3
L1 <-> L3 C2 <-> C3
pas II pas I
pas I
pas II pas III
det = 0
5
3. Cod in Limbajul C
#include<stdio.h>
#include<conio.h>
//citeste matricea
void citireMat(foat a[20][20], int n)
{
int i, j;
for(i=1;i<=n;i++)
{
if(i==1)
printf(\nIntroduceti prima linie: );
else printf(Introduceti a %d-a linie: , i);
for(j=1;j<=n;j++)
scanf(%f, &a[i][j]);
}
}
//afseaza matricea
void afsareMat(foat a[20][20], int n)
{
int i, j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(%.2f , a[i][j]);
printf(\n);
}
}
// verifca si schimba linia / coloana cu cel mai mare termen in modul
void verifcSchimb(foat a[20][20],int n, int pas, foat &det)
{
foat schimb[20], maxlin=0, maxcol=0, pivot;
int i, iMax, jMax;
pivot=a[pas][pas];
if(pivot<0)
pivot=pivot*-1;
/*Parcurge linia pe care se afa pivotul si retine valoarea cea mai valoare in modul in variabila maxlin si
coloana pe care se afa in jMax*/
for(i=pas+1; i<=n; i++)
if(a[pas][i]<0)
{
if(-1*a[pas][i]>maxlin)
{
maxlin=a[pas][i]*-1;
jMax=i;
}
}
else if(a[pas][i]>maxlin)
{
maxlin=a[pas][i];
jMax=i;
}
6
/*Parcurge coloana pe care se afa pivotul si retine valoarea cea mai valoare in modul in variabila maxcol si linia pe
care se afa in iMax*/
for(i=pas+1; i<=n; i++)
if(a[i][pas]<0)
{
if(-1*a[i][pas]>maxcol)
{
maxcol=a[i][pas]*-1;
iMax=i;
}
}
else if(a[i][pas]>maxcol)
{
maxcol=a[i][pas];
iMax=i;
}
printf(\n\t\t MAXIM LINIE:%.2f; MAXIM COLOANA:%.2f\n, maxlin,maxcol);
/*Daca pivotul este mai mic decat maximul coloanei si maximul coloanei mai mare decat maximul
liniei are loc interschimbare intre linia pivotului si linia iMax*/
if(pivot<maxcol && maxcol>maxlin)
{
printf(\t\t -----Interschimbam linia %d cu linia %d!-----\n, pas, iMax);
for(i=1;i<=n;i++)
{
schimb[i]=a[iMax][i];
a[iMax][i]=a[pas][i];
a[pas][i]=schimb[i];
}
det=det*(-1);
}
/*Altfel daca pivotul este mai mic decat maximul liniei si maximul coloanei mai mic decat
maximul liniei are loc interschimbare intre coloana pivotului si coloana jMax*/
else if(pivot<maxlin&&maxcol<=maxlin)
{
printf(\t\t-----Interschimbam coloana %d cu coloana %d!-----\n, pas,
jMax);
for(i=1;i<=n;i++)
{
schimb[i]=a[i][jMax];
a[i][jMax]=a[i][pas];
a[i][pas]=schimb[i];
}
det=det*(-1);
}
if(pivot<maxlin||pivot<maxcol)
{
printf(\nMatricea dupa interschimbare :\n\n);
afsareMat(a, n);
}
else printf(\t\t -------NU ARE LOC INTERSCHIMBARE!-------\n\n);
}
7
//functia de calcul
void pasGauss(foat a[20][20], int n, int pas, foat &det)
{
int i, j;
foat pivot;
pivot=a[pas][pas];
det=det*pivot;
for(i=pas+1;i<=n;i++)
for(j=pas+1;j<=n;j++)
if(pivot!=0)
a[i][j]=a[i][j]-(a[pas][j]*a[i][pas])/pivot; // are loc pasul
else break;
for (i=1 ; i<=n; i++)
if(pivot!=0)
a[pas][i]=a[pas][i]/pivot; // impartim linia pivotului la pivot
for(i=pas;i<=n;i++)
a[i+1][pas]=0; // elementele sub pivot iau valoarea 0
}
//functia principala
int main()
{
foat matSist[20][20], determinant=1;
int n;
//se citeste ordinul matricii si valorile acesteia
printf(ORDINUL MATRICII: );
scanf(%d, &n);
citireMat(matSist, n);
//se afseaza matricea initiala
printf(\nMatricea citita:\n\n);
afsareMat(matSist, n);
//apelez functiile de n ori pentru afarea determinantului
for(int pas=1;pas<=n;pas++)
{
verifcSchimb(matSist, n, pas, determinant);
printf(\n\t\t\t\t-----PASUL %d !----- \n\n, pas);
pasGauss(matSist, n, pas, determinant);
printf(\nMatricea dupa pasul %d:\n\n, pas);
afsareMat(matSist, n);
printf(\t\t\t\t DET -> %0.2f\n, determinant);
}
printf(\n\t\t\tDeterminantul matricii este : %0.2f, determinant);
printf(\n\t\tCodat de Jerca Vlad, gr. 152, anul I, sectia IT);
getch();
return 0;
}
8
4. Rularea programului
Exemplul 2.a.
9
Exemplul 2.b.