EigValues.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * @file EigValues.h
  3. * @brief Computing eigenvalues and eigenvectors
  4. * @author Michael Koch,Erik Rodner
  5. * @date 08/19/2008
  6. */
  7. #ifndef EigValuesINCLUDE
  8. #define EigValuesINCLUDE
  9. #include <vislearning/nice_nonvis.h>
  10. #include "GenericMatrix.h"
  11. namespace OBJREC {
  12. /** Computing eigenvalues and eigenvectors */
  13. class EigValues
  14. {
  15. protected:
  16. public:
  17. /**
  18. * @param data matrix interface that does allow matrix-vector multiplications
  19. * @param k number of eigenvalues/eigenvectors
  20. * @param eigenvectors output Eigenvectors as Matrix
  21. * @param eigenvalues output Eigenvalues as Vector
  22. */
  23. virtual void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k ) = 0;
  24. virtual ~EigValues() {};
  25. };
  26. #ifdef USE_BROKEN_LANCZOS
  27. /** BROKEN: lanczos iteration */
  28. class EVLanczos : public EigValues
  29. {
  30. protected:
  31. uint maxiterations;
  32. double mindelta;
  33. public:
  34. EVLanczos ( uint _maxiterations = 100, double _mindelta = 0.01 )
  35. : maxiterations(_maxiterations), mindelta(_mindelta) {};
  36. /**
  37. * Lanczos Iteration, to get k first eigenvectors and eigenvalues
  38. * @param data matrix interface that does allow matrix-vector multiplications
  39. * @param k number of eigenvalues/eigenvectors
  40. * @param eigenvectors output Eigenvectors as Matrix
  41. * @param eigenvalues output Eigenvalues as Vector
  42. */
  43. // refactor-nice.pl: check this substitution
  44. // old: void getEigenvalues ( const GenericMatrix &data, Vector & eigenvalues, Matrix & eigenvectors, uint k );
  45. void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k );
  46. };
  47. #endif
  48. /** arnoldi iteration */
  49. class EVArnoldi : public EigValues
  50. {
  51. protected:
  52. uint maxiterations;
  53. double mindelta;
  54. public:
  55. EVArnoldi ( uint _maxiterations = 100, double _mindelta = 0.01 )
  56. : maxiterations(_maxiterations), mindelta(_mindelta) {};
  57. /**
  58. * Arnoldi Iteration, to get k first eigenvectors and eigenvalues
  59. * @param data matrix interface that does allow matrix-vector multiplications
  60. * @param k number of eigenvalues/eigenvectors
  61. * @param eigenvectors output Eigenvectors as Matrix
  62. * @param eigenvalues output Eigenvalues as Vector
  63. */
  64. // refactor-nice.pl: check this substitution
  65. // old: void getEigenvalues ( const GenericMatrix &data, Vector & eigenvalues, Matrix & eigenvectors, uint k );
  66. void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k );
  67. };
  68. } // namespace
  69. #endif