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