Advertisement
m4ly

Metoda Seidla

Jan 29th, 2014
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.83 KB | None | 0 0
  1. Metoda Seidla:
  2.  
  3. {$N+}
  4. program urlSeidel;
  5. uses Crt;
  6. type wek = array [1..20] of Extended;
  7.      mac = array [1..20, 1..20] of Extended;
  8. var i, it, j,l, l0, n, st,zn : Integer;
  9.     e,s,z,b            : Extended;
  10.     a,h                   : mac;
  11.     g,x1,x,k             : wek;
  12.     c                     : Boolean;
  13.     wy                    :text;
  14.  
  15. BEGIN
  16.  assign(wy,'wynik.txt');
  17.  rewrite(wy);
  18.  ClrScr;
  19.   writeln('Podaj liczbe rownan ukladu: ');
  20.   readln (n);
  21.   writeln('Podaj kolejne wartosci wspolczynnikow przy niewiadomych oraz dolaczonej kolumny wyrazow wolnych: ');
  22.   for i:=1 to n do
  23.     for j:=1 to n+1 do
  24.       begin
  25.         write ('a[', i, ',', j, '] = ');
  26.         readln(a[i,j]);
  27.       end;
  28.   writeln ('Podaj maksymalna liczbe iteracji: ');
  29.   readln (l0);
  30.   writeln ('Podaj dokladnosc e: ');
  31.   readln(e);
  32.   writeln('Podaj poczatkowe przyblizenia wartosci:');
  33.   for i:=1 to n do
  34.     begin
  35.       write ('x1[', i, '] = ');
  36.       readln (x1[i]);
  37.     end;
  38.     writeln;
  39.     i:=0;
  40.  repeat
  41.       i:=i+1;
  42.        for j:=1 to n do
  43.           begin
  44.              g[i]:=a[i,n+1]/a[i,i];
  45.              h[i,j]:= -a[i,j]/a[i,i];
  46.           end;
  47.        h[i,i]:=0;
  48.        s:=0;
  49.        for j:=1 to n do
  50.          s:=s+abs(h[i,j]);
  51.          if s>1 then c:=true;
  52.  until i=n;
  53.        if c=true then writeln(' Uklad rozbiezny! ')
  54.   else
  55.     begin
  56.        l:=0;
  57.        repeat
  58.           l:=l+1;
  59.              for i:=1 to n do
  60.                begin
  61.                  s:=0;
  62.                   for j:=1 to i-1 do
  63.                     s:=s+h[i,j]*x[j];
  64.                     z:=0;
  65.                   for j:=i to n do
  66.                     z:=z+ h[i,j]*x1[j];
  67.                     x[i]:=g[i]+s+z;
  68.                end;
  69.                  for i:=1 to  n  do
  70.                   begin
  71.                     k[i]:=abs(x[i]-x1[i]);
  72.                     x1[i]:=x[i];
  73.                   end;
  74.                   b:=0;
  75.                   for i:=1 to n do
  76.                   begin
  77.                     b:= k[i]+b;
  78.                     if b<e then
  79.                       begin
  80.                         for i:=1 to n do
  81.                         begin
  82.                           writeln(wy,'x[',i,'] = ',x[i]:4:8);
  83.                           writeln('x[',i,'] = ',x[i]:4:8);
  84.                         end;
  85.                       writeln(wy,'Liczba wykonanych iteracji: l = ',l);
  86.                       writeln('Liczba wykonanych iteracji: l = ',l);
  87.                       close(wy);
  88.                       exit;
  89.                       end;
  90.                   end;
  91.   until l=l0;
  92.               for i:=1 to n do
  93.                   begin
  94.                        writeln (wy,'x[', i, '] = ', x[i]:4:8);
  95.                writeln ('x[',i,'] = ',x[i]:4:8);
  96.                   end;
  97.                 close(wy);
  98.                 writeln('Liczba wykonanych iteracji: l = ',l);
  99.  
  100.    end;
  101.    readln;
  102. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement