package Jampack; /** Zspec implements the spectral (eigenvalue-eigenvector) decomposition of a Hermitian matrix. Specifically, given a Hermitian matrix A there is a unitary matrix A and a real diagonal matrix D such that
* D = UHAU.Zspec implements U as a Zmat and D as a Zdiagmat. It returns a JampackException if A is not Hermitian.
Comments: The decomposition is computed using . Schur. Eventually, there will be
code that takes advantage of symmetry.
Since the diagonal matrix is real, it will be reimplemented as a
Ddiagmat later.
@version Pre-alpha
@author G. W. Stewart
*/
public class Zspec{
/** The matrix of eigenvectors */
public Zmat U;
/** The matrix of eigenvalues */
public Zdiagmat D;
/**
Creates a Zspec from Zmat. Throws a JampackException if the
matrix is not Hermitian.
@param AA A Zmat
@return The spectral decomposition of A
@exception JampackException
Thown if AA is not Hermitian.
Passed from below.
*/
public Zspec(Zmat AA)
throws JampackException{
int i, j;
if (AA.nrow != AA.ncol){
throw new RuntimeException
("Matrix not square.");
}
Zmat A = new Zmat(AA);
/* Check for A Hermitian. */
for (i=0; i