Advertisement
m4ly

Eliminacja Seidla

Jan 29th, 2014
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.88 KB | None | 0 0
  1. program Eliminacja_Seidla;
  2. uses
  3.    crt;
  4. const
  5.    N = 3;
  6. type
  7.    vector = array[1..N] of real;
  8.    matrix = array[1..N,1..N] of real;
  9. const
  10.    a: matrix = ((6.10, 2.20, 1.20),
  11.                 (2.20, 5.50,-1.50),
  12.                 (1.20,-1.50, 7.20));
  13.  
  14.    b: vector = (16.55, 10.55, 16.80);
  15. var
  16.    x, blad: vector;
  17.  
  18. procedure wynik(n, q: integer;
  19.                 x, blad: vector);
  20.    var
  21.       i: integer;
  22.    begin
  23.       writeln('  -- ',q,' --               blad');
  24.       for i:= 1 to n do
  25.          writeln('x',i,'= ',x[i]:13:10,'  ',blad[i]:13:10);
  26.       readkey;
  27.    end;
  28.  
  29. procedure saidl(n: integer; a: matrix; b: vector;
  30.                 var x, blad: vector);
  31.    var
  32.        d, xp: vector;
  33.       i, j, q, odp: integer;
  34.       s: real;
  35.    begin
  36.       for i:= 1 to n do
  37.          begin
  38.             d[i]:= -1/a[i,i];{ macierz diagonalna -D^-1 }
  39.             a[i,i]:= 0;      { macierz bez przekatnej = L+U }
  40.             x[i]:= 0;        { vector Xi }
  41.             xp[i]:= 0;       { vector Xi-1 }
  42.          end;
  43.       write('podaj ilosc iteracji: ');
  44.       readln(odp);
  45.       q:= 0;                 { liczba iteracji }
  46.       repeat
  47.          for i:= 1 to n do
  48.             begin
  49.                s:= 0;
  50.                for j:= 1 to n do
  51.                   begin                    { dla zmodyfikowanej metody }
  52.                      if i<j then           { gdy nad przekatna }
  53.                         s:= s+a[i,j]*xp[j];{ mnozenie mac U*Xi-1 }
  54.                      if i>j then           { gdy pod przekatna }
  55.                         s:= s+a[i,j]*x[j]; { mnozenie mac L*Xi }
  56.                   end;
  57.                x[i]:= d[i]*(s-b[i]);       { Xi:= -D^-1*(L*Xi+U*Xi-1-B) }
  58.                blad[i]:= abs(x[i]-xp[i]);
  59.                xp[i]:= x[i];
  60.             end;
  61.          wynik(n,q,x,blad);
  62.          inc(q);
  63.       until q=odp+1;
  64.    end;
  65.  
  66. begin
  67.    clrscr;
  68.    saidl(n,a,b,x,blad);
  69. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement