00001 #ifndef __F_IterativeLS_H__
00002 #define __F_IterativeLS_H__
00003 
00004 
00029 #include <stdio.h>
00030 #include "AbsFLinearSolver.hpp"
00031 
00032 
00033 class F_IterativeLS : public AbsFLinearSolver
00034 {
00035 protected:
00036 
00037 int             maxIter;
00038 double  eps;
00039 
00040 bool            converge;
00041 
00042 protected:
00043 
00044 virtual FloatVector* singleSolve(AFloatMatrix*  A, FloatVector* b, FloatVector* x=0)=0;
00045 
00046 public:
00047 F_IterativeLS(int maxIterations, double epsilon=1.0e-4){maxIter=maxIterations; eps=epsilon;}
00048 virtual ~F_IterativeLS(){}      
00049 
00050 
00051 virtual FloatVector* solve(AFloatMatrix*        A, FloatVector* b, bool factorisation, FloatVector* dest)
00052         { return solve(A, b, dest); }
00053 
00054 virtual FloatVector* solve(AFloatMatrix*        A, FloatVector* b, FloatVector* dest)
00055         {
00056         converge=false;
00057 
00058         for(int i=0; i<maxIter; i++)
00059                 {
00060                 dest=  singleSolve(A, b, dest);
00061 
00062                 if(converge == true)
00063                         break;
00064                 }
00065         return dest;
00066         }
00067 };
00068 
00069 #endif
00070