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 | Description |
---|---|---|
protected static class |
Eigen.EigenSort |
sort from smallest to largest
|
Constructor | Description |
---|---|
Eigen(int n) |
Modifier and Type | Method | Description |
---|---|---|
void |
calc(double[][] A) |
Check for symmetry, then construct the eigenvalue decomposition
|
double[] |
getEigenvalues() |
|
Vector3f[] |
getEigenVectors3() |
|
float[][] |
getEigenvectorsFloatTransposed() |
transpose V and turn into floats
|
static Quadric |
getEllipsoid(Vector3f[] vectors,
float[] lengths,
boolean isThermal) |
|
static Quadric |
getEllipsoidDD(double[][] a) |
|
double[] |
getImagEigenvalues() |
Return the imaginary parts of the eigenvalues
|
double[] |
getRealEigenvalues() |
Return the real parts of the eigenvalues
|
static void |
getUnitVectors(double[][] m,
Vector3f[] unitVectors,
float[] lengths) |
|
static Eigen |
newM(double[][] m) |
public static Eigen newM(double[][] m)
public static void getUnitVectors(double[][] m, Vector3f[] unitVectors, float[] lengths)
public void calc(double[][] A)
A
- Square matrixpublic double[] getRealEigenvalues()
public double[] getImagEigenvalues()
public double[] getEigenvalues()
public float[][] getEigenvectorsFloatTransposed()
public Vector3f[] getEigenVectors3()
public static Quadric getEllipsoidDD(double[][] a)