Sunteți pe pagina 1din 14

Metode Numerice

Lucrarea de laborator nr. 5

I.

Scopul lucrrii
Aplica ii ale eliminrii gaussiene cu pivotare par ial: - calculul determinantului unei matrice - rezolvarea sistemelor liniare - calculul inversei unei matrice

II.
1. 2. 3. 4.

Con inutul lucrrii


Prezentarea metodei de eliminare Gauss cu pivotare par ial Calculul determinantului unei matrice procedura MAPLE. Rezolvarea sistemelor liniare compatibil determinate cu n ecua ii i n necunoscute - procedura MAPLE. Calculul inversei unei matrice - procedura MAPLE.

III.

Prezentarea lucrrii

III. 1. Prezentarea metodei de eliminare Gauss cu pivotare par ial


Se consider o matrice AMn,m(R). Eliminarea gaussian urmrete transformarea matricei A ntr-o matrice superior triunghiular B (o matrice cu proprietatea c bij = 0 pentru orice i<j). Trecerea de la matricea A la matricea B se realizeaz prin transformri elementare. La baza metodei st urmtorul procedeu: prima linie este folosit pentru anularea coeficien ilor de pe prima coloan din celelalte n-1 linii. a doua linie este utilizat pentru anularea coeficien ilor de pe a doua coloan din ultimele n-2 linii, .a.m.d. Trecerea de la un pas la altul se face aplicnd regula dreptunghiului (pivotului). Pentru a ob ine stabilitatea numeric a algoritmului, se alege 55

Mdlina Roxana Buneci

drept pivot de la pasul k elementul maxim n modul din coloana k subdiagonal a lui A, i se permut linia k cu linia pe care se gsete pivotul. Aceast strategie de permutare se numete pivotare par ial. Performan e de stabilitate numeric relativ mai bune se ob in dac se alege drept pivotul la pasul k elementul maxim n modul din submatricea delimitat de ultimele n-k linii, i se permut coloana k cu coloana pivotului i linia k cu linia pivotului. Aceast strategie de pivotare se numete pivotare complet. Prezentm n continuare algoritmul de eliminare Gauss cu pivotare par ial. Trecerea de la matricea A la matricea superior triunghiular se realizeaz n nmin pai, unde nmin=min{n,m}: A(0) A(1) A(nmin),

unde A(nmin) are form superior triunghiular, iar A(0) =A. Pentru a se trece de la A(k)A(k+1): Se determin pivotul de la pasul k; acesta este primul element ai,k de pe coloana k cu proprietatea |ai,k |=max{|aj,k |, kjn} Astfel: Se permut liniile i cu k; Se aplic regula dreptunghiului (pivotului) cu pivotul ak,k.
( k +1)

elementele de pe linia pivotului se mpart la pivot: a k ,i = a ki /a kk , i=k,k+1,m


(k ) (k )

elementele de pe coloana pivotului, cu excep ia pivotului, se nlocuiesc cu 0. ai k=0, i= k+1, k+2,n elementele din submatricea delimitat de ultimele n-k linii se transform cu regula dreptunghiului:

a(k ) kk
(k a ik ) ( a ijk +1) =

a(k )
kj ( a ijk )
( (k a ijk ) a ( k ) a ( k ) a ik ) kk kj

a(k ) kk k+1in, k+1j m

56

Metode Numerice

n urma aplicrii acestui algoritm se ajunge la urmtoarea matrice superior triunghiular: 1 A(nmin)
=

( ) () ( ) ( ) ( ) a112 a113 a11n a11n +1 a11m , , , , ,

) ) ) ) 1 a (23 a ( 2n a (2n +1 a (2m 2, 2, 2, 2,

) ) 0 0 0 1 a (n,n +1 a (n,m n n (dac mn). Urmtoarea procedur MAPLE are drept parametri matricea B, numrul de linii n, numrul de coloane m, i ntoarce matricea superior triunghiular ob inut prin aplicarea algoritmului de eliminare Gauss cu pivotare par ial asupra matricei B. Matricea A se ini ializeaz cu B, i fiecare din matricele intermediare A(k) sunt afiate. Pentru memorarea acestora se folosete aceeai matrice A. Modificarea coeficien ilor de la pasul k la pasul k+1 este dat de formulele: a k,i ak,i : = , i =k+1,,m; ak,k : = 1. a k,k ai,j : = ai,j ai,k ak,j, i=k+1,,n, j=k+1,,m. ai,k : = 0, i =k+1,,n. > elimpp := proc(b, n, m) local a, x, i, j, k, aux; a := b; if n<=m then nmin:=n else nmin:=m fi; for k to nmin do aux := abs(a[k, k]); i := k; for j from k + 1 to n do if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi od; for j from k to m do aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od; 57

Mdlina Roxana Buneci

if a[k, k] <> 0 then for j from k + 1 to m do a[k, j] := a[k, j]/a[k, k] od; a[k, k] := 1; for i from k + 1 to n do for j from k + 1 to m do a[i, j] := a[i, j] - a[k, j]*a[i, k] od od; for i from k + 1 to n do a[i, k] := 0 od; print(a) fi; od; print(`Matricea superior triunghiulara obtinuta`); RETURN(evalm(a)) end; >A:=matrix(3,3,[[1,1,1],[1,2,3],[2,1,2]]); 1 1 2 1 2 1 1 3 2

A :=

> elimpp(A,3,3);

1 0 0

1/2 3/2 1/2

1 2 0

1 0 0

1/2 1 0

1 4/3 -2/3

1 0 0 58

1/2 1 0

1 4/3 1

Metode Numerice

Matricea superior triunghiulara obtinuta 1 0 0 1/2 1 0 1 4/3 1

Comanda matrix face parte din pachetul linalg, deci nainte de utilizare trebuie ncrcat acest pachet, printr-o comanda with(linalg), sau alternativ trebuie specificat pachetul naintea comenzii. Comanda gausselim din acelai pachet aplic algoritmul de eliminare Gauss (fr pivotare) asupra matricei de intrare. n exemplul urmtor presupunem c A este matricea definit anterior. >gausselim(A); 1 0 0 1 1 0 1 2 2

III.2. Calculul determinantului unei matrice procedura MAPLE.


Pentru calculul determinantului unei matrice A se poate folosi metoda de eliminare Gauss, inndu-se seama c determinantul unei matrice nu se modific dac asupra matricei se efectueaz transformri elementare. Determinantul este produsul elementelor

) a (k,k (nainte de mpr ire). Dac se k

folosete pivotare, trebuie avut n vedere faptul c prin permutarea a dou linii semnul determinantului se schimb. Procedura determinant de mai jos are drept parametri matricea B i numrul de linii ale ei, i ntoarce determinantul matricei. Pentru transformarea matricei B ntr-o matrice superior triunghiular se folosete algoritmul de eliminare Gauss cu pivotare par ial. >determinant := proc(b, n) local a, d, i, j, k, aux; a := b; d := 1; for k to n do 59

Mdlina Roxana Buneci

aux := abs(a[k, k]); i := k; for j from k + 1 to n - 1 do if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi od; if k <> i then for j from k to n do aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od; d := -d fi; d := d*a[k, k]; if a[k, k] = 0 then RETURN(0) fi; for j from k + 1 to n do a[k, j] := a[k, j]/a[k, k] od; a[k, k] := 1; for i from k + 1 to n do for j from k + 1 to n do a[i, j] := a[i, j] - a[k, j]*a[i, k] od od; for i from k + 1 to n do a[i, k] := 0 od od; d := d*a[n, n]; RETURN(d) end;

>A:=matrix(3,3,[[1,1,1],[1,8,3],[12,1,2]]); 1 1 12 1 28 1 2 1 3

A :=

> determinant(A,3); 60

Metode Numerice

-48 >B:=matrix(4,4,[6,5,8,3,90,1,2,3,4,5,7,4,8,2,1,9]);

B :=

6 90 4 8

5 1 5 2

8 2 7 1

3 3 4 9

> determinant(B,4); 2324 Pentru calculul determinantului unei matrice se poate folosi i comanda det din pachetul linalg. n exemplele urmtoare A i B sunt matricele definite mai sus. > det(A); -48 > det(B); 2324

III.3. Rezolvarea sistemelor liniare compatibil determinate cu n ecua ii i n necunoscute - procedura MAPLE.
Considerm sistemul cu n ecua ii i n necunoscute. Ax = b, AMn,n(R) nesingular Pentru rezolvarea acestui sistem vom aplica algoritmul de eliminare Gauss cu pivotarea par ial asupra matricei extinse

A = (A | b ) . Vom nota

elementele matricei A tot cu ai,j . Astfel ai,n+1= bi pentru orice i=1,2,..n. La primul pas algoritmul presupune eliminarea necunoscutei x1 din ultimele n-1 ecua ii. La al doilea pas se elimin necunoscuta x2 din ultimele n-2 ecua ii, .a.m.d. Ca urmare a aplicrii algoritmului se ob ine sistemul echivalent:

61

Mdlina Roxana Buneci

x1 +

( ) () ( ) ( ) a112 x2 + a113 x3 + a11n xn= a11n +1 , , , ,

) x2 + a (23 x3+ 2,

) ) a ( 2n xn = a (2n +1 2, 2,

) xn = a (n,n +1 n

Rezolvarea acestui sistem se poate face foarte uor de la sfrit spre nceput:
) xn = a (n,n +1 n
) x i = a i(i,n +1
n

a i(i, )j x j
j=i +1

Procedura rezsist de mai jos ntoarce solu ia unui sistem liniar cu n ecua ii i n necunoscute. Parametri procedurii sunt numrul de ecua ii i matricea extins a sistemului. >rezsist := proc(n, s) local a, x, i, j, k, aux; x := vector(n); for i to n do for j to n+1 do a[i,j]:= s[i,j] od od for k to n do aux := abs(a[k, k]); i := k; for j from k + 1 to n do if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi od; for j from k to n + 1 do aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od; 62

Metode Numerice

if a[k, k] = 0 then print(`Matrice singulara`); print(a); RETURN fi; for j from k + 1 to n + 1 do a[k, j] := a[k, j]/a[k, k] od; a[k, k] := 1; for i from k + 1 to n do for j from k + 1 to n + 1 do a[i, j] := a[i, j] - a[k, j]*a[i, k] od od; for i from k + 1 to n do a[i, k] := 0 od od; x[n] := a[n, n + 1]; for i from n - 1 by -1 to 1 do x[i] := a[i, n + 1]; for j from i + 1 to n do x[i] := x[i] - a[i, j]*x[j] od od; RETURN(evalm(x)) end; Utilizm procedura se mai sus pentru rezolvarea sistemului x2 + x3 = 3 x1 + x1 + 2x2 + 3x3 = 6 2x1 + x2 + 2x3 = 6 >S:=matrix(3,4,[[1,1,1,3],[1,2,3,6],[2,1,2,6]]); 1 1 2 1 2 1 1 3 2 3 6 6

S :=

> rezsist(3,S); [3/2, 0, 3/2] Deci solu ia sistemului este: x1=3/2 63

Mdlina Roxana Buneci

x2=0 x3=3/2. Probleme propuse 1) Considerm sistemul Ax = b, unde A= i b= 1 0 Solu ia corect a sistemului este x1 x2 = 885.781 -887.112 888.445 887.112 887.112 885.781

Utiliznd procedura rezsist rezultatul ob inut este diferit. Explica i! Indica ie: calcula i factorul de condi ionare al matricei A, cond(A) =

A A 1 i demonstra i astfel c sistemul este ru condi ionat


2) Considerm sistemul Ax = b, unde A= i b = 2.001 2 Evident solu ia corect a sistemului este x1 x2 = 1 1 1 1 1.001 1

Dac se consider vectorul y y1 y2 = 2 0

se observ c b - Ay = 0.001 0 64

Metode Numerice

Deci y aparent verific sistemul dei este diferit de x. De ce? Utiliza i rela ia

x* x x

b unde x este solu ia exact a sistemului, iar x* este solu ia aproximativ calculat.

cond(A)

b Ax *

III.4. Calculul inversei unei matrice - procedura MAPLE.


Dac AMn,n (R). A inversabil dac i numai dac exist o matrice B Mn,n (R) astfel nct AB=BA=In, unde 1 0 0 0 ---------- 0 1 0 ---------- 0 -----------------------------0 0 0 ---------- 1

In=

Se tie c A este inversabil dac i numai dac are determinantul nenul. Notm: 0 0 1 0 0 vectorul k al bazei canonice din Rn. Pentru fiecare k (k=1,2,,n) considerm sistemul Ax=ek. Solu ia acestui sistem reprezint chiar coloana k a matricei A-1. Astfel pentru aflarea lui A-1 este necesar s rezolvm n sisteme de ecua ii liniare Ax=ek, k=1,2,,n. Aceste sisteme pot fi rezolvate utiliznd algoritmul de eliminare al lui Gauss. Pentru a micora volumul de calcul vom aplica algoritmul asupra

ek =

65

Mdlina Roxana Buneci

matricei ob inute prin concatenarea la matricea A a coloanelor bazei canonice din Rn. Coeficien ii matricei sunt

A = (A/e1/e2------en)
aij, dac 1 i, j n ai,n+k=ik, dac 1 i, k n ik= 1, i=k 0, ik.

unde

Prin aplicarea algoritmului de eliminare Gauss cu pivotare par ial asupra lui A se ob ine un ir de matrice A(0) A(1) A(n),

unde A(0)= A , iar A(n) are urmtoarea form superior triunghiular:


( ) () ( ) ( ) ( ) a112 a113 a11n a11n +1 a112 n , , , , ,

1 A(n)= 0 0

) ) ) ) a (23 a ( 2n a (22,n +1 a (22,2n 2, 2,

) ) 0 0 1 a (n,n +1 a (n,2 n n n

Dac B=A-1, atunci coeficien ii lui B pot fi determina i cu formulele:


) bn,k= a ( nn + k , 1 k n n, ) bi,k= a i(,in + k -

ai(,ij) bi, j ,
j=i +1

1 i n-1, 1 k n

Procedura inversa de mai jos ntoarce inversa matricei indicat drept al doilea parametru. Primul parametru reprezint numrul de linii al matricei. >inversa := proc(n, s) local a, b, i, j, k, aux; b := matrix(n, n); a := matrix(n, 2*n); for i to n do 66

Metode Numerice

for j to n do a[i, j] := s[i, j] od od; for i to n do for j to n do a[i, j + n] := 0 od od; for i to n do a[i, i + n] := 1 od; for k to n do aux := abs(a[k, k]); i := k; for j from k + 1 to n do if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi od; for j from k to 2*n do aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od; if a[k, k] = 0 then print(`Matrice singulara`); print(a); RETURN fi; for j from k + 1 to 2*n do a[k, j] := a[k, j]/a[k, k] od; a[k, k] := 1; for i from k + 1 to n do for j from k + 1 to 2*n do a[i, j] := a[i, j] - a[k, j]*a[i, k] od od; for i from k + 1 to n do a[i, k] := 0 od od; for i to n do 67

Mdlina Roxana Buneci

b[n, i] := a[n, i + n] od; for k to n do for i from n - 1 by -1 to 1 do b[i, k] := a[i, n + k]; for j from i + 1 to n do b[i, k] := b[i, k] a[i, j]*b[j, k] od od od; RETURN(evalm(b)) end; Calculul inversei matricei 1 1 2 1 2 1 1 3 2

se realizeaz cu ajutorul comenzilor >A:=matrix(3,3,[[1,1,1],[1,2,3],[2,1,2]]); 1 1 2 1 2 1 1 3 2

A :=

> inversa(3,A); 1/2 2 -3/2 -1/2 0 1/2 1/2 -1 1/2

Comanda inverse din pachetul linalg calculeaz de asemenea inversa unei matrice. n exemplul urmtor presupunem c o aplicm asupra aceleai matrice A. > inverse(A); 1/2 2 -3/2 68 -1/2 0 1/2 1/2 -1 1/2

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