00001
00086 #ifndef _Marquardt_h
00087 #define _Marquardt_h
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 #include "../DoubleParameter.h"
00098 #include "../FunctionBase.h"
00099 #include "../Method.h"
00100 #include "../ProblemBase.h"
00101 #include "../StandardStopCondition.h"
00102 #include "../UnconstrainedProblem.h"
00103
00104
00105
00106
00107
00108 class Marquardt
00109 : public Method
00110 {
00111 public:
00112
00113 friend class MarquardtPanel;
00114
00115
00116
00119 ~Marquardt(void);
00120
00121
00122
00123
00124
00127 virtual std::auto_ptr<Method> Clone() const;
00128
00129 virtual void UpdateStartingConditions(const Result* result) const;
00130
00131 virtual void ResetStartingConditions() const;
00132
00133
00134
00137 virtual const wxString& Name() const;
00138
00141 virtual MethodIdType Id() const;
00142
00145 static MethodIdType ClassId();
00146
00147 virtual wxString ToString(bool standalone = true) const;
00148
00149
00150
00151 virtual bool CanHandle(const ProblemBase* pProblem)
00152 const;
00153
00154 virtual StopConditions AllowedStopConditions() const;
00155
00156 protected:
00157
00160 Marquardt(void);
00161
00166 Marquardt(const Marquardt& from);
00167
00170 DoubleParameter mInitialLambda;
00171
00174 mutable ColumnVector mStartingPoint;
00175
00176 ColumnVector mInitialStartingPoint;
00177
00180 CountedPtr<const StandardStopCondition> mcpStopCondition;
00181
00182 virtual wxString& rName();
00183 private:
00184
00185 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const
00186 throw(OptimizationError);
00187
00188
00191 static wxString mName;
00194 static Marquardt mMarquardt;
00195
00196 };
00197
00198
00199
00200
00201
00202
00203
00204 #endif // _Marquardt_h