+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ PROPACK: A Matlab implementation of symmetric Lanczos and Lanczos +
+ bidiagonalization with partial reorthogonalization. +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1. INTRODUCTION
The Matlab package PROPACK contains a set of functions for solving the
symmetric eigenvalue problem and for computing the singular value
decomposition of large and sparse or structured matrices. The
eigenvalue routines are based on the symmetric Lanczos algorithm (PRO)
with partial reorthogonalization, while the SVD routines are based on
the Lanczos bidiagonalization (BPRO) with partial reorthogonalization.
The implementation of PRO is inspired by the FORTRAN 77 code found in
the LANSO package by Parlett, Simon and Wu (see
http://www.nersc.gov/research/SIMON/planso.html). The BPRO
implementation is based on the algorithm described in
Rasmus Munk Larsen, "Lanczos bidiagonalization with partial
reorthogonalization for large sparse SVD and linear least squares
calculations", Tech. Rep., DAIMI, Aarhus University, August 1998.
The Matlab routines come with detailed on-line documentation, which
can be read by typing "help " at the Matlab prompt.
2. OVERVIEW OF THE PACKAGE
Below is a list giving a brief description of the files found in the
package.
============================================================================
Readme : This description.
Main routines
-------------
laneig.m : Sparse symmetric eigenvalue routine built on BPRO.
Similar to the "lanso" subroutine in the LANSO package.
lanpro.m : Lanczos tridiagonalization with partial
reorthogonalization (PRO).
lansvd.m : Sparse SVD routine built on BPRO.
lanbpro.m : Lanczos bidiagonalization with partial
reorthogonalization (BPRO).
Computational routines
----------------------
refinebounds.m: Refines the error bounds based on the gap structure of
the Ritz values.
compute_int.m : Routine for determining which Lanczos vectors to purge
in a reorthogonalization.
reorth.m : Iterated (modified or classical) Gram-Schmidt
reorthogonalization.
reorth.mex<...> : MEX file using a FORTRAN 77 version of reorth.m.
tqlb.m : Computes the eigenvalues and the top and bottom elements
of the eigenvectors for a symmetric tridiagonal matrix.
tqlb.mex<...> : The corresponding MEX files call a modified version of
the EISPACK routine TQL1 (see below).
bdsqr.m : Computes the singular values and the bottom elements
of the left singular vectors for a lower bidiagonal matrix.
bdsqr.mex<...>: The corresponding MEX files call the LAPACK routine DBDSQR.
Test scripts and test problems
------------------------------
test.m : Main script for testing sparse SVD calculations.
testtqlb.m : Script for comparing different versions of TQLB.
Afunc.m : Function that computes Y <- A*X.
Atfunc.m : Function that computes Y <- A'*X.
AtAfunc.m : Function that computes Y <- A'*A*X.
Cfunc.m : Function that computes
Y <- [A*X(m+1:m+n,:); A'*X(1:m,:)]
i.e.
Y = [ 0 A ] * X
[ A' 0 ].
helio.mat : Testproblem from helioseismology. It is a full 212 x 100
matrix with condition number 2.9*10^12.
Harwell-Boeing/ :
Directory with various testmatrices from the
Harwell-Boeing collection (in Matrix Market format).
The directory also contains Matlab function for
querying, reading and writing matrices stored in
Matrix Market file format.
============================================================================
The routine TQLB is used for computing the eigenvalues and top and
bottom elements of the eigenvectors of the Lanczos tridiagonal, which
enter into the error bounds. TQLB is based on an optimized version of
the EISPACK routine TQL1 (see below), and for the sake of speed
FORTRAN versions of TQLB and the reorthogonalization routine REORTH
have been included as MEX files. The current versions of the MEX have
only been tested on SGI machines, and therefore pure Matlab versions
are also included.
3. REMARKS
MODIFICATIONS TO TQLB RELATIVE TO THE VERSION
USED IN THE LANSO PACKAGE:
In TQLB I have added a little extra code to compute the bottom
elements of the normalized eigenvectors. In addition I have replaced
the calls to PYTHAG in the inner loop of the QL iteration with in-line
code according to the suggestions in
A. Cline and J. Meyering, "Converting EISPACK to run efficiently on
a vector processor", Tech. Memo., Pleasant Valley Software,
Austin TX, 1989.
(see their code in http://www.netlib.org/eispack/3090vf/double/tql1.f).
Apart from decreasing the execution time by a factor of 3 compared to
the original version, it also causes the small eigenvalues to be
computed more accurately. As a test I computed the eigenvalues of the
standard testmatrix:
( 2 -1 )
( -1 2 -1 )
T = ( -1 2 . ) ,
( . . -1 )
( -1 2 )
where the true eigenvalues are
lambda_i = 4 * cos(pi/2 * i / n+1)^2, i = 1,2,...,n .
Below are the results (T=time in seconds, E=max relative error)
obtained on an SGI Origin 200 with a 180MHz MIPS R10000 CPU, 32Kbytes
primary, 1Mb secondary cache:
Original TQLB Modified TQLB MATLAB EIG (eigenvalues only)
-----------------------------------------------------------------------------
n T E T E T E
100 0.020 1.4e-12 0.007 3.1e-13 0.024 6.2e-14
1000 1.68 1.2e-9 0.55 2.9e-10 1.98 1.5e-10
10000 154.1 1.9e-6 52.2 8.2e-8 181.2 3.0e-8
==============================================================================
Rasmus Munk Larsen, Stanford, 2000