--- trunk/OOPSE/libmdtools/ConjugateMinimizer.hpp 2004/01/27 19:15:20 987 +++ trunk/OOPSE/libmdtools/ConjugateMinimizer.hpp 2004/01/30 21:47:22 1000 @@ -3,30 +3,47 @@ class ConjugateMinimizerBase : public MinimizeBase{ #include "MinimizerBase.hpp" +//abstract class of conjugate gradient minimizer class ConjugateMinimizerBase : public MinimizeBase{ + public: + + ConjugateMinimizerBase(NLModel1* nlmodel); + ~ConjugateMinimizerBase(); + bool isSolvable(); - virtual void Init() = 0; - virtual void Minimize() = 0; - virtual int step() = 0; - virtual int testConvergence() = 0; + virtual void Init(); + virtual void Minimize(); + virtual int isConvergenceAchieved(); virtual void reset(); - void calcDirection(vector& direction) = 0; + virtual void printMinizerInfo(); protected: + + double calcGamma(vector& newGrad, vector& oldGrad) = 0; NLModel0 * model; - vector preGrad; + + vector prevGrad; + vector gradient; + vector prevDirection; + vector direction; }; -class FRConjugate : public ConjugateMinimizerBase{ - public: - void calcDirection(vector& direction); +//Fletcher-Reeves Conjugate Gradient Method +class FRCGMinimizer : public ConjugateMinimizerBase{ + protected: + + double calcGamma(vector& newGrad, vector& oldGrad); + }; -class PRConjugate : public ConjugateMinimizerBase{ - public: - void calcDirection(vector& direction); +//Polak-Reeves Conjugate Gradient Method +class PRCGMinimizer : public ConjugateMinimizerBase{ + + protected: + + double calcGamma(vector& newGrad, vector& oldGrad); }; #endif