Sunteți pe pagina 1din 14

Metode Numerice

Lucrarea de laborator nr. 5

I.

Scopul lucrrii
Aplicaii ale eliminrii gaussiene cu pivotare parial:
- calculul determinantului unei matrice
- rezolvarea sistemelor liniare
- calculul inversei unei matrice

II.
1.
2.
3.
4.

III.

Coninutul lucrrii
Prezentarea metodei de eliminare Gauss cu pivotare parial
Calculul determinantului unei matrice procedura MAPLE.
Rezolvarea sistemelor liniare compatibil determinate cu n ecuaii i n
necunoscute - procedura MAPLE.
Calculul inversei unei matrice - procedura MAPLE.

Prezentarea lucrrii

III. 1. Prezentarea metodei de eliminare Gauss cu pivotare


parial
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 coeficienilor de pe
prima coloan din celelalte n-1 linii.
a doua linie este utilizat pentru anularea coeficienilor 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 obine 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 parial. Performane de
stabilitate numeric relativ mai bune se obin 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 parial. 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.

elementele de pe linia pivotului se mpart la pivot:


( k +1)

a k ,i
-

(k )

(k )

= a ki /a kk , i=k,k+1,m

elementele de pe coloana pivotului, cu excepia 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 (kkk )
(k )
a ik

a ij( k +1) =

a(k )
kj

a ij( k )
(k )
a ij( k ) a (kkk ) a (kjk ) a ik

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

56

Metode Numerice

n urma aplicrii acestui algoritm se ajunge la urmtoarea matrice


superior triunghiular:

A(nmin)

a1(1,2) a1(1,3) a1(1,n) a1(1,n) +1 a1(1,m)

1 a (22,3) a (22,n) a (22,n) +1 a (22,m)


0
0
0 1 a (nn,n) +1 a (nn,m)
(dac mn).
Urmtoarea procedur MAPLE are drept parametri matricea B,
numrul de linii n, numrul de coloane m, i ntoarce matricea superior
triunghiular obinut prin aplicarea algoritmului de eliminare Gauss cu
pivotare parial asupra matricei B. Matricea A se iniializeaz cu B, i fiecare
din matricele intermediare A(k) sunt afiate. Pentru memorarea acestora se
folosete aceeai matrice A. Modificarea coeficienilor 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]]);

A :=

1
1
2

1
2
1

1
3
2

> elimpp(A,3,3);

1
0
0

58

1/2
3/2
1/2

1
2
0

1
0
0

1/2
1
0

1
4/3
-2/3

1
0
0

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 (kk,k) (nainte de mprire). Dac se

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
parial.
>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]]);

A :=

1
1
12

> determinant(A,3);
60

1
28
1

1
3
2

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 ecuaii i n necunoscute - procedura MAPLE.
Considerm sistemul cu n ecuaii i n necunoscute.
Ax = b, AMn,n(R) nesingular
Pentru rezolvarea acestui sistem vom aplica algoritmul de eliminare
Gauss cu pivotarea parial 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 ecuaii. La al doilea pas se elimin necunoscuta x2 din ultimele
n-2 ecuaii, .a.m.d. Ca urmare a aplicrii algoritmului se obine sistemul
echivalent:

61

Mdlina Roxana Buneci

x1 +

a1(1,2) x2 + a1(1,3) x3 + a1(1,n) xn= a1(1,n) +1


x2 + a (22,3) x3+

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

xn = a (nn,n) +1

Rezolvarea acestui sistem se poate face foarte uor de la sfrit spre


nceput:
xn = a (nn,n) +1

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

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

Procedura rezsist de mai jos ntoarce soluia unui sistem liniar cu n


ecuaii i n necunoscute. Parametri procedurii sunt numrul de ecuaii 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]]);

S :=

1
1
2

1
2
1

1
3
2

3
6
6

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

Mdlina Roxana Buneci

x2=0
x3=3/2.
Probleme propuse
1) Considerm sistemul Ax = b, unde
A=

888.445
887.112

887.112
885.781

i
b= 1
0
Soluia corect a sistemului este
x1
x2

885.781
-887.112

Utiliznd procedura rezsist rezultatul obinut este diferit. Explicai!


Indicaie: calculai factorul de condiionare al matricei A, cond(A) =

A A 1 i demonstrai astfel c sistemul este ru condiionat


2) Considerm sistemul Ax = b, unde
A=

1
1

1.001
1

i
b = 2.001
2
Evident soluia corect a sistemului este
x1
x2

1
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?


Utilizai relaia

x* x
x

cond(A)

b Ax *

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

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

In=

1
0

0
0 ---------- 0
1
0 ---------- 0
-----------------------------0
0
0 ---------- 1

Se tie c A este inversabil dac i numai dac are determinantul nenul.


Notm:
0

ek =

0
1
0

0
vectorul k al bazei canonice din Rn.
Pentru fiecare k (k=1,2,,n) considerm sistemul Ax=ek. Soluia
acestui sistem reprezint chiar coloana k a matricei A-1. Astfel pentru aflarea
lui A-1 este necesar s rezolvm n sisteme de ecuaii 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

65

Mdlina Roxana Buneci

matricei obinute prin concatenarea la matricea A a coloanelor bazei canonice


din Rn. Coeficienii matricei

A = (A/e1/e2------en)

sunt

unde

aij, dac 1 i, j n
ai,n+k=ik, dac 1 i, k n
ik=

1, i=k
0, ik.

Prin aplicarea algoritmului de eliminare Gauss cu pivotare parial


asupra lui A se obine un ir de matrice
A(0) A(1)

A(n),

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

A(n)=

a1(1,2) a1(1,3) a1(1,n) a1(1,n) +1 a1(1,2) n

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


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

Dac B=A-1, atunci coeficienii lui B pot fi determinai cu formulele:


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

ai(,ij) bi, j ,

1 i n-1, 1 k n

j=i +1

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

A :=

1
2
1

1
3
2

> 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