nist.gov/javanumerics/jama/">JAMA library, with the following changes:
- a {@link #getVT() getVt} method has been added,
- two {@link #getRealEigenvalue(int) getRealEigenvalue} and {@link #getImagEigenvalue(int) getImagEigenvalue} methods to pick up a single eigenvalue have been added,
- a {@link #getEigenvector(int) getEigenvector} method to pick up a singleeigenvector has been added,
- a {@link #getDeterminant() getDeterminant} method has been added.
- a {@link #getSolver() getSolver} method has been added.
As of 3.1, this class supports general real matrices (both symmetric and non-symmetric):
If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is diagonal and the eigenvector matrix V is orthogonal, i.e. A = V.multiply(D.multiply(V.transpose())) and V.multiply(V.transpose()) equals the identity matrix.
If A is not symmetric, then the eigenvalue matrix D is block diagonal with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, lambda + i*mu, in 2-by-2 blocks:
[lambda, mu ] [ -mu, lambda]
The columns of V represent the eigenvectors in the sense that A*V = V*D, i.e. A.multiply(V) equals V.multiply(D). The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon the condition of V.
This implementation is based on the paper by A. Drubrulle, R.S. Martin and J.H. Wilkinson "The Implicit QL Algorithm" in Wilksinson and Reinsch (1971) Handbook for automatic computation, vol. 2, Linear algebra, Springer-Verlag, New-York
@see
MathWorld
@see
Wikipedia
@since 2.0 (changed to concrete class in 3.0)