40 static int gDefaultNpx = 100;
41 static int gDefaultNSearch = 10;
44 BrentMinimizer1D::BrentMinimizer1D(): IMinimizer1D(),
46 fLogScan(false), fNIter(0),
48 fXMin(0), fXMax(0), fXMinimum(0)
54 void BrentMinimizer1D::SetDefaultNpx(
int n) { gDefaultNpx = n; }
56 void BrentMinimizer1D::SetDefaultNSearch(
int n) { gDefaultNSearch = n; }
59 void BrentMinimizer1D::SetFunction(
const ROOT::Math::IGenFunction& f,
double xlow,
double xup)
78 double BrentMinimizer1D::FValMinimum()
const
79 {
return (*fFunction)(fXMinimum); }
81 double BrentMinimizer1D::FValLower()
const
82 {
return (*fFunction)(fXMin); }
84 double BrentMinimizer1D::FValUpper()
const
85 {
return (*fFunction)(fXMax); }
87 bool BrentMinimizer1D::Minimize(
int maxIter,
double absTol ,
double relTol)
96 MATH_ERROR_MSG(
"BrentMinimizer1D::Minimize",
"Function has not been set");
100 if (fLogScan && fXMin <= 0) {
101 MATH_ERROR_MSG(
"BrentMinimizer1D::Minimize",
"xmin is < 0 and log scan is set - disable it");
111 int maxIter1 = gDefaultNSearch;
112 int maxIter2 = maxIter;
118 if (niter1 > maxIter1){
119 MATH_ERROR_MSG(
"BrentMinimizer1D::Minimize",
"Search didn't converge");
123 double x = BrentMethods::MinimStep(fFunction, 0, xmin, xmax, 0, fNpx,fLogScan);
124 x = BrentMethods::MinimBrent(fFunction, 0, xmin, xmax, x, 0, ok, niter2, absTol, relTol, maxIter2 );
135 const char * BrentMinimizer1D::Name()
const
136 {
return "BrentMinimizer1D"; }