DEFINITION MODULE Jacobi;
(*******************************************************************
Module Jacobi (Version 1.0)
Copyright (c) 1992-2006 by Dimitrios Gyalistras and ETH Zurich.
Purpose Compute the eigenvalues and eigenvectors of
a real symmetric matrix.
Remarks Algorithms taken from Press, W.H. et al. (1988).
Numerical Recipes, Cambridge, pp 335 and 748-750
(ISBN 0521 30811 9).
Programming
o Design
Dimitrios Gyalistras 03/04/1992
o Implementation
Dimitrios Gyalistras 03/04/1992
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 15/04/1992 DG
*******************************************************************)
CONST
VecSize=40;
TYPE
Vector = ARRAY [1..VecSize] OF REAL;
Matrix = ARRAY [1..VecSize] OF Vector;
PROCEDURE Jacobi( VAR mat : Matrix;
dim : INTEGER;
VAR eigVals : Vector;
VAR eigVecs : Matrix;
VAR numRot : INTEGER );
(*
Calculates all eigenvectors and eigenvalues of the symmetric
dim x dim -matrix stored in 'mat'. 'eigVals' returns in its
first 'dim' elements the eigenvalues of 'mat'. 'eigVecs' is
a dim x dim -matrix returning the normalized eigenvectors of
'mat' (sum of squares of vector elements = 1). 'numRot'
returns the number of jacobi rotations which were required.
IMPLEMENTATION RESTRICTION: After calling the procedure
Jacobi, all elements of 'mat' above the diagonal will have
been overwritten with 0! No test is done against a
non-symmetrical matrix mat, i.e. all results returned for a
non-symmetrical mat are generally WRONG!!!
*)
PROCEDURE EigSort( VAR eigVals: Vector;
VAR eigVecs: Matrix;
dim: INTEGER );
(*
Given 'dim' eigenvalues in vector 'eigVals' and the dim x
dim -matrix 'eigVecs' containing the corresponding
eigenvectors (as obtained both from procedure Jacobi), this
routine sorts the eigenvalues in descending order. The columns
of the 'eigVecs'-matrix are rearranged correspondingly. The
method used is straight insertion.
*)
END Jacobi.