Sunteți pe pagina 1din 6

lab5.

txt Laborator #5 data limita de trimitere 25 noiembrie, 2010

Metoda lui Jacobi Creati un m-file numit jacobi.m liniile de cod si puneti in el

-------------------------------------------------------function z=jacobi(a,b,x,TOL) %metoda lui Jacobi, %a este matricea sistemului %diagonal dominanta pe linii % b este termenul liber,vector coloana %x este predictia initiala,vector coloana n=length(b); zold=x; I=eye(n); D=diag(diag(a)); B=I-inv(D)*a; c=inv(D)*b; q=norm(B,inf); z=c+B*zold; i=1; while(norm(z-zold,inf)*q/(1-q)>TOL ) zold=z; z=c+mmmmmmmmmm; i++; end ---------------------------------------------------Page 1

lab5.txt ---Intrebari: 1) Explicati rezultatul comenzii diag([ 1 2 3;0 1 2; 0 0 1]) si al comenzii diag(diag([ 1 2 3;0 1 2; 0 0 1])) 2) Inlocuiti textul mmmmmmmmmmmmm din codul de mai sus cu linia de cod potrivita pentru implementarea algoritmului lui Jacobi. 3) Tipariti la linia de comanda a=floor(100*rand(3,3))/100+4*eye(3) x=jacobi(a,[1;2;3],[0;0;0],0.00001) Tipariti rezultatele comenzilor. Comanda floor(X) calculeaza partea intreaga a fiecarei componente din matricea X. 4) Cum verificati ca metoda lui Jacobi implementata in codul de mai sus returneaza rezultatul corect in intrebarea anterioara? Tipariti comanda utilizata.

5) Tipariti comanda x=jacobi([1 2 3;0 1 2;0 0 1],[1;2;3],[0;0;0],0.0000001) A produs algoritmul rezultatul corect? Explicati de ce. Page 2

lab5.txt 6) Pentru sistemul cu matrice a=[2 1 0;1 2 0;1 1 3] si termen liber b=[1;2;3] se aplica metoda lui Jacobi cu predictie initiala x_0=[0;0;1]. Folosind codul de mai sus sa se calculeze a cincea iteratie x_5 si sa se estimeze eroarea produsa in aproximarea solutiei exacte a sistemului cu x_5. Tipariti mai jos x_5 si estimatul pentru eroare si mentionati modificarile aduse codului pentru calculul acestor numere.

Metoda lui Gauss-Seidel 1) creati un m-file numit gauss_seidel.m in el liniile de cod

si puneti

-------------------------------------------------------function z=gauss_seidel(a,b,x,TOL) %metoda lui Gauss-Seidel, %a este matricea sistemului, diagonal dominanta pe linii % b este termenul liber,vector coloana, %x este predictia initiala,vector coloana n=length(b); Page 3

lab5.txt zold=x; I=eye(n); D=diag(diag(a)); B=I-inv(D)*a; c=inv(D)*b; U=triu(B); L=B-U; C=inv(I-L)*U; d=inv(I-L)*c; z=d+C*zold; i=1; q=norm(C,inf); while(mmmmmmmmmmmmmmmm>TOL) zold=z; z=c+B*zold; i++; end ----------------------------------------------------Intrebari: 1) Inlocuiti linia mmmmmmmmmmmmm din codul de mai sus cu linia de cod potrivita pentru implementarea algoritmului lui Gauss-Seidel. 2) Tipariti la linia de comanda a=floor(100*rand(3,3))/100+4*eye(3) Page 4

lab5.txt x=gauss_seidel(a,[1;2;3],[0;0;0],0.0001) Tipariti rezultatul. 3) Cum verificati ca metoda lui Gauss-Seidel implementata in acest cod functioneaza corect? Tipariti comanda utilizata. 4) Modificati jacobi.m ca sa printati si numarul total de iteratii necesare pt atingerea tolerantei prescrise. Faceti acelasi lucru cu gauss_seidel.m. Tipariti in terminalul octave comenzile a=rand(300,300); a=301*eye(300)+a; b=rand(300,1); x=zeros(300,1); jacobi(a,b,x,0.000001); gauss_seidel(a,b,x,0.000001); Alternativ puteti face un script care sa efectueze aceste comenzi. Faceti copy/paste la ouputul acestor comenzi aici. Care dintre cele 2 metode iterative converge mai repede(ca si numar de iteratii)? De ce? 5) Pentru sistemul cu matrice a=[2 1 0;1 2 0;1 1 3] si termen liber b=[1;2;3] se aplica metoda lui Gauss-Seidel cu predictie initiala x_0=[0;0;1]. Folosind codul de mai sus sa se Page 5

lab5.txt calculeze a cincea iteratie x_5 si sa se estimeze eroarea produsa in aproximarea solutiei exacte a sistemului cu x_5. Tipariti mai jos x_5 si estimatul pentru eroare si mentionati modificarile aduse codului pentru calculul acestor numere.

Page 6

S-ar putea să vă placă și