17 #ifndef __itkSymmetricEigenSystem_txx
18 #define __itkSymmetricEigenSystem_txx
28 template<
class TMatrixElement,
int VNumberOfRows >
33 m_UseAbsoluteOrder =
true;
34 m_EigenValues.Fill( NumericTraits< TMatrixElement >::Zero );
36 temp.
Fill( NumericTraits< TMatrixElement >::Zero );
37 m_EigenVectors.Fill(temp);
43 template<
class TMatrixElement,
int VNumberOfRows >
49 template<
class TMatrixElement,
int VNumberOfRows >
54 Superclass::PrintSelf(os, indent);
56 os << indent <<
"Matrix:";
60 os << m_Matrix << std::endl;
64 os <<
"not set." << std::endl;
67 os << indent <<
"Eigen Vectors " << m_EigenVectors << std::endl;
68 os << indent <<
"Eigen Values " << m_EigenValues << std::endl;
69 os << indent <<
"Absolute order " << m_UseAbsoluteOrder << std::endl;
76 template<
class TMatrixElement,
int VNumberOfRows >
86 EigenVectorType tempVector;
88 for (i = 0; i < VNumberOfRows; i++)
90 tempVector = internalEigenSystem.get_eigenvector(i);
91 m_EigenValues[i] = internalEigenSystem.get_eigenvalue(i);
92 for (j = 0; j < VNumberOfRows; j++)
94 m_EigenVectors[i][j] = tempVector[j];
99 for(i = 0; i < (VNumberOfRows - 1); i++)
101 for(j = i + 1; j < VNumberOfRows; j++)
103 if( (m_EigenValues[j] > m_EigenValues[i] && !m_UseAbsoluteOrder) ||
104 ( (vnl_math_abs( m_EigenValues[j] ) > vnl_math_abs( m_EigenValues[i] ) )
105 && m_UseAbsoluteOrder) )
107 temp= m_EigenValues[i];
108 m_EigenValues[i] = m_EigenValues[j];
109 m_EigenValues[j] = temp;
110 for ( k = 0; k < VNumberOfRows; k++ )
112 temp = m_EigenVectors[i][k];
113 m_EigenVectors[i][k] = m_EigenVectors[j][k];
114 m_EigenVectors[j][k] = temp;