// 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 _math_BrentMinimum_HeaderFile #define _math_BrentMinimum_HeaderFile #ifndef _Standard_HeaderFile #include #endif #ifndef _Standard_Macro_HeaderFile #include #endif #ifndef _Standard_Boolean_HeaderFile #include #endif #ifndef _Standard_Real_HeaderFile #include #endif #ifndef _Standard_Integer_HeaderFile #include #endif #ifndef _Standard_OStream_HeaderFile #include #endif class StdFail_NotDone; class math_Function; //! This class implements the Brent's method to find the minimum of
//! a function of a single variable.
//! No knowledge of the derivative is required.
class math_BrentMinimum { public: void* operator new(size_t,void* anAddress) { return anAddress; } void* operator new(size_t size) { return Standard::Allocate(size); } void operator delete(void *anAddress) { if (anAddress) Standard::Free((Standard_Address&)anAddress); } //! This constructor should be used in a sub-class to initialize
//! correctly all the fields of this class.
Standard_EXPORT math_BrentMinimum(const Standard_Real TolX,const Standard_Integer NbIterations = 100,const Standard_Real ZEPS = 1.0e-12); //! This constructor should be used in a sub-class to initialize
//! correctly all the fields of this class.
//! It has to be used if F(Bx) is known.
Standard_EXPORT math_BrentMinimum(const Standard_Real TolX,const Standard_Real Fbx,const Standard_Integer NbIterations = 100,const Standard_Real ZEPS = 1.0e-12); //! Given a bracketing triplet of abscissae Ax, Bx, Cx
//! (such as Bx is between Ax and Cx, F(Bx) is
//! less than both F(Bx) and F(Cx)) the Brent minimization is done
//! on the function F.
//! The tolerance required on F is given by Tolerance.
//! The solution is found when :
//! abs(Xi - Xi-1) <= TolX * abs(Xi) + ZEPS;
//! The maximum number of iterations allowed is given by NbIterations.
Standard_EXPORT math_BrentMinimum(math_Function& F,const Standard_Real Ax,const Standard_Real Bx,const Standard_Real Cx,const Standard_Real TolX,const Standard_Integer NbIterations = 100,const Standard_Real ZEPS = 1.0e-12); //! Brent minimization is performed on function F from a given
//! bracketing triplet of abscissas Ax, Bx, Cx (such that Bx is
//! between Ax and Cx, F(Bx) is less than both F(Bx) and F(Cx))
//! Warning
//! The initialization constructors must have been called
//! before the call to the Perform method.
Standard_EXPORT void Perform(math_Function& F,const Standard_Real Ax,const Standard_Real Bx,const Standard_Real Cx) ; //! This method is called at the end of each iteration to check if the
//! solution is found.
//! It can be redefined in a sub-class to implement a specific test to
//! stop the iterations.
Standard_EXPORT virtual Standard_Boolean IsSolutionReached(math_Function& F) ; //! Returns true if the computations are successful, otherwise returns false.
Standard_Boolean IsDone() const; //! returns the location value of the minimum.
//! Exception NotDone is raised if the minimum was not found.
Standard_Real Location() const; //! returns the value of the minimum.
//! Exception NotDone is raised if the minimum was not found.
Standard_Real Minimum() const; //! returns the number of iterations really done during the
//! computation of the minimum.
//! Exception NotDone is raised if the minimum was not found.
Standard_Integer NbIterations() const; //! Prints on the stream o information on the current state
//! of the object.
//! Is used to redefine the operator <<.
Standard_EXPORT void Dump(Standard_OStream& o) const; protected: Standard_Real a; Standard_Real b; Standard_Real x; Standard_Real fx; Standard_Real fv; Standard_Real fw; Standard_Real XTol; Standard_Real EPSZ; private: Standard_Boolean Done; Standard_Integer iter; Standard_Integer Itermax; Standard_Boolean myF; }; #include // other Inline functions and methods (like "C++: function call" methods) #endif