42 _function(&function), _valid(function.isValid()),
43 _tol(2.2204460492503131e-16)
46 oocoutE(
nullptr,Eval) <<
"RooBrentRootFinder:: cannot find roots for function of dimension "
65 double fa= (*_function)(&
a) -
value;
66 double fb= (*_function)(&
b) -
value;
69 <<
a <<
"," <<
b <<
"), value = " <<
value <<
" f[xlo] = " << fa <<
" f[xhi] = " << fb << endl;
75 double c(0),
d(0),
e(0);
78 if ((fb < 0 && fc < 0) || (fb > 0 && fc > 0)) {
87 if (std::abs(fc) < std::abs(fb)) {
97 double tol = 0.5 *
_tol * std::abs(
b);
98 double m = 0.5 * (
c -
b);
101 if (fb == 0 || std::abs(
m) <= tol) {
108 if (std::abs(
e) < tol || std::abs(fa) <= std::abs(fb)) {
125 p = s * (2 *
m *
q * (
q -
r) - (
b -
a) * (
r - 1));
126 q = (
q - 1) * (
r - 1) * (s - 1);
136 double min1= 3 *
m *
q - std::abs(tol *
q);
137 double min2= std::abs(
e *
q);
138 if (2 *
p < (min1 < min2 ? min1 : min2)) {
153 if (std::abs(
d) > tol) {
157 b += (
m > 0 ? +tol : -tol);
159 fb= (*_function)(&
b) -
value;
163 oocoutE(
nullptr,Eval) <<
"RooBrentRootFinder::findRoot(" <<
_function->
getName() <<
"): maximum iterations exceeded." << endl;
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
virtual void saveXVec() const
virtual void restoreXVec() const
UInt_t getDimension() const
virtual const char * getName() const
Name of function binding.
Implement the abstract 1-dimensional root finding interface using the Brent-Decker method.
const RooAbsFunc * _function
Pointer to input function.
bool findRoot(double &result, double xlo, double xhi, double value=0) const
Do the root finding using the Brent-Decker method.
static constexpr int MaxIterations
RooBrentRootFinder(const RooAbsFunc &function)
Constructor taking function binding as input.
bool _valid
True if current state is valid.
Mother of all ROOT objects.