View
13
Download
0
Category
Preview:
Citation preview
Metode Numerice - Lucrarea de laborator 4
1
Lucrarea de laborator nr. 4
I. Scopul lucrării
- Aplicații ale eliminării gaussiene cu pivotare parțială la rezolvarea sistemelor
liniare compatibil determinate
- Implementarea în Maple a unei metode iterative de rezolvare a unui sistem
liniar.
II. Conținutul lucrării
1. Prezentarea metodei de eliminare Gauss cu pivotare parțială
2. Rezolvarea sistemelor liniare compatibil determinate cu n ecuații și n necunoscute prin
metode directe - procedura MAPLE.
3. Metode iterative de rezolvare a sistemelor liniare: metoda lui Jacobi
III. Prezentarea lucrării
III. 1. Prezentarea metodei de eliminare Gauss cu pivotare parțială
Se consideră o matrice AMn,m(R). Eliminarea gaussiană urmărește
transformarea matricei A într-o matrice superior triunghiulară S (o matrice cu
proprietatea că bij = 0 pentru orice i<j). Trecerea de la matricea A la matricea S se
realizează prin transformări elementare. La baza metodei stă următorul 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 aplicând regula dreptunghiului (pivotului).
Pentru a obține stabilitatea numerică a algoritmului, se alege 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 găsește pivotul. Această strategie de permutare se numește 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
Mădălina Roxana Buneci Metode Numerice –Laborator
2
ultimele n-k linii, și se permută coloana k cu coloana pivotului și linia k cu linia
pivotului. Această strategie de pivotare se numește pivotare completă. Prezentăm în
continuare algoritmul de eliminare Gauss cu pivotare parțială. Trecerea de la matricea
A la matricea superior triunghiulară se realizează în nmin pași, 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 k
k,ia de
pe coloana k cu proprietatea
| k
k,ia |=max{| k
k, ja |, kjn}
Se permută liniile i cu k;
Se aplică regula dreptunghiului (pivotului) cu pivotul k
k,ka . Astfel:
elementele de pe linia pivotului se împart la pivot:
a)1k(
i,k
=
k
k,i
k
k,k
a
a, i=k,k+1,…m
elementele subdiagonale de pe coloana pivotului se înlocuiesc cu
0.
1k
ika =0, i= k+1, k+2,…n
elementele din submatricea delimitată de ultimele n-k linii și de
ultimele n-k coloane se transformă cu regula dreptunghiului:
k j
k (k)k,ka
(k)k, ja
i (k)i,ka
(k)i, ja
Metode Numerice - Lucrarea de laborator 4
3
k 1
i, ja
=
(k) (k) (k) (k)i, j k,k k,j i,k
(k)k,k
a a a a
a
, k+1 i n, k+1 j m.
În urma aplicării acestui algoritm se ajunge la următoarea matrice superior
triunghiulară:
1 a)1(2,1 a
)1(3,1 a )1(
n,1 a)1(
1n,1 a)1(m,1
A(nmin) = 0 1
a23,2 a )2(
n,2
a2
1n,2
a2m,2
0 0 0 1 a
n1n,n
an
m,n
(dacă m n).
Considerăm 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 b|AA . 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.
În cazul acestui algoritm pentru fiecare k se efectuează n+1-k + (n+1-k)(n-k) = (n+1-
k)2 operații elementare (prin operație elementară înțelegând aici o operație în virgulă
mobilă de forma ax + b, sau o împărțire) . Deci algoritmul necesită
Nop(n) = n 1
2
k 1
n 1 k
=n
2
j 2
j
= n n 1 2n 1
6
- 1
operații elementare. Deci Nop(n) ~ 3
n 3
(sau Nop(n) O(n3) ).
Ca urmare a aplicării algoritmului se obține sistemul echivalent:
Mădălina Roxana Buneci Metode Numerice –Laborator
4
x1 + a)1(2,1 x2 + a
)1(3,1 x3 + a )1(
n,1 xn = a)1(
1n,1
x2 + a
23,2 x3+ a )2(
n,2 xn = a
21n,2
xn = a
n1n,n
Rezolvarea acestui sistem se poate face foarte ușor de la sfârșit spre început:
xn = a
n1n,n
n
1ij
jij,i
i1n,ii xaax
III.2. Rezolvarea sistemelor liniare compatibil determinate cu n ecuații și
n necunoscute prin metode directe- procedura MAPLE.
Considerăm 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 b|AA . Vom nota elementele matricei
A tot cu ai,j . Astfel ai,n+1= bi pentru orice i=1,2,..n.
Procedura rezsist de mai jos întoarce soluția unui sistem liniar cu n ecuații și n
necunoscute. Parametri procedurii sunt matricea sistemului și vectorul termenilor liberi
> rezlin:=proc(A,b)
local a,x,n,i,j,k,aux;
uses linalg;
n:=rowdim(A);
a:=matrix(n,n+1);
for i from 1 to n do
for j from 1 to n do a[i,j]:=A[i,j] end do;
a[i,n+1]:=b[i] end do;
for k from 1 to n do i:=k;aux:=abs(a[k,k]);
for j from k+1 to n do
if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j end if end do;
if i>k then for j from k to n+1 do
Metode Numerice - Lucrarea de laborator 4
5
aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od end if;
if a[k,k]=0 then print(`matrice singulara`); return NULL end if;
for j from k+1 to n+1 do a[k,j]:=a[k,j]/a[k,k] end do;
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] end do
end do;
for j from k+1 to n do a[j,k]:=0 end do
end do;
x:=vector(n);
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] end do end do;
return evalm(x)
end proc;
Utilizăm procedura se mai sus pentru rezolvarea sistemului
x1 + x2 + x3 = 3
x1 - x2 + 2x3 = 2
-x1 - x2 + 3x3 = 1
> a1:=matrix(3,3,[1,1,1,1,-1,2,-1,-1,3]);
> b1:=vector(3,[3,2,1]);
> rezlin(a1,b1);
> linalg[linsolve](a1, b1);
Comanda MAPLE linsolve(A,b) întoarce soluția sistemului Ax = b.
Considerăm următoarele comenzi MAPLE:
> a2 := matrix(2, 2, [1, 1, 1, 10000001/10000000]);
:= a1
1 1 1
1 -1 2
-1 -1 3
:= b1 [ ], ,3 2 1
[ ], ,1 1 1
[ ], ,1 1 1
Mădălina Roxana Buneci Metode Numerice –Laborator
6
1 1
2 100000011
10000000
:
a
> a3 := map(evalf, a2)
1. 1.3
1. 1.000000100:
a
> b2 := vector(2, [10234, 10234]);
2 10234 1 4: 023b
Soluția sistemului a2 x = b2 (și similar a sistemului a3 x = b2) este (10234,0).
> linalg[linsolve](a2,b2);
10234 0
> rezlin(a2,b2);
10234 0
> linalg[linsolve](a3,b2);
10200.00000 34.00000
> rezlin(a3,b2);
10234.00000 0.
> evalf(linalg[cond](a2));
74.00000040010
Deși matricele a2 și a3 sunt egale - diferența este dată doar de reprezentarea
coeficienților: simbolic (ca numere raționale) în cazul lui a2 și în virgulă mobilă în
cazul lui a3 – comenzile linalg[linsolve](a2,b1) și linalg[linsolve](a3,b2) întorc
rezultate diferite.
Soluția corectă a sistemului este cea obținută în varianta în care s-a lucrat simbolic:
x1 = 10234
x2 = 0
Rezultatul eronat furnizat de comenzile rezlin(a3,b2) și linsolve(a3,b2) se datorează
relei condiționări a matricei A. Se observă că factorul de condiționare este:
74.00000040010
Metode Numerice - Lucrarea de laborator 4
7
III.3 Metode iterative de rezolvare a sistemelor liniare: metoda Jacobi
III.3.1 Generalități
Metodele iterative constau în construcția unui șir (xk)k convergent către soluția
exactă a sistemului. Oprirea procesului iterativ are loc la un indice m determinat pe
parcursul calculului în funcție de precizia impusă astfel încât termenul xm să constituie
o aproximație satisfăcătoare a soluției căutate.
Se consideră sistemul liniar
(1) Ax = b, AMn,n(R) nesingulară
și desfacerea matricei A definită prin
A = N-P.
cu N o matrice inversabilă.
Fie x0 un vector arbitrar din Rn. Construim șirul (xk)k folosind relația de recurență:
(2) Nxk+1 = P xk + b, k 0.
Fie G = N-1P. Este cunoscut că șirul (xk)k converge la soluția exactă a sistemului
oricare ar fi x0 dacă și numai dacă (G) < 1 ((G) reprezintă raza spectrală a lui G, i.e.
maximum modulelor valorilor proprii ale lui G). Fie x soluția exactă a sistemului. Dacă
notăm eroarea lui xk față de x cu
ek = x – xk,
atunci ek+1 = G ek = Gke0, pentru orice k 0.
N se alege astfel încât sistemul (2) să se rezolve ușor – de exemplu diagonală
sau triunghiulară În cazul metodelor concrete descrise în continuare se consideră
desfacerea standard a matricei A = (ai,j)1i,jn definită prin:
A = L + D + R
unde
a1,1 0 0 …… 0 0
D = diag(a1,1,a2,2,…. an,n) = 0 a2,2 0 ……0 0
……………………..
0 0 0 ……0 an,n
Mădălina Roxana Buneci Metode Numerice –Laborator
8
0 0 0 …… 0 0
L = a2,1 0 0 …… 0 0
………………………..
an,1 an,2 an,3 …… an,n-1 0
0 a1,2 a1,3 …… a1,n-1 a1,n
R = 0 0 a2,3 …… a2,n-1 a2,n
………………………..
0 0 0 …… 0 0
III.3.2 Metoda Jacobi
Metoda Jacobi se caracterizează prin desfacerea
N = D, P = - (L+R)
Șirul (xk)k construit prin această metodă este:
i,i
n
ij1j
kjj,ii
1ki
a
xab
x
, i =1,2,…,n
Dacă G = N-1P, atunci coeficienții matricei G sunt:
0, i = j
gi,j = i,i
j,i
a
a , i j.
(G) min(1
G ,
G ).
Calculăm 1
G :
1G = max{
n
1i
j,ig ,1 jn}
Metode Numerice - Lucrarea de laborator 4
9
= max{
n
ji1i i,i
j,i
a
a, 1 jn}
Calculăm
G :
G = max{
n
1j
j,ig ,1 in}
= max{
n
ij1j i,i
j,i
a
a,1 in}.
Dacă 1
G < 1 sau
G <1, atunci (G) <1. Dar condiția
G <1 este echivalentă cu:
| ai,i | >
n
ji1i
j,ia
caz în care spunem că A este diagonal dominantă. Deci dacă ai,i 0 pentru orice i =
1,2,…, n, și dacă A este diagonal dominantă atunci șirul obținut prin metoda Jacobi
converge la soluția exactă a sistemului (1). Dacă ek este eroarea lui xk față de x:
ek = x – xk,
atunci ek+1 = G ek = Gke0, pentru orice k 0. În consecință pentru orice norme
compatibile
0k0k0kk eGeGeGe
Fie n1, = min(1
G ,
G ) și fie eps > 0 dat. Vom considera xk este o aproximație
satisfăcătoare pentru soluția exactă a sistemului dacă
(n1,)k < .
ceea ce este echivalent cu
k
1,
ln1
ln n
.
Șirul (xk)k construit prin metoda Jacobi este definit prin
Nxk+1 = P xk + b, k 0, x0 dat
xk+1 = N-1P xk + N-1 b, k 0,
xk+1 = G xk + N-1 b, k 0,
Deci pentru orice i, 1 i n,
Mădălina Roxana Buneci Metode Numerice –Laborator
10
k 1ix
=n
ki, j j
j 1
g x
+ i
i,i
b
a=
nk
i, j jj 1j i
g x
- i
i,i
b
a=
ni, j k
ji,ij 1
j i
ax
a
+ i
i,i
b
a.
În consecință, șirul (xk)k construit prin metoda Jacobi este:
x0 dat
k 1ix
= i,i
1
a(bi -
nk
i, j jj 1j i
a x
), i =1,2,…,n, k0.
Următoarea procedură Maple are drept parametri matricea sistemului, vectorul
termenilor liberi, aproximația inițială x0 a soluției, și eroarea epsilon. Procedura
întoarce aproximația xk (dată de metoda Jacobi) a soluției cu
k =
1nln
epsln
,1
.
> mjacobi:=proc(a,b,x0,epsilon)
local n,n1,ni,x1,x2,k,i,j,p,suma;
uses linalg;
n:=vectdim(x0);
ni:=0;
for i to n do
suma:=0;
for j to i-1 do
suma:=suma+abs(a[i,j]) end do;
for j from i+1 to n do
suma:=suma+abs(a[i,j]) end do;
if a[i,i]=0 then print(`Metoda nu se aplica`);
return NULL end if;
suma:=suma/abs(a[i,i]);
if ni<suma then ni:=suma end if;
end do;
n1:=0;
for j to n do
suma:=0;
for i to j-1 do suma:=suma+abs(a[i,j])/abs(a[i,i]) end do;
for i from j+1 to n do suma:=suma+abs(a[i,j])/abs(a[i,i]) end do;
if n1<suma then n1:=suma end if;
end do;
Metode Numerice - Lucrarea de laborator 4
11
if ni>n1 then ni:=n1 end if;
if ni>=1 then print (`Metoda nu se aplica`); return NULL end if;
k:=floor(ln(epsilon)/ln(ni))+1;
x1:=vector(n); x2:=vector(n);
for i to n do x1[i]:=x0[i] end do;
for p to k do
for i to n do
x2[i]:=b[i];
for j to i-1 do
x2[i]:=x2[i]-a[i,j]*x1[j] end do;
for j from i+1 to n do
x2[i]:=x2[i]-a[i,j]*x1[j] end do;
x2[i]:=x2[i]/a[i,i] end do;
for i to n do x1[i]:=x2[i] end do
end do;
return evalm(x2)
end proc;
Utilizăm această procedură pentru rezolvarea sistemului:
3 x1 + x2 + x3 = 4
x1 + 5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
> b:=vector([4,-2,14]);
> linalg[linsolve](a,b);
> x0:=vector(3,[0,0,0.1]);
:= a
3 1 1
1 5 1
-1 1 8
:= b [ ], ,4 -2 14
[ ], ,1 -1 2
Mădălina Roxana Buneci Metode Numerice –Laborator
12
> mjacobi(a,b,x0,0.001);
> x1:=vector(3,[0,1,2345]);
> mjacobi (a,b,x1,10^(-3));
> map(evalf,mjacobi (a,b,x1,10^(-3)));
:= x0 [ ], ,0 0 0.1
[ ], ,1.000000094 -0.9999998188 1.999999921
:= x1 [ ], ,0 1 2345
, ,
1919531
1920000
-8001171
8000000
51199997
25600000
[ ], ,0.9997557292 -1.000146375 1.999999883
Recommended