EISPACK
Eigenvalue Calculations
EISPACK
is a FORTRAN77 library which
calculates
the eigenvalues and eigenvectors of a matrix.
A variety of options are available for special matrix formats.
Note that EISPACK "simulates" complex arithmetic. That is,
complex data is stored as pairs of real numbers, and complex
arithmetic is done by carefully manipulating the real numbers.
EISPACK is old, and its functionality has been replaced by
the more modern and efficient LAPACK. There are some advantages,
not all sentimental, to keeping a copy of EISPACK around. For
one thing, the implementation of the LAPACK routines makes it
a trying task to try to comprehend the algorithm by reading the
source code. A single user level routine may refer indirectly to
thirty or forty others.
EISPACK includes a function to compute the singular value decomposition (SVD)
of a rectangular matrix.
The pristine correct original source code for EISPACK is available
through
the NETLIB web site.
Languages:
EISPACK is available in
a C version and
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version.
Related Data and Programs:
ARPACK,
a FORTRAN90 library which
uses Arnoldi iteration to compute
some of the eigenvalues and eigenvectors of a large sparse matrix.
EXPOKIT,
a FORTRAN77 library which
solves various forms of the matrix exponential problem,
by Roger Sidje.
LAPACK_EXAMPLES,
a FORTRAN77 program which
demonstrates the use of the LAPACK linear algebra library.
SLATEC,
a FORTRAN90 library which
includes EISPACK.
TEST_EIGEN,
a FORTRAN77 library which
defines various eigenvalue test cases.
TEST_MAT,
a FORTRAN77 library which
defines test matrices, some of
which have known eigenvalues and eigenvectors.
TOMS581,
a FORTRAN77 library which
implements an improved algorithm for computing the singular value decomposition (SVD)
of a rectangular matrix;
this is ACM TOMS algorithm 571, by Tony Chan.
Reference:
-
Hilary Bowdler, Roger Martin, Christian Reinsch, James Wilkinson,
The QR and QL algorithms for Symmetric Matrices: TQL1 and TQL2,
Numerische Mathematik,
Volume 11, Number 4, May 1968, pages 293-306.
-
Gene Golub, Christian Reinsch,
Singular Value Decomposition and Least Squares Solutions,
Numerische Mathematik,
Volume 14, Number 5, April 1970, pages 403-420.
-
Roger Martin, G Peters, James Wilkinson,
HQR, The QR Algorithm for Real Hessenberg Matrices,
Numerische Mathematik,
Volume 14, Number 3, February 1970, pages 219-231.
-
Roger Martin, Christian Reinsch, James Wilkinson,
Householder's Tridiagonalization of a Symmetric Matrix:
TRED1, TRED2 and TRED3,
Numerische Mathematik,
Volume 11, Number 3, March 1968, pages 181-195.
-
Roger Martin, James Wilkinson,
Similarity Reduction of a General Matrix to Hessenberg Form:
ELMHES,
Numerische Mathematik,
Volume 12, Number 5, December 1968, pages 349-368.
-
Beresford Parlett, Christian Reinsch,
Balancing a Matrix for Calculation of Eigenvalues and
Eigenvectors,
Numerische Mathematik,
Volume 13, Number 4, August 1969, pages 293-304.
-
Christian Reinsch,
Algorithm 464:
Eigenvalues of a real symmetric tridiagonal matrix,
Communications of the ACM,
Volume 16, Number 11, November 1973, page 689.
-
Brian Smith, James Boyle, Jack Dongarra, Burton Garbow,
Yasuhiko Ikebe, Virginia Klema, Cleve Moler,
Matrix Eigensystem Routines, EISPACK Guide,
Lecture Notes in Computer Science, Volume 6,
Springer, 1976,
ISBN13: 978-3540075462,
LC: QA193.M37.
-
James Wilkinson, Christian Reinsch,
Handbook for Automatic Computation,
Volume II, Linear Algebra, Part 2,
Springer, 1971,
ISBN: 0387054146,
LC: QA251.W67.
Source Code:
Examples and Tests:
EISPACK_PRB1 is a test program that demonstrates the use of
a number of EISPACK routines. Files you may copy include:
EISPACK_PRB2 is a test program that demonstrates the use of
the EISPACK driver RS on a real symmetric matrix. Random problems
of size 4, 16, 64, 256 and 1024 are generated and solved, and
the setup and solution times are reported. The
test_eigen package
is called to generate the random test matrices. Files you may
copy include:
List of Routines:
-
BAKVEC determines eigenvectors by reversing the FIGI transformation.
-
BALANC balances a real matrix before eigenvalue calculations.
-
BALBAK determines eigenvectors by undoing the BALANC transformation.
-
BANDR reduces a symmetric band matrix to symmetric tridiagonal form.
-
BANDV finds eigenvectors from eigenvalues, for a real symmetric band matrix.
-
BISECT computes some eigenvalues of a real symmetric tridiagonal matrix.
-
BQR finds the smallest eigenvalue of a real symmetric band matrix.
-
CBABK2 finds eigenvectors by undoing the CBAL transformation.
-
CBAL balances a complex matrix before eigenvalue calculations.
-
CDIV emulates complex division, using real arithmetic.
-
CG gets eigenvalues and eigenvectors of a complex general matrix.
-
CH gets eigenvalues and eigenvectors of a complex Hermitian matrix. .
-
CINVIT gets eigenvectors from eigenvalues, for a complex Hessenberg matrix.
-
COMBAK determines eigenvectors by undoing the COMHES transformation.
-
COMHES transforms a complex general matrix to upper Hessenberg form.
-
COMLR gets all eigenvalues of a complex upper Hessenberg matrix.
-
COMLR2 gets eigenvalues/vectors of a complex upper Hessenberg matrix.
-
COMQR gets eigenvalues of a complex upper Hessenberg matrix.
-
COMQR2 gets eigenvalues/vectors of a complex upper Hessenberg matrix.
-
CORTB determines eigenvectors by undoing the CORTH transformation.
-
CORTH transforms a complex general matrix to upper Hessenberg form.
-
CSROOT computes the complex square root of a complex quantity.
-
ELMBAK determines eigenvectors by undoing the ELMHES transformation.
-
ELMHES transforms a real general matrix to upper Hessenberg form.
-
ELTRAN accumulates similarity transformations used by ELMHES.
-
FIGI transforms a real nonsymmetric tridiagonal matrix to symmetric form.
-
FIGI2 transforms a real nonsymmetric tridiagonal matrix to symmetric form.
-
HQR computes all eigenvalues of a real upper Hessenberg matrix.
-
HQR2 computes eigenvalues and eigenvectors of a real upper Hessenberg matrix.
-
HTRIB3 determines eigenvectors by undoing the HTRID3 transformation.
-
HTRIBK determines eigenvectors by undoing the HTRIDI transformation.
-
HTRID3 tridiagonalizes a complex hermitian packed matrix.
-
HTRIDI tridiagonalizes a complex hermitian matrix.
-
IMTQL1 computes all eigenvalues of a symmetric tridiagonal matrix.
-
IMTQL2 computes all eigenvalues/vectors of a symmetric tridiagonal matrix.
-
IMTQLV computes all eigenvalues of a real symmetric tridiagonal matrix.
-
INVIT computes eigenvectors given eigenvalues, for a real upper Hessenberg matrix.
-
MINFIT solves the least squares problem, for a real overdetermined linear system.
-
ORTBAK determines eigenvectors by undoing the ORTHES transformation.
-
ORTHES transforms a real general matrix to upper Hessenberg form.
-
ORTRAN accumulates similarity transformations generated by ORTHES.
-
PYTHAG computes SQRT ( A**2 + B**2 ) carefully.
-
QZHES carries out transformations for a generalized eigenvalue problem.
-
QZIT carries out iterations to solve a generalized eigenvalue problem.
-
QZVAL computes eigenvalues for a generalized eigenvalue problem.
-
QZVEC computes eigenvectors for a generalized eigenvalue problem.
-
R4_SWAP swaps two R4's.
-
R4MAT_IDENTITY stores the identity matrix in an R4MAT.
-
R4MAT_PRINT prints an R4MAT.
-
R4MAT_PRINT_SOME prints some of an R4MAT.
-
R4VEC_PRINT prints an R4VEC.
-
R4VEC2_PRINT prints an R4VEC2.
-
RATQR computes selected eigenvalues of a real symmetric tridiagonal matrix.
-
REBAK determines eigenvectors by undoing the REDUC transformation.
-
REBAKB determines eigenvectors by undoing the REDUC2 transformation.
-
REDUC reduces the eigenvalue problem A*x=lambda*B*x to A*x=lambda*x.
-
REDUC2 reduces the eigenvalue problem A*B*x=lamdba*x to A*x=lambda*x.
-
RG computes eigenvalues and eigenvectors of a real general matrix.
-
RGG computes eigenvalues/vectors for the generalized problem A*x = lambda*B*x.
-
RS computes eigenvalues and eigenvectors of real symmetric matrix.
-
RSB computes eigenvalues and eigenvectors of a real symmetric band matrix.
-
RSG computes eigenvalues/vectors, A*x=lambda*B*x, A symmetric, B pos-def.
-
RSGAB computes eigenvalues/vectors, A*B*x=lambda*x, A symmetric, B pos-def.
-
RSGBA computes eigenvalues/vectors, B*A*x=lambda*x, A symmetric, B pos-def.
-
RSM computes eigenvalues, some eigenvectors, real symmetric matrix.
-
RSP computes eigenvalues and eigenvectors of real symmetric packed matrix.
-
RSPP computes some eigenvalues/vectors, real symmetric packed matrix.
-
RST computes eigenvalues/vectors, real symmetric tridiagonal matrix.
-
RT computes eigenvalues/vectors, real sign-symmetric tridiagonal matrix.
-
SVD computes the singular value decomposition for a real matrix.
-
TIMESTAMP prints the current YMDHMS date as a time stamp.
-
TINVIT computes eigenvectors from eigenvalues, real tridiagonal symmetric.
-
TQL1 computes all eigenvalues of a real symmetric tridiagonal matrix.
-
TQL2 computes all eigenvalues/vectors, real symmetric tridiagonal matrix.
-
TQLRAT compute all eigenvalues of a real symmetric tridiagonal matrix.
-
TRBAK1 determines eigenvectors by undoing the TRED1 transformation.
-
TRBAK3 determines eigenvectors by undoing the TRED3 transformation.
-
TRED1 transforms a real symmetric matrix to symmetric tridiagonal form.
-
TRED2 transforms a real symmetric matrix to symmetric tridiagonal form.
-
TRED3 transforms a real symmetric packed matrix to symmetric tridiagonal form.
-
TRIDIB computes some eigenvalues of a real symmetric tridiagonal matrix.
-
TSTURM computes some eigenvalues/vectors, real symmetric tridiagonal matrix.
You can go up one level to
the FORTRAN77 source codes.
Last revised on 02 February 2008.