Program Cast_eigen; Const np = 20; Type Rmat = Array [1..np,1..np] of Real; Rvec = Array [1..np] of Real; Procedure Matvec(n:Integer;Var M:Rmat; Var Vold,Vnew:Rvec); Var i,j:integer; BEGIN FOR i:=1 TO n DO BEGIN Vnew[i] := 0.; FOR j:= 1 TO n DO Vnew[i] := Vnew[i] + M[i,j] * Vold[j]; END; END; Const eps=1.e-5; VAR a,apom: RMat; n,i,j,k: integer; l,lmin,lmax:Real; v1,v2, vpom: RVec; fvst:Text; vstnam:String; Begin Writeln('Zadej jmeno vstupniho souboru'); Readln(vstnam); ASSIGN(fvst,vstnam); RESET(fvst); Readln(fvst,n); FOR i:=1 TO n DO BEGIN FOR j:=1 TO n DO Read(fvst,a[i,j]); Readln(fvst) END; FOR i:=1 TO n DO FOR j:=1 TO n DO apom[i,j] := a[i,j]; FOR i:=1 TO n DO Read(fvst,v2[i]); Readln(fvst); Writeln(' Stary vektor '); FOR i:=1 TO n DO Write(v2[i]); Writeln; k:=0; Repeat k:=k+1; Writeln(' Iterace ',k); Writeln(' Stary vektor '); FOR i:=1 TO n DO Write(v2[i]); Writeln; FOR i:=1 TO n DO v1[i]:=v2[i]; Matvec(n,a,v1,v2); Writeln(' Novy vektor '); FOR i:=1 TO n DO Write(v2[i]); Writeln; lmax := -1.e+30; lmin := 1.e+30; FOR i:= 1 TO n DO if(v1[i] <> 0) OR (v2[i] <> 0) THEN BEGIN IF v1[i] <> 0 THEN l := v2[i]/v1[i] ELSE IF v2[i] > 0 THEN l := 1.e+30 else l := -1.e+30; IF l < lmin THEN lmin:= l; IF l > lmax THEN lmax:= l; END; l := 0; FOR i:= 1 TO n DO l := l + sqr(v2[i]); FOR i:= 1 TO n DO v2[i] := v2[i]/sqrt(l); Writeln(' lmin = ',lmin,' lmax = ',lmax); Readln; UNTIL (lmax-lmin)/(abs(lmax) + abs(lmin)) < eps; Writeln('Vysledek'); Writeln(' Vlastni cislo ',(lmin+lmax)*0.5); Writeln(' Vlastni vektor '); FOR i:=1 TO n DO Write(v2[i]); Writeln; Readln; END.