Základy algoritmizace a programování

Petr Sváček, Luděk Beneš, Olga Majlingová
Ústav technické matematiky

Přednáška č. 13

MATLAB: Iterační metody a jejich použití v prostředí MATLAB. Prostá iterační metoda. Jacobiho a Gaussova-Seidelova iterační metoda.

Stručně resumé přednášky (zapsané v MATLABU)

  1. Ridke matice.
    Ukladani ridkych matic. Viz full a sparse. Budeme pracovat s ridkymi maticemi.


  2. Vytvoreni velke ridke soustavy rovnic.
    Viz napoveda k numgrid, argument 'L','C','D','A','B'.
    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)
    

  3. Jacobiho iteracni metoda
    Soubor jacobi.m
    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
    

  4. Gauss-Seidelova iteracni metoda.
    Soubor gauss_seidel.m.
    
    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
    
    

Úlohy na procvičení