Sunteți pe pagina 1din 9

8

SISTEME DE ECUA
TII ALGEBRICE LINIARE

8.1 Introducere
Rezolvarea sistemelor de ecuatii liniare joaca un rol central n analiza numerica.

Metode directe algoritmi finiti, erori de rotunjire Gauss, Crout, Choleski,

Metode iterative procese infinite, erori de trunchiere Jacobi, Gauss-Seidel.

8.2 Metoda de eliminare a lui Gauss


Ideea de baza aducerea sistemului prin transformari elementare la o forma echivalenta,
cu matrice superior triunghiular a.
Transformarea sistemului faza elimin arii.
Rezolvarea sistemului cu matrice triunghiulara faza substitutiei inverse.

Exemplificare:

a11 x1 + a12 x2 + a13 x3 = b1 a11 a12 a13 x1 b1
a21 x1 + a22 x2 + a23 x3 = b2 sau a21 a22 a23 x2 = b2

a31 x1 + a32 x2 + a33 x3 = b3 , a31 a32 a33 x3 b3

Faza elimin arii:


Pasul 1: Eliminam x1 din toate ecuatiile sistemului, cu exceptia primei ecuatii.
mpartim prima linie la elementul pivot a11 .
Scadem prima ecuatie nmultita cu primul coeficient din celelalte ecuatii:
(1)
(1) (1) (1) (1) (1)

x1 + a12 x2 + a13 x3 = b1 1 a12 a13 x1 b
(1) (1) (1) (1) (1) 1(1)
a22 x2 + a23 x3 = b2 sau 0 a22 a23 x2 b2 .
=

(1) (1) (1) (1) (1) (1)
a32 x2 + a33 x3 = b3 , 0 a32 a33 x3 b3
cu (1)

a1j = a1j /a11 , j = 1, 2, 3

(1)
b1 = b1 /a11
(1) (1)

aij = aij ai1 a1j , j = 1, 2, 3, i = 2, 3

(1) (1)
bi = bi ai1 b1 .

Pasul 2: Eliminam x2 din ultima ecuatie.


(1) (1)
mpartim a doua ecuatie la elementul pivot a22 si o scadem nmultita cu a32 din ecuatia
a treia: (1)
(1) (1)
1 a12 a13 x1 b
(2) 1(2)
0 1 a23 x2 = b2 ,
(2) (2)
0 0 a33 x3 b3
cu (2) (1) (1)

a2j = a2j /a22 , j = 2, 3

(2) (1) (1)
b2 = b2 /a22
(2) (1) (1) (2)

aij = aij ai2 a2j , j = 2, 3, i = 3

(2) (1) (1) (2)
bi = bi ai2 b2 .

(2)
Pasul 3: mpartim cea de a treia ecuatie la elementul pivot a33 :
(1)
(1) (1)
1 a12 a13 x1 b1
(2)
0 1 a x = b(2)
23 2 2 ,
(3)
0 0 1 x3 b3
cu
(3) (2) (2)
b3 = b3 /a33 .

Faza substitutiei inverse:



(3)

x3 = b3
(2) (2)
x2 = b2 a23 x3

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

Calculul determinantului:
Datorita mpartirii succesive cu elementele pivot:
detA
detA(3) = (1) (2)
= 1,
a11 a22 a33
rezulta:
(1) (2)
detA = a11 a22 a33 .

2
Generalizare sistem de n ecuatii cu n necunoscute A = [aij ]nn , b = [bi ]n si
x = [xi ]n :
A x = b.
Faza elimin arii:
naintea pasului k (k = 1, 2, . . . n 1):
(1) (1) (1) (1)
(1)

1 a12 a1k a1k+1 a1n x1 b1
(2) (2) (2) (2)
0 1 a2k a2k+1 a2n x2 b2
. .. ... .. .. .. .. ..
.. . . . . . .

(k1) (k1) (k1) (k1)
0 0 akk akk+1 akn xk = bk .
(k1) (k1) (k1) (k1)
0 0 ak+1k ak+1k+1 ak+1n xk+1 bk+1

.. .. .. .. ... .. .. ..
. . . . . . .
(k1) (k1) (k1) (k1)
0 0 ank ank+1 ann xn bn

La pasul k se elimina xk din ecuatiile de sub ecuatia k:


(1) (1) (1) (1)
(1)

1 a12 a1k a1k+1 a1n x1 b1
(2)
0 1 a(2) (2)
a2k+1 a2n x2 (2)
b2
. .. ...
2k
.. .. .. .. ..
.. . . . . . .

(k) (k) (k)
0 0 1 akk+1 akn xk = bk .
(k) (k) (k)
0 0 0 ak+1k+1 ak+1n xk+1 bk+1

.. .. .. .. ... ..
. .. ..
. . . . . .
(k) (k) (k)
0 0 0 ank+1 ann xn bn

Noile elemente ale liniei pivot k:



(k)

akk = 1
(k) (k1) (k1)
akj = akj /akk , j = k + 1, . . . , n

(k) (k1) (k1)
bk = bk /akk .

Noile elemente ale liniilor de sub linia pivot:



(k)

aik = 0
(k) (k1) (k1) (k)
aij = aij aik akj , j = k + 1, . . . , n, i = k + 1, . . . , n

(k) (k1) (k1) (k)
bi = bi aik bk .

La pasul k se modifica doar elementele delimitate de linia si coloana k.


Nu trebuie considerat j = k, deoarece pe coloana pivot k se genereaza numai 1 sau 0.

3
(n1)
La pasul k = n se mparte ultima ecuatie la ultimul pivot, ann :

(1) (1) (1) (1) (1)
1 a12 a1k a1k+1 a1n x 1 b1
0 1 (2) (2) (2) (2)
a2k a2k+1 a2n
x2

b2

.. .. ... .. .. .. ... ..
. . . .
. .
(k)
0 0 (k)
1 akk+1 akn xk = (k)
bk ,

(k+1) (k+1)
0 0 0 1 ak+1n xk+1
bk+1

. .. .. .. ...
.. .. ..
.. . . . . . .
(n)
0 0 0 0 1 xn bn
sau
A(n) x = b(n) .
Faza substitutiei inverse:
(n)

xn = bn
(k)
X
n
(k)

xk = bk aki xi , k = n 1, . . . , 1.
i=k+1

Calculul determinantului:
Datorita mpartirii succesive cu elementele pivot:
detA
detA(n) = (1) (n1)
=1
a11 a22 ann
rezulta:
(1) (n1)
detA = a11 a22 ann .

a B = [bij ]nm si X = [xij ]nm :


Generalizare ecuatie matricial
AX=B

Faza elimin
arii (k = 1, . . . , n):
(k) (k1) (k1)

akj = akj /akk , j = k + 1, . . . , n

b(k) (k1) (k1)
kj = bkj /akk , j = 1, . . . , m
(k) (k1) (k1) (k)
aij
= aij aik akj , j = k + 1, . . . , n, i = k + 1, . . . , n,

(k) (k1) (k1) (k)
bij = bij aik bkj , j = 1, . . . , m.
Faza substitutiei inverse:
(n)

xnj = bnj , j n= 1, . . . , m
(k)
X (k)

xkj = bkj aki xij , j = 1, . . . , m, k = n 1, . . . , 1.
i=k+1

Inversarea matricilor ca matrice a termenilor liberi se ia matricea unitate:


B = En [ij ]nn X = A1 .

4
Pivotarea rearanjarea liniilor pt. a avea la fiecare pas al eliminarii un pivot maxim.
Se minimizeaza erorile de rotunjire si se evita mpartirile cu 0
(k1)
pivotarea partiala pe coloane la pasul k se cauta elementul maxim alk pe
coloana k si liniile l k si se interschimba liniile l si k.
metoda elementului principal se cauta elementul pivot pe toate liniile si coloanele
matricii A(k1) pe care nu s-a pivotat.

/*=========================================================================*/
int Gauss(float **a, float **b, int n, int m, float *det)
/*---------------------------------------------------------------------------
Rezolva ecuatia matriciala a x = b prin metoda Gauss, inlocuind la iesire b
cu x (utilizeaza pivotarea partiala pe coloane).
a - matricea (n x n) a sistemului
b - matricea (n x m) a termenilor liberi; solutia x la iesire
*det - determinantul matricii sistemului (iesire)
Returneaza indicele de eroare: 0 - executie normala
1 - matrice a singulara
---------------------------------------------------------------------------*/
{
#define Swap(a,b) { t = a; a = b; b = t; }
float amax, sum, t;
int i, imax, j, k;
/* ELIMINARE */
*det = 1.0;
for (k=1; k<=n; k++) {
amax = 0.0; /* determina linia pivot avand */
for (i=k; i<=n; i++) /* elementul maxim pe coloana k */
if (amax < fabs(a[i][k])) {amax = fabs(a[i][k]); imax = i;}
if (amax == 0.0)
{printf("Gauss: matrice singulara !\n"); return 1;}
/* interschimba liniile imax si k */
if (imax != k) { /* pt. a pune pivotul pe diagonala */
*det = -(*det);
for (j=k; j<=n; j++) Swap(a[imax][j],a[k][j])
for (j=1; j<=m; j++) Swap(b[imax][j],b[k][j])
}
*det *= a[k][k]; /* inmulteste determinantul cu pivotul */
t = 1.0/a[k][k]; /* imparte linia pivot */
for (j=k+1; j<=n; j++) a[k][j] *= t;
for (j= 1; j<=m; j++) b[k][j] *= t;
for (i=k+1; i<=n; i++) { /* reduce liniile nepivot */
t = a[i][k];
for (j=k+1; j<=n; j++) a[i][j] -= a[k][j]*t;
for (j= 1; j<=m; j++) b[i][j] -= b[k][j]*t;
}
}
/* SUBSTITUTIE INVERSA */
for (k=n-1; k>=1; k--)
for (j=1; j<=m; j++) {
sum = b[k][j];
for (i=k+1; i<=n; i++) sum -= a[k][i]*b[i][j];
b[k][j] = sum;
}
return 0;
}

5
8.7 Sisteme de ecuatii liniare cu matrice tridiagonala
Matrici tridiagonale matrici rare cu majoritatea elementelor extradiagonale 0.
Metodele generale nu sunt eficiente.
n mod tipic prin discretizarea ecuatiilor diferentiale prin scheme cu diferente finite.

Fie sistemul:
A x = d,
sau
b1 c1 x1 d1
a2 b2 c2 0 x2 d2
.. ..
... ... ...
. .

ai1 bi1 ci1 xi1 di1
= .
ai bi ci xi di
. . ... . .
.. .. .. ..

0 an1 bn1 cn1 xn1 dn1
an bn xn dn
Se factorizeaza A:
A = L U,
cu

1 1 1
2 2 0 1 2 0

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


i1 i1 1 i1
LU=
i i 1 i
... ... ... ...


0 n1 n1 0 1 n1
n n 1

Prin identificare:

b1 = 1 , c1 = 1 1
ai = i , bi = i i1 + i , ci = i i , i = 2, 3, . . . , n 1

an = n , bn = n n1 + n .

Elementele matricilor L si U (presupunnd i 6= 0):

i = ai , i = 2, 3, . . . , n,

1 = b1 , 1 = c1 / 1
i = bi ai i1 , i = ci / i , i = 2, 3, . . . , n 1

n = bn an n1 .
Diagonala matricii L estei identica cu diagonala matricii A.

6
Sistemul initial devine :

Ly = d
L (U x) = d
U x = y.
sau
1 y1 d1
a2 2 0 y2 d2
.. ..
. .. . ..
. .

ai1 i1 yi1 di1
=
ai i yi di
... ... . .
.. ..

0 an1 n1 yn1 dn1
an n yn dn
si
1 1 x1 y1
1 2 0 x2 y2
.. ..
. .
.. ..
. .

1 i1 xi1 yi1
= .
1 i xi yi
... ... . .
.. ..

0 1 n1 xn1 yn1
1 xn yn

Prin identificarea elementelor:



y1 = d1 / 1
yi = (di ai yi1 )/ i , i = 2, 3, . . . , n

xn = yn
xi = yi i xi+1 , i = n 1, . . . , 1.

Faza factoriz
arii:

1 = b1 , 1 = c1 / 1 , y1 = d1 / 1
i = bi ai i1 , i = ci / i , yi = (di ai yi1 )/ i

i = 2, 3, . . . , n 1.

Faza substitutiei inverse:



xn = (dn an yn1 )/(bn an n1 )
xi = yi i xi+1 , i = n 1, . . . , 1.

n implementare sunt suficiente patru tablouri a, b, c si d, asociate cu ai , bi , ci si di .


Elementele i pot fi stocate n tabloul c, peste marimile ci .
Pentru di , yi si x se poate utiliza acelasi tablou, d, care n final contine solutia sistemului.

7
/*=========================================================================*/
void TriDiag(float a[], float b[], float c[], float d[], int n)
/*---------------------------------------------------------------------------
Rezolva un sistem liniar cu matrice tridiagonala prin factorizare
a[] - codiagonala inferioara (i=2..n)
b[] - diagonala principala
c[] - codiagonala superioara (i=1..n-1)
d[] - vectorul termenilor liberi; la iesire contine solutia x
n - ordinul sistemului
---------------------------------------------------------------------------*/
{
float beta;
int i; /* factorizare */
c[1] /= b[1]; d[1] /= b[1];
for (i=2; i<=(n-1); i++) {
beta = b[i] - a[i]*c[i-1];
c[i] /= beta;
d[i] = (d[i] - a[i]*d[i-1])/beta;
}
d[n] = (d[n] - a[n]*d[n-1])/(b[n] - a[n]*c[n-1]);
/* substitutie inversa */
for (i=(n-1); i>=1; i--) d[i] -= c[i]*d[i+1];
}

Nu se efectueaza pivotare dominanta diagonala a matricii sistemului asigura succesul.

8
Bibliography

[1] Gh. Dodescu, Metode numerice n algebra


, Editura tehnica, Bucuresti, 1979).
[2] B.P. Demidovich si I.A. Maron, Computational Mathematics (MIR Publishers,
Moskow, 1981).

[3] R.L. Burden si J.D. Faires, Numerical Analysis, Third Edition (Prindle, Weber &
Schmidt, Boston, 1985).

[4] W.H. Press, S.A. Teukolsky, W.T. Vetterling si B.P. Flannery, Numerical Recipes in
C: The Art of Scientific Computing, Second Edition (Cambridge University Press,
Cambridge, 1992).