00001
00108 #ifndef _RosenbrockOptimal_h
00109 #define _RosenbrockOptimal_h
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 #include "../DoubleParameter.h"
00120 #include "../FunctionBase.h"
00121 #include "../ProblemBase.h"
00122 #include "../MethodWithLineSearch.h"
00123 #include "../ui/MethodWithLineSearchPanel.h"
00124 #include "RosenbrockOptimalIteration.h"
00125
00126
00127
00128
00129
00130 class RosenbrockOptimal
00131 : public MethodWithLineSearch
00132 {
00133 public:
00134
00135
00136 friend class MethodWithLineSearchPanel<RosenbrockOptimal>;
00137
00140 ~RosenbrockOptimal(void);
00141
00142
00143
00144
00145
00146
00149 virtual std::auto_ptr<Method> Clone() const;
00150
00151
00152
00155 virtual const wxString& Name() const;
00156
00159 virtual MethodIdType Id() const;
00160
00163 static MethodIdType ClassId();
00164
00165
00166
00167 virtual bool CanHandle(const ProblemBase* pProblem) const;
00168
00169 virtual StopConditions AllowedStopConditions() const;
00170
00171 protected:
00172
00175 RosenbrockOptimal(void);
00176
00181 RosenbrockOptimal(const RosenbrockOptimal& from);
00182
00202 void SearchAllDirections(const FunctionBase& function,
00203 ColumnVector& rxBest,
00204 const SquareMatrix& D,
00205 ColumnVector& rLambda,
00206 RosenbrockOptimalIteration& rIterationData)
00207 const;
00208
00209
00244 void RotateBase (
00245 SquareMatrix& rD,
00246 const ColumnVector& lambda,
00247 RosenbrockOptimalIteration& rIterationData) const;
00248
00249 virtual wxString& rName();
00250 private:
00251
00252 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const
00253 throw(OptimizationError);
00254 static wxString mName;
00255 static RosenbrockOptimal mRosenbrockOptimal;
00256 };
00257
00258
00259
00260
00261
00262
00263
00264 #endif // _RosenbrockOptimal_h_