Documente Academic
Documente Profesional
Documente Cultură
FMNL 05
FMNL 05
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
A(1) A(nmin),
Astfel:
-
Se permut liniile i cu k;
Se aplic regula dreptunghiului (pivotului) cu pivotul ak,k.
a k ,i
-
(k )
(k )
= a ki /a kk , i=k,k+1,m
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
A(nmin)
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
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
1/2
1
0
1
4/3
1
1
1
0
1
2
2
>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
A = (A | b ) . Vom nota
61
x1 +
a (22,n) xn = a (22,n) +1
xn = a (nn,n) +1
x i = a i(i,n) +1
a i(i, )j x j
j=i +1
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
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
1
1
1.001
1
i
b = 2.001
2
Evident soluia corect a sistemului este
x1
x2
1
1
2
0
se observ c
b - Ay = 0.001
0
64
Metode Numerice
x* x
x
cond(A)
b Ax *
b
unde x este soluia exact a sistemului, iar x* este soluia
aproximativ calculat.
In=
1
0
0
0 ---------- 0
1
0 ---------- 0
-----------------------------0
0
0 ---------- 1
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
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.
A(n),
A(n)=
0
0 1 a (nn,n) +1 a (nn,2) n
ai(,ij) bi, j ,
1 i n-1, 1 k n
j=i +1
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 :=
1
2
1
1
3
2
> inversa(3,A);
1/2
2
-3/2
-1/2
0
1/2
1/2
-1
1/2
-1/2
0
1/2
1/2
-1
1/2