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 | Class and Description |
---|---|
protected static class |
Eigen.EigenSort
sort from smallest to largest
|
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(double[][] A) |
Eigen(double[][] mat,
javax.vecmath.Vector3f[] unitVectors,
float[] lengths) |
Eigen(int n) |
Modifier and Type | Method and Description |
---|---|
void |
calc(double[][] A)
Check for symmetry, then construct the eigenvalue decomposition
|
double[] |
getEigenvalues() |
javax.vecmath.Vector3f[] |
getEigenVectors3() |
float[][] |
getEigenvectorsFloatTransposed()
transpose V and turn into floats
|
static Quadric |
getEllipsoid(double[][] a) |
static Quadric |
getEllipsoid(javax.vecmath.Vector3f[] vectors,
float[] lengths,
boolean isThermal) |
double[] |
getImagEigenvalues()
Return the imaginary parts of the eigenvalues
|
double[] |
getRealEigenvalues()
Return the real parts of the eigenvalues
|
private static double |
hypot(double a,
double b) |
private void |
set(javax.vecmath.Vector3f[] unitVectors,
float[] lengths) |
private static void |
sort(javax.vecmath.Vector3f[] vectors,
float[] lengths)
sorts vectors by absolute value and normalizes them
|
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(int n)
public Eigen(double[][] A)
public Eigen(double[][] mat, javax.vecmath.Vector3f[] unitVectors, float[] lengths)
private void set(javax.vecmath.Vector3f[] unitVectors, float[] lengths)
public void calc(double[][] A)
A
- Square matrixpublic double[] getRealEigenvalues()
public double[] getImagEigenvalues()
public double[] getEigenvalues()
public float[][] getEigenvectorsFloatTransposed()
public javax.vecmath.Vector3f[] getEigenVectors3()
private void tred2()
private void tql2()
private static double hypot(double a, double b)
public static Quadric getEllipsoid(double[][] a)
public static Quadric getEllipsoid(javax.vecmath.Vector3f[] vectors, float[] lengths, boolean isThermal)
private static void sort(javax.vecmath.Vector3f[] vectors, float[] lengths)
vectors
- lengths
-