Package com.imsl.math
Class SymEigen
java.lang.Object
com.imsl.math.SymEigen
Computes the eigenvalues and eigenvectors of a real
symmetric matrix. Orthogonal similarity transformations are used to reduce
the matrix to an equivalent symmetric tridiagonal matrix. These
transformations are accumulated. An implicit rational QR algorithm is used
to compute the eigenvalues of this tridiagonal matrix. The eigenvectors are
computed using the eigenvalues as perfect shifts, Parlett (1980, pages 169,
172). The reduction routine is based on the EISPACK routine
TRED2.
See Smith et al. (1976) for the EISPACK routines. Further details, some timing
data, and credits are given in Hanson et al. (1990).
Let M = the number of eigenvalues, \(\lambda\) = the array of eigenvalues, and \(x_j\) is the associated eigenvector with jth eigenvalue.
Also, let \(\varepsilon\) be the machine precision. The performance index, \(\tau\), is defined to be
$$\tau = \mathop{\max}\limits_{1 \le j \le M} \frac{\left\| Ax_j-\lambda _j x_j \right\|_1 }{10N\varepsilon \left\| A \right\|_1 \left\| x_j \right\|_1}$$
While the exact value of \(\tau\) is highly machine
dependent, the performance of SymEigen is considered excellent if
\(\tau\lt 1\), good if \(1 \le 100\), and
poor if \(\tau> 100\). The performance index was first
developed by the EISPACK project at Argonne National Laboratory; see Smith
et al. (1976, pages 124-125).
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondouble[]Returns the eigenvalues.double[][]Return the eigenvectors of a symmetric matrix of typedouble.doubleperformanceIndex(double[][] a) Returns the performance index of a real symmetric eigensystem.
-
Constructor Details
-
SymEigen
public SymEigen(double[][] a) Constructs the eigenvalues and the eigenvectors for a real symmetric matrix.- Parameters:
a- is the symmetric matrix whose eigensystem is to be constructed.
-
SymEigen
public SymEigen(double[][] a, boolean computeVectors) Constructs the eigenvalues and (optionally) the eigenvectors for a real symmetric matrix.- Parameters:
a- adoublesymmetric matrix whose eigensystem is to be constructedcomputeVectors- aboolean, true if the eigenvectors are to be computed- Throws:
IllegalArgumentException- is thrown when the lengths of the rows of the input matrix are not uniform.
-
-
Method Details
-
getValues
public double[] getValues()Returns the eigenvalues.- Returns:
- a
doublearray containing the eigenvalues sorted by absolute value in descending order. If the algorithm fails to converge on an eigenvalue, that eigenvalue is set to NaN.
-
getVectors
public double[][] getVectors()Return the eigenvectors of a symmetric matrix of typedouble.- Returns:
- a
doublearray containing the eigenvectors. The j-th column of the eigenvector matrix corresponds to the j-th eigenvalue. The eigenvectors are normalized to have Euclidean length one. If the eigenvectors were not computed by the constructor, then null is returned.
-
performanceIndex
public double performanceIndex(double[][] a) Returns the performance index of a real symmetric eigensystem.- Parameters:
a- adoublesymmetric matrix- Returns:
- a
doublescalar value indicating how well the algorithms which have computed the eigenvalue and eigenvector pairs have performed. A performance index less than 1 is considered excellent, 1 to 100 is good, while greater than 100 is considered poor. - Throws:
IllegalArgumentException- is thrown when the lengths of the rows of the input matrix are not uniform.
-