/** * @file EigValues.h * @brief Computing eigenvalues and eigenvectors * @author Michael Koch,Erik Rodner * @date 08/19/2008 */ #ifndef EigValuesINCLUDE #define EigValuesINCLUDE #include #include "GenericMatrix.h" namespace OBJREC { /** Computing eigenvalues and eigenvectors */ class EigValues { protected: public: /** * @param data matrix interface that does allow matrix-vector multiplications * @param k number of eigenvalues/eigenvectors * @param eigenvectors output Eigenvectors as Matrix * @param eigenvalues output Eigenvalues as Vector */ virtual void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k ) = 0; virtual ~EigValues() {}; }; #ifdef USE_BROKEN_LANCZOS /** BROKEN: lanczos iteration */ class EVLanczos : public EigValues { protected: uint maxiterations; double mindelta; public: EVLanczos ( uint _maxiterations = 100, double _mindelta = 0.01 ) : maxiterations(_maxiterations), mindelta(_mindelta) {}; /** * Lanczos Iteration, to get k first eigenvectors and eigenvalues * @param data matrix interface that does allow matrix-vector multiplications * @param k number of eigenvalues/eigenvectors * @param eigenvectors output Eigenvectors as Matrix * @param eigenvalues output Eigenvalues as Vector */ // refactor-nice.pl: check this substitution // old: void getEigenvalues ( const GenericMatrix &data, Vector & eigenvalues, Matrix & eigenvectors, uint k ); void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k ); }; #endif /** arnoldi iteration */ class EVArnoldi : public EigValues { protected: uint maxiterations; double mindelta; public: EVArnoldi ( uint _maxiterations = 100, double _mindelta = 0.01 ) : maxiterations(_maxiterations), mindelta(_mindelta) {}; /** * Arnoldi Iteration, to get k first eigenvectors and eigenvalues * @param data matrix interface that does allow matrix-vector multiplications * @param k number of eigenvalues/eigenvectors * @param eigenvectors output Eigenvectors as Matrix * @param eigenvalues output Eigenvalues as Vector */ // refactor-nice.pl: check this substitution // old: void getEigenvalues ( const GenericMatrix &data, Vector & eigenvalues, Matrix & eigenvectors, uint k ); void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k ); }; } // namespace #endif