Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate didacticaScoala trebuie adaptata la copii ... nu copiii la scoala





Biologie Botanica Chimie Didactica Fizica Geografie
Gradinita Literatura Matematica


Matematica


Qdidactic » didactica & scoala » matematica
Rezolvarea sistemelor de ecuatii liniare prin metoda iterativa Jacobi si Gauss-Seidel



Rezolvarea sistemelor de ecuatii liniare prin metoda iterativa Jacobi si Gauss-Seidel


Metode iterative


In aceasta tema:

Prezentarea principalelor metode iterative de rezolvare a sistemelor de ecuatii liniare;

Metoda iterativa Jacobi;

Metoda iterativa Gauss-Seidel;

Metoda suprarelaxarii succesive (SOR);


1. Metode iterative de rezolvare a sistemelor de ecuatii liniare

1.1. Prezentarea teoretica

Rezolvarea sistemelor de ecuatii liniare se face prin algoritmi grupati in doua mari clase:



Algoritmi directi (Gauss, Gauss-Jordan);

Algoritmi iterativi (Jacobi, Gauss-Seidel, SOR).

Algoritmii directi sunt acei algoritmi care, prin calcule, incearca aducerea sistemului initial la un sistem de ecuatii rezolvabil mai usor. Daca erorile de rotunjire lipsesc, acesti algoritmi conduc la solutia exacta a sistemului.

Algoritmii iterativi pornesc de la o aproximatie initiala a solutiei sistemului x(0) si se incearca imbunatatirea acestei aproximatii prin determinarea unui sir de solutii aproximative x(k), k=1,2,3,.. convergent catre solutia exacta. Procesul iterativ se opreste atunci cand aproximatia la iteratia k se incadreaza in limitele unei precizii stabilite initial. Metodele iterative se impart la randul lor in metode iterative stationare si metode iterative nestationare.

De aceea, putem scrie matricial un proces iterativ pentru rezolvarea unui sistem de n ecuatii liniare ca fiind:

                      (1)

Se spune despre un proces iterativ ca este stationar daca in timpul iteratiilor, atat matricea R cat si vectorul S raman neschimbate.

2. Metode iterativa Jacobi

2.1. Prezentarea teoretica


Se considera sistemul liniar de n ecuatii cu n necunoscute scris sub forma matriciala

(2)

Presupunem ca elementele de pe diagonala principala sunt diferite de zero. ai,i 0; i=1,2,3,,n. Se rezolva fiecare ecuatie i in raport cu xi sistemul devenind:

(3)

Sau, scris matricial:

(4)

unde

(5)

Metoda Jacobi porneste de la aproximatia initiala x(0)=S si succesiv se determina vectorii:

x(1)=Rx(0)+S

x(2)=Rx(1)+S

si asa mai departe. La modul general se poate scrie

                                      (6)

sau, altfel scris, procesul iterativ este:

(7)

sau, scris altfel:

(8)

Daca metoda Jacobi converge, la limita, cand numarul iteratiilor tinde la infinit, solutia aproximativa tinde la solutia exacta.

Conditia necesara si suficienta pentru ca procesul iterativ Jacobi sa fie convergent este ca matricea sistemului sa fie diagonal dominanta adica elementul de pe diagonala principala a matricei in valoare absoluta sa fie mai mare sau egal cu suma valorilor absolute a celorlalte elemente de pe linia respectiva.

Conditia de oprire a procesului iterativ este ca norma canonica a vectorului diferenta intre doua aproximatii succesive sa fie mai mica decat o eroare admisibila impusa.

Metoda Jacobi este o metoda stationara deoarece in cursul procesului iterativ, atat matricea de iteratie R cat si vectorul S raman cu valori neschimbate.

2.2. Aplicatii rezolvate

Aplicatia 1.

Sa se realizeze programul in limbajul Pascal care rezolva un sistem de ecuatii prin metoda iterativa Jacobi.

Rezolvare

Fiind dat sistemul de ecuatii liniare :

algoritmul de rezolvare este destul de simplu deoarece trebuie calculata o singura suma in variabila s. Maxit reprezinta numarul maxim de iteratii dupa care procesul iterativ este declarat neconvergent. Conditia de oprire a procesului iterativ este calculata prin intermediul variabilei maxe ce reprezinta valoarea maxima a diferentei in valoare absoluta dintre doua solutii succesive. Variabila epsi reprezinta o data de intrare ce pastreaza toleranta admisa pentru solutia sistemului de ecuatii. Programul nu testeaza daca elementul de pe diagonala principala este in valoare absoluta mai mare sau egal cu suma celorlalte elemente de pe linia respectiva conditia care este de convergenta.

Programul pentru rezolvarea prin metoda Jacobi se numeste JacobiSEL si este prezentat in lista 1

Lista 1. Programul de rezolvare a sistemelor prin metoda Jacobi

Program JacobiSEL;

Uses CRT;

Type

matrice=array[1..10,1..10] of Real;

vector=array[1..10] of Real;

Var

i,j,Maxit,N,k:Integer;

A:matrice;

B,X1,X:Vector;

s,epsi,maxe:Real;

Begin

ClrScr;

Write('N=');

Readln(N);

Write('Eroarea admisa=');

readln(epsi);

maxit:=50;

for i:=1 to n do

begin

for j:=1 to n do

begin

Write('A[',i,',',j,']=);

readln(a[i,j]);

end;

Write('B[',i,']=');

readln(b[i]);

end;

for i:=1 to n do

if a[i,i]=0 then begin

Lista 1. Programul de rezolvare a sistemelor prin metoda Jacobi (continuare)

writeln('Eroare! Elementul aii este zero');

halt;

end

else

x[i]:=b[i]/a[i,i];

k:=0;


Repeat

k:=k+1;

for i:=1 to n do x1[i]:=x[i];

For i:=1 to n do

begin

s:=0;

for j:=1 to n do

if i<>j then

s:=s+a[i,j]*x1[j];

x[i]:=(b[i]-s)/a[i,i];

end;

maxe:=abs(x[1]-x1[1]);

for i:=2 to n do

if maxe<abs((x[i]-x1[i]) then

maxe:=abs((x[i]-x1[i]);

until (maxe<=epsi) or (k>maxit);

if k>maxit then

begin

writeln('metoda neconvergenta');

end

else

begin

writeln('Solutia Sistemului');

For i:=1 to n do

Write(x[i]:6:2,' ');

Writeln;

end;

Repeat Until Keypressed;

end.

2.3. Aplicatii propuse

Aplicatia P1.

Sa se realizeze programul in limbajul Pascal care determina solutia sistemului de ecuatii si numarul de iteratii pentru a obtine o solutie cu o eroare de 10 . Se va folosi metoda iterativa Jacobi.

3. Metoda iterativa Gauss-Seidel

3.1. Prezentarea teoretica

Presupunem ca elementele de pe diagonala principala sunt diferite de zero. ai,i 0, i=1,2,3,,n. Procedand ca si la metoda Jacobi, se poate rescrie sistemul intr-o forma echivalenta:

(9)

Sau, scris matricial:

(10)

unde

(11)

Metoda Gauss-Seidel porneste la fel ca si metoda Jacobi cu o aproximatie initiala a solutiei, x(0)=S, dar spre deosebire de metoda Jacobi care foloseste in procesul iterativ doar valorile solutiei aproximative determinate la iteratia anterioara, metoda Gauss-Seidel foloseste si valorile deja determinate in iteratia curenta, astfel incat se mareste viteza de convergenta a procesului iterativ.

Astfel, aproximatia initiala poate fi aleasa ca fiind:

(12)

Presupunand ca solutia aproximativa la iteratia k este determinata, aproximatia la iteratia k+1 va fi calculata dupa urmatoarele relatii:

(13)

Deci, se poate scrie la modul general ca:

(14)

sau scris altfel:

Conditia de oprire a procesului iterativ Gauss-Seidel este ca norma canonica a vectorului diferenta intre doua aproximatii succesive sa fie mai mica decat o eroare admisibila impusa.

Se estimeaza ca metoda Gauss-Seidel, la acelasi nivel de precizie, este de doua ori mai rapida decat metoda Jacobi.

2.2. Aplicatie rezolvata

Aplicatia 2

Sa se realizeze in limbajul Pascal programul care rezolva un sistem de ecuatii liniar prin metoda iterativa Gauss-Seidel.


Rezolvare

Algoritmul de rezolvare prin metoda iterativa Gauss-Seidel este simplu constand in calcularea a doua sume s si s1, una pentru insumarea termenilor dati de produsul intre elementele matricei sistemului si valoarea necunoscutei la iteratia curenta, respectiv  suma termenilor dati de elementele matricei sistemului si necunoscutele la iteratia anterioara. Drept norma canonica a vectorului diferenta intre solutiile la doua iteratii succesive se va considera norma canonica:

Celelalte variabile au semnificatia de la metoda Jacobi.

Programul pentru rezolvarea sistemului liniar de ecuatii prin metoda iterativa Gauss-Seidel se numeste GaussSeidelSEL si este prezentat in lista 2

Lista 2. Programul GaussSeidelSEL

Program GaussSeidelSEL;

Uses CRT;

Type

matrice=array[1..10,1..10] of Real;

vector=array[1..10] of Real;

Var

i,j,Maxit,N,k:Integer;

A:matrice;

B,X1,X:Vector;

s,s1,epsi,maxe:Real;

Begin

ClrScr;

Write('N=');

Readln(N);

Write('Eroarea admisa=');

readln(epsi);

maxit:=50;

for i:=1 to n do

begin

for j:=1 to n do

begin

Write('A[',i,',',j,']=);

readln(a[i,j]);

end;

Write('B[',i,']=');

readln(b[i]);

end;

for i:=1 to n do

if a[i,i]=0 then begin

writeln('Eroare! Elementul aii este zero');

halt;

end

else

Lista 2. Programul GaussSeidelSEL (continuare)

x[i]:=b[i]/a[i,i];

Repeat

k:=k+1;

for i:=1 to n do x1[i]:=x[i];

For i:=1 to n do

begin

s:=0;s1:=0;

for j:=1 to i-1 do

s:=s+a[i,j]*x[j];

for j:=i+1 to n do

s1:=s1+a[i,j]*x1[j];

x[i]:=(b[i]-s-s1)/a[i,i];

end;

maxe:=abs(x[1]-x1[1]);

for i:=2 to n do

if maxe<abs((x[i]-x1[i]) then

maxe:=abs((x[i]-x1[i]);

until (maxe<=epsi) or (k>maxit);

if k>maxit then

begin

writeln('metoda neconvergenta');

end

else

begin

writeln('Solutia Sistemului');

For i:=1 to n do

Write(x[i]:6:2,' ');

Writeln;

end;

Repeat Until Keypressed;

End.

3.3. Aplicatii propuse

Aplicatia P2.

Sa se realizeze programul in limbajul Pascal care determina solutia sistemului de ecuatii si numarul de iteratii pentru a obtine o solutie cu o eroare de 10 . Se va folosi metoda iterativa Gauss-Seidel.

4. Metoda iterativa a suprarelaxarii succesive

4.1. Prezentarea teoretica


Metoda suprarelaxarii succesive (succesive over-relaxation SOR) se aseamana cu metoda Gauss-Seidel prezentata anterior, dar spre deosebire de aceasta se adauga un factor de ponderare astfel incat formula devine:

(15)

unde x*(k+1) este solutia obtinuta prin relatia Gauss-Seidel. Prin urmare, pentru determinarea necunoscutei x(k+1)i din ecuatia i a sistemului de ecuatii, se va folosi relatia:

(16)

Factorul de ponderare care se numeste si factor de suprarelaxare se alege astfel incat sa se mareasca viteza de convergenta. Daca metoda suprarelaxarii devine metoda Gauss-Seidel. In general, factorul de suprarelaxare are valori intre zero si doi adica wI

Scrisa matricial metoda suprarelaxarii succesive este:

(17)

unde R este matricea de iteratie pentru metoda suprarelaxarii.

Se poate demonstra usor, la fel ca si pentru metodele Jacobi si Gauss-Seidel, aceeasi conditie de convergenta, si anume matricea sistemului trebuie sa fie diagonal dominanta.

Conditia de oprire a procesului iterativ este aceeasi ca si la metodele iterative stationare discutate anterior adica, norma canonica a vectorului diferenta intre doua aproximatii succesive a solutiei sistemului sa fie mai mica decat o eroare maxima admisibila e

Alegerea unui factor optim de suprarelaxare este foarte important deoarece, de acest factor, depinde viteza de convergenta a procesului iterativ.

Pentru a estima un factor optim de suprarelaxare, Varga et al demonstreaza urmatoarea formula:

(18)

unde r(J) este raza spectrala a matricei de iteratie Jacobi.

Deoarece este greu sa estimam cu aceasta formula factorul optim de suprarelaxare w, in practica aceasta se ia de obicei o valoare mai mare decat unu, dar mai mica decat doi.

Aplicatia 3.

Sa se realizeze programul in limbajul Pascal care rezolva sistemul de ecuatii liniare prin metoda suprarelaxarii succesive.

Rezolvare

Programul pentru rezolvarea acestei aplicatii se numeste SORSEL si este prezentat in lista 3

Lista 3. Programul SORSEL

Program SORSEL;

Uses CRT;

Type

matrice=array[1..10,1..10] of Real;

vector=array[1..10] of Real;

Var

i,j,Maxit,N,k:Integer;

A:matrice;

B,X1,X:Vector;

s,s1,epsi,maxe,o:Real;

Begin

ClrScr;

Write('N=');

Readln(N);

Write('Eroarea admisa=');

readln(epsi);

Write('factorul de suprarelaxare=');

readln(o);

maxit:=50;

for i:=1 to n do

begin

for j:=1 to n do

begin

Write('A[',i,',',j,']=);

readln(a[i,j]);

end;

Write('B[',i,']=');

readln(b[i]);

end;

for i:=1 to n do

if a[i,i]=0 then begin

writeln('Eroare! Elementul aii este zero');

Lista 3. Programul SORSEL (continuare)

halt;

end

else

x[i]:=b[i]/a[i,i];

k:=0;

Repeat

k:=k+1;

for i:=1 to n do x1[i]:=x[i];

For i:=1 to n do

begin

s:=0;

for j:=1 to i-1 do

s:=s+a[i,j]*x[j];

s1:=0;

for j:=i+1 to n do

s1:=s1+a[i,j]*x1[j];

x[i]:=(1-o)*x1[i]+o*(b[i]-s-s1)/a[i,i];

end;

maxe:=abs(x[1]-x1[1]);

for i:=2 to n do

if maxe<abs((x[i]-x1[i]) then

maxe:=abs((x[i]-x1[i]);

until (maxe<=epsi) or (k>maxit);

if k>maxit then

begin

writeln('metoda neconvergenta');

end

else

begin

writeln('Solutia Sistemului');

For i:=1 to n do

Write(x[i]:6:2,' ');

Writeln;

end;

Repeat Until Keypressed

End.

4.3. Aplicatii propuse

Sa se realizeze programul in limbajul Pascal care determina solutia sistemului de ecuatii si numarul de iteratii pentru a obtine o solutie cu o eroare de 10-6. Se va folosi metoda iterativa a suprarelaxarii succesive.



Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright