00001 #ifndef vnl_sparse_symmetric_eigensystem_h_
00002 #define vnl_sparse_symmetric_eigensystem_h_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <vnl/vnl_sparse_matrix.h>
00014 #include <vcl_vector.h>
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class vnl_sparse_symmetric_eigensystem {
00026 public:
00027 vnl_sparse_symmetric_eigensystem();
00028 ~vnl_sparse_symmetric_eigensystem();
00029
00030
00031
00032 int CalculateNPairs(vnl_sparse_matrix<double>& M, int n,
00033 bool smallest = true, int nfigures = 10);
00034
00035
00036
00037 vnl_vector<double> get_eigenvector(int i) const;
00038 double get_eigenvalue(int i) const;
00039
00040
00041 int CalculateProduct(int n, int m, const double* p, double* q);
00042 int SaveVectors(int n, int m, const double* q, int base);
00043 int RestoreVectors(int n, int m, double* q, int base);
00044
00045 protected:
00046 int nvalues;
00047 vnl_vector<double> * vectors;
00048 double * values;
00049
00050 vnl_sparse_matrix<double> * mat;
00051
00052 vcl_vector<double*> temp_store;
00053 };
00054
00055 #endif // vnl_sparse_symmetric_eigensystem_h_