MATLAB: Iterační metody a jejich použití v prostředí MATLAB. Prostá iterační metoda. Jacobiho a Gaussova-Seidelova iterační metoda. |
n=16; G=numgrid('L',n); spy(G) numgrid('L',8) A=delsq(G); N=sum(G(:)>0) b=ones(N,1);Hledame reseni A u = b, (zkuste napr. slash u=A\b).
Zobrazeni reseni (u)
U=G; U(G>0)=u(G(G>0)); mesh(U) surf(U) contour(U)
function [x,iter,rez]=jacobi(A,b,TOL,MXITER) % % function [x,iter,rez]=gas(A,b,TOL,MXITER) % Jacobiho iteracni metod % % U=triu(A,1); L=tril(A,-1); D=diag(diag(A)); x=b; err=1; iter=1; while (err>TOL & iter<MXITER) xn=D\(-(L+U)*x+b); reziduum=norm(A*xn-b); err=norm(xn-x) x=xn; rez(iter)=reziduum; iter=iter +1; end
function [x,iter,rez]=gauss_seidel(A,b,TOL,MXITER) % % function [x,iter,rez]=gauss_seidel(A,b,TOL,MXITER) % Gauss-Seidelova iteracni metod % TOL - tolerance % MXITER - maximalni pocet iteraci U=triu(A,1); L=tril(A,-1); D=diag(diag(A)); x=b; err=1; iter=1; while (err > TOL & iter < MXITER) xn=(L+D)\(-U*x+b); err=norm(xn-x); reziduum=norm(A*xn-b); x=xn; rez(iter)=reziduum; iter=iter +1; end