ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Minimizer1D.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/Minimizer1D.cpp (file contents):
Revision 1015 by tim, Tue Feb 3 22:54:52 2004 UTC vs.
Revision 1023 by tim, Wed Feb 4 22:26:00 2004 UTC

# Line 1 | Line 1
1   #include "Minimizer1D.hpp"
2   #include "math.h"
3 <
3 > #include "Utility.hpp"
4   GoldenSectionMinimizer::GoldenSectionMinimizer(NLModel* nlp)
5                                 :Minimizer1D(nlp){
6    setName("GoldenSection");
# Line 44 | Line 44 | void GoldenSectionMinimizer::minimize(){
44      if (fAlpha > fBeta){
45        leftVar = alpha;
46        alpha = beta;
47 +      
48        beta =  leftVar + goldenRatio * (rightVar - leftVar);
49  
50        for (int i = 0; i < tempX.size(); i ++)
51          tempX[i] = currentX[i] + direction[i] * beta;
52 <
53 <      prevMinVar = minVar;
53 <      fPrevMinVar = fMinVar;
52 >      fAlpha = fBeta;
53 >      fBeta  = model->calcF(tempX);
54        
55 +      prevMinVar = alpha;
56 +      fPrevMinVar = fAlpha;      
57        minVar = beta;
58 <      fMinVar = model->calcF(tempX);
57 <      
58 >      fMinVar = fBeta;      
59      }
60      else{
61        rightVar = beta;
62        beta = alpha;
63 +
64        alpha = leftVar + (1 - goldenRatio) * (rightVar  - leftVar);
65  
66        for (int i = 0; i < tempX.size(); i ++)
67          tempX[i] = currentX[i] + direction[i] * alpha;
68  
69 <      prevMinVar = minVar;
70 <      fPrevMinVar = fMinVar;
71 <      
69 >      fBeta = fAlpha;
70 >      fAlpha = model->calcF(tempX);
71 >
72 >      prevMinVar = beta;
73 >      fPrevMinVar = fBeta;
74 >
75        minVar = alpha;
76 <      fMinVar = model->calcF(tempX);
76 >      fMinVar = fAlpha;      
77      }
78      
79    }
# Line 128 | Line 133 | void BrentMinimizer::minimize(){
133      fv = fRightVar;
134    }
135  
136 <  midVar = leftVar + rightVar;
136 >  midVar = (leftVar + rightVar) / 2;
137    
138 <  for(currentIter = 0; currentIter < maxIteration; currentIter){
138 >  for(currentIter = 0; currentIter < maxIteration; currentIter++){
139  
140       // a trial parabolic fit
141       if (fabs(e) > stepTol){
# Line 170 | Line 175 | void BrentMinimizer::minimize(){
175       for (int i = 0; i < tempX.size(); i ++)
176         tempX[i] = currentX[i] + direction[i] * u;  
177      
178 <     fu = model->calcF();  
178 >     fu = model->calcF(tempX);  
179  
180       if(fu <= fMinVar){
181  
# Line 202 | Line 207 | void BrentMinimizer::minimize(){
207        }  
208      }    
209  
210 <    midVar = leftVar + rightVar;
210 >    midVar = (leftVar + rightVar) /2;
211  
212       if (checkConvergence() > 0){
213         minStatus = MINSTATUS_CONVERGE;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines