00001 #ifndef __eigen_systems_h
00002 #define __eigen_systems_h
00003
00004 #include "gslwrap/matrix_double.h"
00005 #include "gsl/gsl_eigen.h"
00006
00007 namespace gsl
00008 {
00009
00011 class real_eigenvectors
00012 {
00013 public:
00014 template <class MatrixType>
00015 real_eigenvectors(const MatrixType& covariancematrix) :
00016 eigenvectors(covariancematrix.get_rows(), covariancematrix.get_cols()),
00017 eigenvalues(covariancematrix.get_rows())
00018 {
00019 gsl_eigen_symmv_workspace * work = gsl_eigen_symmv_alloc (covariancematrix.get_rows());
00020 matrix s = covariancematrix;
00021 gsl_eigen_symmv (s.gslobj(), eigenvalues.gslobj(), eigenvectors.gslobj(), work) ;
00022 gsl_eigen_symmv_free (work);
00023 gsl_eigen_symmv_sort (eigenvalues.gslobj(), eigenvectors.gslobj(), GSL_EIGEN_SORT_VAL_DESC) ;
00024 }
00025 matrix eigenvectors;
00026 vector eigenvalues;
00027 private:
00028 };
00029 }
00030 #endif //__eigen_systems_h