40#include "gsl/gsl_roots.h"
41#include "gsl/gsl_errno.h"
72 int status = gsl_root_fsolver_set(
fS->Solver(),
fFunction->GetFunc(), xlow, xup);
87 int status = gsl_root_fsolver_set(
fS->Solver(),
fFunction->GetFunc(), xlow, xup);
110 MATH_ERROR_MSG(
"GSLRootFinder::Iterate",
" Function is not valid");
115 MATH_ERROR_MSG(
"GSLRootFinder::Iterate",
" Interval is not valid");
120 status = gsl_root_fsolver_iterate(
fS->Solver());
123 fRoot = gsl_root_fsolver_root(
fS->Solver() );
125 fXlow = gsl_root_fsolver_x_lower(
fS->Solver() );
126 fXup = gsl_root_fsolver_x_upper(
fS->Solver() );
149 return gsl_root_fsolver_name(
fS->Solver() );
163 MATH_ERROR_MSG(
"GSLRootFinder::Solve",
"error returned when performing an iteration");
174 while (status == GSL_CONTINUE && iter < maxIter);
175 if (status == GSL_CONTINUE) {
177 MATH_INFO_MSGVAL(
"GSLRootFinder::Solve",
"exceeded max iterations, reached tolerance is not sufficient",tol);
#define MATH_INFO_MSGVAL(loc, txt, x)
#define MATH_ERROR_MSG(loc, str)
Wrapper class to the gsl_function C structure.
Root-Finder implementation class using GSL.
double(* GSLFuncPointer)(double, void *)
const char * Name() const override
double GSLRootFinder::XLower() const { return fXlow; }
GSLFunctionWrapper * fFunction
int Iterate() override
This method is implemented only by the GSLRootFinder and GSLRootFinderDeriv classes and will return a...
~GSLRootFinder() override
void SetSolver(GSLRootFSolver *s)
double Root() const override
Returns the previously calculated root.
bool Solve(int maxIter=100, double absTol=1E-8, double relTol=1E-10) override
Find the root.
bool SetFunction(const IGenFunction &f, double xlow, double xup) override
Sets the function for the rest of the algorithms.
int TestInterval(double xlow, double xup, double epsAbs, double epsRel)
IBaseFunctionOneDim IGenFunction