00001 #ifndef __F_ILDLtCgLS_H__ 00002 #define __F_ILDLtCgLS_H__ 00003 00027 #include <stdio.h> 00028 #include "F_IterativeLS.hpp" 00029 00030 #include "FloatSMatrix.hpp" 00031 00032 00033 class F_ILDLtCgLS : public F_IterativeLS 00034 { 00035 private: 00036 00037 double alpha; 00038 double beta; 00039 00040 FloatSMatrix* L; 00041 FloatVector* D; 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_ILDLtCgLS(int maxIterations, double epsilon=1.0e-4):F_IterativeLS(maxIterations, epsilon) 00057 { r=p=ap=y= 0; L=0;} 00058 virtual ~F_ILDLtCgLS(){} 00059 00060 virtual FloatVector* solve(AFloatMatrix* m, FloatVector* b, bool factorisation, FloatVector* dest); 00061 }; 00062 00063 #endif 00064 00065 00066