summaryrefslogtreecommitdiff
path: root/inc/AppParCurves_BSpGradient_BFGS.gxx
blob: d5e9bc6a0aa701d46c947cd98456e2457120dca7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// File:	AppParCurves_BSpGradient_BFGS.gxx
// Created:	Thu Dec 16 13:02:58 1999
// Author:	Atelier CAS2000
//		<cas@cageox.paris1.matra-dtv.fr>



// Redefinition de math_BFGS:
// ==========================

AppParCurves_BSpGradient_BFGS::AppParCurves_BSpGradient_BFGS(math_MultipleVarFunctionWithGradient& F,
							     const math_Vector& StartingPoint,
							     const Standard_Real Tolerance3d,
							     const Standard_Real Tolerance2d,
							     const Standard_Real Eps,
							     const Standard_Integer NbIterations):
       math_BFGS(F, Eps, NbIterations, Eps),
       myTol3d(Tolerance3d),
       myTol2d(Tolerance2d) 
{
  
  Perform(F, StartingPoint);
}

Standard_Boolean AppParCurves_BSpGradient_BFGS::IsSolutionReached(math_MultipleVarFunctionWithGradient& F) const {
  Standard_Boolean Result, Result2;
  AppParCurves_BSpParFunction *F1 = (AppParCurves_BSpParFunction*) &F;
  
  Result = (2.0 * fabs(TheMinimum - PreviousMinimum) <= 
	    1.e-10 * (fabs(TheMinimum) + fabs(PreviousMinimum))+1.e-12) ;
  Standard_Real MErr3d = F1->MaxError3d();
  Standard_Real MErr2d = F1->MaxError2d();    
  Result2 = ((MErr3d <= myTol3d) && (MErr2d <= myTol2d));
  
  return (Result || Result2);
}