ROOT
6.06/09
Reference Guide
|
User class for calculating the derivatives of a function.
It can calculate first (method Derivative1), second (method Derivative2) and third (method Derivative3) of a function.
It uses the Richardson extrapolation method for function derivation in a given interval. The method use 2 derivative estimates (one computed with step h and one computed with step h/2) to compute a third, more accurate estimation. It is equivalent to the 5-point method, which can be obtained with a Taylor expansion. A step size should be given, depending on x and f(x). An optimal step size value minimizes the truncation error of the expansion and the rounding error in evaluating x+h and f(x+h). A too small h will yield a too large rounding error while a too large h will give a large truncation error in the derivative approximation. A good discussion can be found in discussed in Chapter 5.7 of Numerical Recipes in C. By default a value of 0.001 is uses, acceptable in many cases.
This class is implemented using code previosuly in TF1::Derivate{,2,3}(). Now TF1 uses this class.
Definition at line 55 of file RichardsonDerivator.h.
Public Member Functions | |
~RichardsonDerivator () | |
Destructor: Removes function if needed. More... | |
RichardsonDerivator (double h=0.001) | |
Default Constructor. More... | |
RichardsonDerivator (const ROOT::Math::IGenFunction &f, double h=0.001, bool copyFunc=false) | |
Construct from function and step size. More... | |
RichardsonDerivator (const RichardsonDerivator &rhs) | |
Copy constructor. More... | |
RichardsonDerivator & | operator= (const RichardsonDerivator &rhs) |
Assignment operator. More... | |
double | Error () const |
Returns the estimate of the absolute Error of the last derivative calculation. More... | |
double | Derivative1 (double x) |
Returns the first derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+h) - f(x-h)}{2h} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition". More... | |
double | operator() (double x) |
double | Derivative1 (const IGenFunction &f, double x, double h) |
First Derivative calculation passing function object and step-size. More... | |
double | DerivativeForward (double x) |
Computation of the first derivative using a forward formula. More... | |
double | DerivativeForward (const IGenFunction &f, double x, double h) |
Computation of the first derivative using a forward formula. More... | |
double | DerivativeBackward (double x) |
Computation of the first derivative using a bacward formula. More... | |
double | DerivativeBackward (const IGenFunction &f, double x, double h) |
Computation of the first derivative using a forward formula. More... | |
double | Derivative2 (double x) |
Returns the second derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition". More... | |
double | Derivative2 (const IGenFunction &f, double x, double h) |
Second Derivative calculation passing function and step-size. More... | |
double | Derivative3 (double x) |
Returns the third derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^{3}} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition". More... | |
double | Derivative3 (const IGenFunction &f, double x, double h) |
Third Derivative calculation passing function and step-size. More... | |
void | SetFunction (const IGenFunction &f) |
Set function for derivative calculation (copy the function if option has been enabled in the constructor) More... | |
void | SetStepSize (double h) |
Set step size for derivative calculation. More... | |
Protected Attributes | |
bool | fFunctionCopied |
double | fStepSize |
double | fLastError |
const IGenFunction * | fFunction |
#include <Math/RichardsonDerivator.h>
ROOT::Math::RichardsonDerivator::~RichardsonDerivator | ( | ) |
Destructor: Removes function if needed.
Definition at line 42 of file RichardsonDerivator.cxx.
ROOT::Math::RichardsonDerivator::RichardsonDerivator | ( | double | h = 0.001 | ) |
Default Constructor.
Give optionally the step size for derivation. By default is 0.001, which is fine for x ~ 1 Increase if x is in averga larger or decrease if x is smaller
Definition at line 22 of file RichardsonDerivator.cxx.
ROOT::Math::RichardsonDerivator::RichardsonDerivator | ( | const ROOT::Math::IGenFunction & | f, |
double | h = 0.001 , |
||
bool | copyFunc = false |
||
) |
Construct from function and step size.
Definition at line 30 of file RichardsonDerivator.cxx.
ROOT::Math::RichardsonDerivator::RichardsonDerivator | ( | const RichardsonDerivator & | rhs | ) |
Copy constructor.
Definition at line 49 of file RichardsonDerivator.cxx.
Returns the first derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+h) - f(x-h)}{2h} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition".
the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.
Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows: Begin_Latex err = k::sqrt{f(x)^{2} + x^{2}deriv^{2}}sqrt{#sum ai^{2}}, End_Latex where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.
Definition at line 113 of file RichardsonDerivator.h.
Referenced by TF1::Derivative(), Derivative1(), TUnuranContDist::DPdf(), RooDerivative::evaluate(), ROOT::Fit::FitUtil::EvaluateChi2Effective(), and operator()().
double ROOT::Math::RichardsonDerivator::Derivative1 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
First Derivative calculation passing function object and step-size.
Definition at line 80 of file RichardsonDerivator.cxx.
Returns the second derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition".
the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.
Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows: Begin_Latex err = k::sqrt{f(x)^{2} + x^{2}deriv^{2}}sqrt{#sum ai^{2}}, End_Latex where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.
Definition at line 166 of file RichardsonDerivator.h.
Referenced by TF1::Derivative2(), RooDerivative::evaluate(), and TKDE::GetBias().
double ROOT::Math::RichardsonDerivator::Derivative2 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Second Derivative calculation passing function and step-size.
Definition at line 157 of file RichardsonDerivator.cxx.
Returns the third derivative of the function at point x, computed by Richardson's extrapolation method (use 2 derivative estimates to compute a third, more accurate estimation) first, derivatives with steps h and h/2 are computed by central difference formulas Begin_Latex D(h) = #frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^{3}} End_Latex the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition".
the argument eps may be specified to control the step size (precision). the step size is taken as eps*(xmax-xmin). the default value (0.001) should be good enough for the vast majority of functions. Give a smaller value if your function has many changes of the second derivative in the function range.
Getting the error via TF1::DerivativeError: (total error = roundoff error + interpolation error) the estimate of the roundoff error is taken as follows: Begin_Latex err = k::sqrt{f(x)^{2} + x^{2}deriv^{2}}sqrt{#sum ai^{2}}, End_Latex where k is the double precision, ai are coefficients used in central difference formulas interpolation error is decreased by making the step size h smaller.
Definition at line 202 of file RichardsonDerivator.h.
Referenced by TF1::Derivative3(), and RooDerivative::evaluate().
double ROOT::Math::RichardsonDerivator::Derivative3 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Third Derivative calculation passing function and step-size.
Definition at line 178 of file RichardsonDerivator.cxx.
Computation of the first derivative using a bacward formula.
Definition at line 130 of file RichardsonDerivator.h.
|
inline |
Computation of the first derivative using a forward formula.
Definition at line 135 of file RichardsonDerivator.h.
Computation of the first derivative using a forward formula.
Definition at line 122 of file RichardsonDerivator.h.
Referenced by DerivativeBackward().
double ROOT::Math::RichardsonDerivator::DerivativeForward | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Computation of the first derivative using a forward formula.
Definition at line 116 of file RichardsonDerivator.cxx.
|
inline |
Returns the estimate of the absolute Error of the last derivative calculation.
Definition at line 83 of file RichardsonDerivator.h.
Referenced by TF1::Derivative(), TF1::Derivative2(), and TF1::Derivative3().
Definition at line 114 of file RichardsonDerivator.h.
RichardsonDerivator & ROOT::Math::RichardsonDerivator::operator= | ( | const RichardsonDerivator & | rhs | ) |
Assignment operator.
Definition at line 59 of file RichardsonDerivator.cxx.
void ROOT::Math::RichardsonDerivator::SetFunction | ( | const IGenFunction & | f | ) |
Set function for derivative calculation (copy the function if option has been enabled in the constructor)
@param f Function to be differentiated
Definition at line 70 of file RichardsonDerivator.cxx.
Referenced by TKDE::GetBias(), ROOT::Fit::FitResult::GetConfidenceIntervals(), operator=(), and RichardsonDerivator().
Set step size for derivative calculation.
@param h step size for calculation
Definition at line 221 of file RichardsonDerivator.h.
|
protected |
Definition at line 228 of file RichardsonDerivator.h.
Referenced by Derivative1(), Derivative2(), Derivative3(), DerivativeBackward(), DerivativeForward(), operator()(), operator=(), RichardsonDerivator(), SetFunction(), and ~RichardsonDerivator().
|
protected |
Definition at line 225 of file RichardsonDerivator.h.
Referenced by operator=(), RichardsonDerivator(), SetFunction(), and ~RichardsonDerivator().
|
protected |
Definition at line 227 of file RichardsonDerivator.h.
Referenced by Derivative1(), Derivative2(), Derivative3(), DerivativeForward(), Error(), operator=(), and RichardsonDerivator().
|
protected |
Definition at line 226 of file RichardsonDerivator.h.
Referenced by Derivative1(), Derivative2(), Derivative3(), DerivativeBackward(), DerivativeForward(), operator()(), operator=(), RichardsonDerivator(), and SetStepSize().