eigenDecomposition method
Computes the eigenvectors and eigenvalues.
Reference: https://github.com/AnalyticalGraphicsInc/cesium/blob/411a1afbd36b72df64d7362de6aa934730447234/Source/Core/Matrix3.js#L1141 (Apache License 2.0)
The values along the diagonal of the diagonal matrix are the eigenvalues. The columns of the unitary matrix are the corresponding eigenvectors.
Implementation
Map<String,dynamic> eigenDecomposition(Map<String,dynamic> result ) {
int count = 0;
double sweep = 0;
final double maxSweeps = 10;
result['unitary'].identity();
result['diagonal'].copy( this );
final Matrix3 unitaryMatrix = result['unitary'];
final Matrix3 diagonalMatrix = result['diagonal'];
final epsilon = MathUtils.epsilon * diagonalMatrix.frobeniusNorm();
while ( sweep < maxSweeps && diagonalMatrix.offDiagonalFrobeniusNorm() > epsilon ) {
diagonalMatrix.shurDecomposition( _m1 );
_m2.copy( _m1 ).transpose();
diagonalMatrix.multiply( _m1 );
diagonalMatrix.premultiply( _m2 );
unitaryMatrix.multiply( _m1 );
if ( ++ count > 2 ) {
sweep ++;
count = 0;
}
}
return result;
}