Documente Academic
Documente Profesional
Documente Cultură
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.
III.
Prezentarea lucrrii
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 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
56
Metode Numerice
n urma aplicrii acestui algoritm se ajunge la urmtoarea matrice superior triunghiular: 1 A(nmin)
=
) ) 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
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 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
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
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
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
x1 +
) 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 :=
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) =
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 *
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
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),
1 A(n)= 0 0
) ) 0 0 1 a (n,n +1 a (n,2 n n n
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
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
A :=
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