public class Eigen
extends java.lang.Object
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.times(D.times(V.transpose())) and V.times(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.times(V) equals V.times(D). The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon V.cond().
Modifier and Type | Field and Description |
---|---|
private double[] |
d
Arrays for internal storage of eigenvalues.
|
private double[] |
e
Arrays for internal storage of eigenvalues.
|
private int |
n
Row and column dimension (square matrix).
|
private double[][] |
V
Array for internal storage of eigenvectors.
|
Constructor and Description |
---|
Eigen() |
Modifier and Type | Method and Description |
---|---|
void |
calc(double[][] A)
Check for symmetry, then construct the eigenvalue decomposition
|
(package private) void |
fillArrays(javajs.util.V3[] eigenVectors,
float[] eigenValues) |
double[] |
getEigenvalues() |
javajs.util.V3[] |
getEigenVectors3() |
float[][] |
getEigenvectorsFloatTransposed()
transpose V and turn into floats
|
double[] |
getImagEigenvalues()
Return the imaginary parts of the eigenvalues
|
double[] |
getRealEigenvalues()
Return the real parts of the eigenvalues
|
static void |
getUnitVectors(double[][] m,
javajs.util.V3[] eigenVectors,
float[] eigenValues) |
private static double |
hypot(double a,
double b) |
static Eigen |
newM(double[][] m) |
Eigen |
set(int n) |
private void |
tql2() |
private void |
tred2()
Working storage for nonsymmetric algorithm.
|
private int n
private double[] d
private double[] e
private double[][] V
public Eigen set(int n)
public static Eigen newM(double[][] m)
m
- may be 3 or 4 herepublic static void getUnitVectors(double[][] m, javajs.util.V3[] eigenVectors, float[] eigenValues)
void fillArrays(javajs.util.V3[] eigenVectors, float[] eigenValues)
public void calc(double[][] A)
A
- Square matrixpublic double[] getRealEigenvalues()
public double[] getImagEigenvalues()
public double[] getEigenvalues()
public float[][] getEigenvectorsFloatTransposed()
public javajs.util.V3[] getEigenVectors3()
private void tred2()
private void tql2()
private static double hypot(double a, double b)