34 #include "DGtal/math/AngleLinearMinimizer.h"
77 myIsCurveOpen =
false;
91 for (
unsigned int i = mc.
next( i1 ); i != i2; )
93 unsigned int inext = mc.
next( i );
110 for (
unsigned int i = mc.
next( i1 ); i != i2; )
112 unsigned int inext = mc.
next( i );
130 vector<double> grad( size() );
131 for (
unsigned int i = 0; i < size(); i++ )
133 unsigned int iprev = mc.
previous( i );
134 unsigned int inext = mc.
next( i );
136 double val = vi.
value;
137 if ( myIsCurveOpen && ( i == ( size() - 1 ) ) )
139 const ValueInfo & viprev = this->ro( iprev );
140 double valp = viprev.
value;
143 else if ( myIsCurveOpen && ( i == 0 ) )
145 const ValueInfo & vinext = this->ro( inext );
146 double valn = vinext.
value;
151 const ValueInfo & viprev = this->ro( iprev );
152 const ValueInfo & vinext = this->ro( inext );
153 double valp = viprev.
value;
154 double valn = vinext.
value;
170 vector<double> grad( size() );
171 for (
unsigned int i = 0; i < size(); i++ )
173 unsigned int iprev = mc.
previous( i );
174 unsigned int inext = mc.
next( i );
177 if ( myIsCurveOpen && ( i == ( size() - 1 ) ) )
179 const ValueInfo & viprev = this->ro( iprev );
183 else if ( myIsCurveOpen && ( i == 0 ) )
185 const ValueInfo & vinext = this->ro( inext );
191 const ValueInfo & viprev = this->ro( iprev );
192 const ValueInfo & vinext = this->ro( inext );
206 return optimize( 0, 0 );
213 ASSERT( size() > 2 );
226 this->oneStep( i1, i2 );
260 unsigned int iprev = mc.
previous( i );
263 unsigned int inext = mc.
next( i );
265 if ( myIsCurveOpen && ( i == ( size() - 1 ) ) )
267 const ValueInfo & viprev = this->ro( iprev );
270 else if ( myIsCurveOpen && ( i == 0 ) )
272 const ValueInfo & vinext = this->ro( inext );
277 const ValueInfo & viprev = this->ro( iprev );
278 const ValueInfo & vinext = this->ro( inext );
311 unsigned int iprev = mc.
previous( i );
314 unsigned int inext = mc.
next( i );
317 if ( myIsCurveOpen && ( i == ( size() - 1 ) ) )
319 const ValueInfo & viprev = this->ro( iprev );
322 else if ( myIsCurveOpen && ( i == 0 ) )
324 const ValueInfo & vinext = this->ro( inext );
329 const ValueInfo & viprev = this->ro( iprev );
330 const ValueInfo & vinext = this->ro( inext );
331 double valp = viprev.
value;
332 double valn = vinext.
value;
365 vector<double> grad ( getFormerGradient() );
370 unsigned int inext = mc.
next( i );
381 double E1 = getFormerEnergy( i1, i2 );
382 double E2 = getEnergy( i1, i2 );
383 cerr <<
"E1=" << E1 <<
" E2=" << E2 <<
" s=" << myStep << endl;
391 vector<double> grad ( getFormerGradient() );
393 for (
unsigned int i = 0; i < size(); i++ )
398 double n = fabs( grad[ i ] );
399 if ( n > ninf ) ninf = n;
412 vector<double> grad ( getFormerGradient() );
418 unsigned int inext = mc.
next( i );
430 double E1 = getFormerEnergy( i1, i2 );
431 double E2 = getEnergy( i1, i2 );
432 cerr <<
"E1=" << E1 <<
" E2=" << E2 <<
" s=" << myStep << endl;
449 vector<double> grad ( getFormerGradient() );
451 for (
unsigned int i = 0; i < size(); i++ )
456 double n = fabs( grad[ i ] );
457 if ( n > ninf ) ninf = n;
476 aStream <<
"[AngleLinearMinimizer::standard 0.5]";
487 aStream <<
"[LinearMinimizer::relaxation]";
497 aStream <<
"[LinearMinimizer::gradient descent " << myStep <<
"]";
507 aStream <<
"[LinearMinimizer::gradient descent with adaptive step " << myStep <<
"]";