14 |
|
virtual ~Minimizer1D() {} |
15 |
|
|
16 |
|
virtual void init() {} |
17 |
< |
virtual bool isSolvable(); |
18 |
< |
|
19 |
< |
virtual void Minimize() = 0; |
20 |
< |
virtual void Minimize(vector<double>& direction, double left, double right); |
17 |
> |
virtual bool isSolvable() {return true;} |
18 |
|
|
19 |
< |
virtual int checkConvergence(); |
19 |
> |
virtual void minimize() = 0; |
20 |
> |
virtual void minimize(vector<double>& direction, double left, double right) = 0; |
21 |
|
|
22 |
< |
void setRange(double left, double right) {leftFVal = left, rightVal = right;} |
22 |
> |
void setRange(double left, double right) {leftVar = left, rightVar= right;} |
23 |
|
void setDirection(vector<double>& direction) {this->direction = direction;} |
24 |
|
double getMinVar() {return minVar;} |
25 |
|
double getPrevMinVar() {return prevMinVar;} |
36 |
|
NLModel* model; |
37 |
|
double leftVar; |
38 |
|
double rightVar; |
41 |
– |
double fLeft; |
42 |
– |
double fRight; |
39 |
|
double minVar; |
44 |
– |
double fMinVar; |
40 |
|
double prevMinVar; |
41 |
< |
double fPrevMinVar; |
47 |
< |
|
41 |
> |
|
42 |
|
vector<double> direction; |
43 |
|
|
44 |
|
int maxIteration; |
45 |
|
int currentIter; |
46 |
< |
int stepTol; |
46 |
> |
double stepTol; |
47 |
|
}; |
48 |
|
|
49 |
|
class GoldenSectionMinimizer : public Minimizer1D{ |
50 |
|
|
51 |
|
public: |
52 |
|
|
53 |
< |
GoldenSectionMinimizer(NLModel* nlp) : Minimizer1D(nlp) {} |
54 |
< |
void Minimize(); |
55 |
< |
|
53 |
> |
GoldenSectionMinimizer(NLModel* nlp); |
54 |
> |
void minimize(); |
55 |
> |
virtual void minimize(vector<double>& direction, double left, double right){ |
56 |
> |
setRange(left, right); |
57 |
> |
setDirection(direction); |
58 |
> |
minimize(); |
59 |
> |
} |
60 |
> |
virtual int checkConvergence(); |
61 |
> |
|
62 |
|
protected: |
63 |
+ |
|
64 |
+ |
double fMinVar; |
65 |
+ |
double fPrevMinVar; |
66 |
|
|
67 |
|
double fAlpha; |
68 |
|
double fBeta; |
73 |
|
|
74 |
|
class BrentMinimizer : public Minimizer1D{ |
75 |
|
public: |
76 |
+ |
|
77 |
|
BrentMinimizer(NLModel* nlp); |
78 |
+ |
|
79 |
|
void minimize(); |
80 |
+ |
virtual void minimize(vector<double>& direction, double left, double right){ |
81 |
+ |
setRange(left, right); |
82 |
+ |
setDirection(direction); |
83 |
+ |
minimize(); |
84 |
+ |
} |
85 |
+ |
virtual int checkConvergence(); |
86 |
|
protected: |
87 |
+ |
|
88 |
+ |
double fMinVar; |
89 |
+ |
double fPrevMinVar; |
90 |
+ |
double midVar; |
91 |
|
|
92 |
|
}; |
93 |
|
#endif |