// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _FairCurve_Newton_HeaderFile
#define _FairCurve_Newton_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Standard_Real.hxx>
#include <math_NewtonMinimum.hxx>
#include <math_Vector.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
class math_MultipleVarFunctionWithHessian;


//! Algorithme of Optimization used to make "FairCurve"
class FairCurve_Newton  : public math_NewtonMinimum
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! -- Given the  starting   point  StartingPoint,
  //! The tolerance  required on  the  solution is given  by
  //! Tolerance.
  //! Iteration are  stopped if
  //! (!WithSingularity)  and H(F(Xi)) is not definite
  //! positive  (if the smaller eigenvalue of H < Convexity)
  //! or IsConverged() returns True for 2 successives Iterations.
  //! Warning: Obsolete Constructor (because IsConverged can not be redefined
  //! with this. )
  Standard_EXPORT FairCurve_Newton(math_MultipleVarFunctionWithHessian& F, const math_Vector& StartingPoint, const Standard_Real SpatialTolerance = 1.0e-7, const Standard_Real CriteriumTolerance = 1.0e-2, const Standard_Integer NbIterations = 40, const Standard_Real Convexity = 1.0e-6, const Standard_Boolean WithSingularity = Standard_True);
  

  //! The tolerance  required on  the  solution is given  by
  //! Tolerance.
  //! Iteration are  stopped if
  //! (!WithSingularity)  and H(F(Xi)) is not definite
  //! positive  (if the smaller eigenvalue of H < Convexity)
  //! or IsConverged() returns True for 2 successives Iterations.
  //! Warning: This constructor do not computation
  Standard_EXPORT FairCurve_Newton(math_MultipleVarFunctionWithHessian& F, const Standard_Real SpatialTolerance = 1.0e-7, const Standard_Real Tolerance = 1.0e-7, const Standard_Integer NbIterations = 40, const Standard_Real Convexity = 1.0e-6, const Standard_Boolean WithSingularity = Standard_True);
  
  //! This method is  called    at the end  of   each
  //! iteration to  check the convergence :
  //! || Xi+1 - Xi || < SpatialTolerance/100 Or
  //! || Xi+1 - Xi || < SpatialTolerance and
  //! |F(Xi+1) - F(Xi)| < CriteriumTolerance * |F(xi)|
  //! It can be redefined in a sub-class to implement a specific test.
  Standard_EXPORT virtual   Standard_Boolean IsConverged()  const;




protected:





private:



  Standard_Real mySpTol;


};







#endif // _FairCurve_Newton_HeaderFile
