eigenDecomposition method

Map<String, dynamic> eigenDecomposition(
  1. Map<String, dynamic> result
)

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;
}