00001 #ifndef __F_ICholeskyCgLS_H__ 00002 #define __F_ICholeskyCgLS_H__ 00003 00004 00028 #include <stdio.h> 00029 #include "F_IterativeLS.hpp" 00030 00031 #include "FloatSMatrix.hpp" 00032 00033 00034 class F_ICholeskyCgLS : public F_IterativeLS 00035 { 00036 private: 00037 00038 double alpha; 00039 double beta; 00040 00041 FloatSMatrix* L; 00042 FloatVector* y; 00043 00044 FloatVector* r; 00045 FloatVector* p; 00046 00047 FloatVector* ap; 00048 00049 protected: 00050 00051 virtual void factorise(AFloatMatrix* A); // A->LLt+R 00052 00053 virtual FloatVector* singleSolve(AFloatMatrix* A, FloatVector* b, FloatVector* x=0); 00054 00055 public: 00056 F_ICholeskyCgLS(int maxIterations, double epsilon=1.0e-4):F_IterativeLS(maxIterations, epsilon) 00057 { r=p=ap=y= 0; L=0;} 00058 virtual ~F_ICholeskyCgLS(){} 00059 00060 virtual FloatVector* solve(AFloatMatrix* m, FloatVector* b, bool factorisation, FloatVector* dest); 00061 }; 00062 00063 #endif 00064