GENERIC INTERFACEEigenSystem (RT, V, CV, M);
Arithmetic for Modula-3, see doc for detailsAbstract: Routines to solve eigenvalue problems.
FROM Arithmetic IMPORT Error; TYPE EigenPair = RECORD value : RT.T; vector: V.T; END; PROCEDURE PowerMethod (A: M.T; tol := RT.Eps * FLOAT(100, RT.T); maxiter: CARDINAL := 100; ): EigenPair RAISES {Error};
May raise Arith.ErrorNoConvergence
PROCEDURE SquareMethod (A: M.T; tol := RT.Eps * FLOAT(100, RT.T); maxiter: CARDINAL := 100; ): EigenPair RAISES {Error};
May raise Arith.ErrorNoConvergence
TYPE EVFlag = {SchurVectors}; EVFlagSet = SET OF EVFlag; EV = RECORD eigenvalues: CV.T; upperTri : M.T; schur: M.T; (* initalized if schurVector flag is set *) END;Unoptimised translations from
Wilkinson+Reinsch, Linear Algebra, Grundlehren der mathematischen Wissenschaften in Einzeldarstellungen, Band 186, Springer Verlag
contributed by Thomas Brupbacher
PROCEDURE Jacobi (VAR a : M.T; dim : CARDINAL; VAR d : V.T; VAR vects : M.T; VAR nrot : CARDINAL; eigenvals := FALSE; );
Solve the real symmetric eigenvalue problem by the algorithm of Jacobi. The routine has been tested against the first example given in Wilkinson/Reinsch and gives the same results.
It must hold
NUMBER(a^) >= n AND NUMBER(a[0]) >= n NUMBER(d^) >= n NUMBER(v^) >= n AND NUMBER(v[0]) >= n
PROCEDURE EigenSort (VAR vects: M.T; VAR vals: V.T; ); PROCEDURE Tred1 (n: CARDINAL; VAR a: M.T; VAR d, e, e2: V.T; ); PROCEDURE Tred2 (n: CARDINAL; VAR a: M.T; VAR d, e: V.T; ); PROCEDURE Trbak1 (n: CARDINAL; a: M.T; d, e: V.T; VAR z: M.T; m1, m2: CARDINAL; ); PROCEDURE Trbak3 (n: CARDINAL; a: V.T; d, e: V.T; VAR z: M.T; m1, m2: CARDINAL; ); PROCEDURE Tql1 (VAR d, e: V.T; ) RAISES {Error};
May raise Arith.ErrorNoConvergence
PROCEDURE Tql2 (VAR d, e: V.T; VAR z: M.T; ) RAISES {Error};
May raise Arith.ErrorNoConvergence
END EigenSystem.