Program DemRelax; USES Crt; CONST np = 50; TYPE RealArrayNP = ARRAY [1..np] OF real; RealArrayNPbyNP = ARRAY [1..np,1..np] OF real; PROCEDURE Relax(VAR a: RealArrayNPbyNP; n: integer; omg: Real; VAR b, xold, xnew: RealArrayNP); VAR i,j : integer; delt : Real; BEGIN FOR i:= 1 TO n DO BEGIN delt := b[i]; FOR j:= 1 TO i-1 DO delt := delt - a[i,j]*xnew[j]; FOR j:= i TO n DO delt := delt - a[i,j]*xold[j]; delt := delt / a[i,i]; xnew[i] := xold[i] + omg*delt END; END; CONST MAXK=1000; VAR a: RealArrayNPbyNP; n,i,j,krok: integer; omg,eps,rozd,maxv, maxr: Real; b, xold, xnew, xodh: RealArrayNP; fvst,fvys:Text; vstnam:String; LABEL 1; BEGIN Writeln('Zadej jmeno vstupniho souboru'); Readln(vstnam); ASSIGN(fvst,vstnam); RESET(fvst); Writeln('Zadej dimenzi matice'); Readln(fvst,n); Writeln('Zadej matici (symetrickou s nenul.diagonalou)'); Writeln('Metoda zarucene konverguje pro pozitivne definitni matice !'); FOR i:=1 TO n DO BEGIN FOR j:=1 TO n DO Read(fvst,a[i,j]); Readln(fvst); FOR j:=1 TO n DO Write(a[i,j]); Writeln; END; Writeln('Zadej pravou stranu'); FOR i:=1 TO n DO Read(fvst,b[i]); Readln(fvst); FOR i:=1 TO n DO Write(b[i]); Writeln; Writeln('Dej Enter'); Readln(fvst); Writeln('Zadej odhad reseni'); FOR i:=1 TO n DO Read(fvst,xodh[i]); Readln(fvst); While true DO BEGIN Writeln (' Zadej omg = relax faktor, eps = relat.pres'); Writeln (' omega = 0 nebo eps = 0 konci ukazku'); Readln(omg,eps); IF omg*eps = 0 THEN GOTO 1; FOR i:=1 TO n DO xold[i] := xodh[i]; krok := 0; REPEAT krok := Krok + 1; Relax(a,n,omg,b,xold,xnew); Writeln (' KROK = ', krok); Writeln;Write('xold '); FOR i:=1 TO n DO Write( xold[i]); Writeln;Write('xnew '); FOR i:=1 TO n DO Write( xnew[i]); Writeln;Writeln; maxr:=0; maxv:= 0; FOR i:=1 TO n DO BEGIN IF abs(xnew[i]-xold[i]) > maxr THEN maxr := abs(xnew[i]-xold[i]); IF abs(xnew[i]) > maxv THEN maxv := abs(xnew[i]); END; Writeln('MaxRoz = ',maxr, ' MaxXnew = ',maxv); Writeln('rel.chyba = ',maxr/maxv,' zad.pres.= ',eps); Readln; FOR i:=1 TO n DO xold[i] := xnew[i]; UNTIL (maxr/maxv < eps) or (Krok >= maxk); END; 1: END.