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 previously in TF1::Derivate{,2,3}(). Now TF1 uses this class.
Definition at line 55 of file RichardsonDerivator.h.
Public Member Functions | |
RichardsonDerivator (const RichardsonDerivator &rhs) | |
Copy constructor. | |
RichardsonDerivator (const ROOT::Math::IGenFunction &f, double h=0.001, bool copyFunc=false) | |
Construct from function and step size. | |
RichardsonDerivator (double h=0.001) | |
Default Constructor. | |
~RichardsonDerivator () | |
Destructor: Removes function if needed. | |
double | Derivative1 (const IGenFunction &f, double x, double h) |
First Derivative calculation passing function object and step-size. | |
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. | |
double | Derivative2 (const IGenFunction &f, double x, double h) |
Second Derivative calculation passing function and step-size. | |
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. | |
double | Derivative3 (const IGenFunction &f, double x, double h) |
Third Derivative calculation passing function and step-size. | |
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. | |
double | DerivativeBackward (const IGenFunction &f, double x, double h) |
Computation of the first derivative using a forward formula. | |
double | DerivativeBackward (double x) |
Computation of the first derivative using a backward formula. | |
double | DerivativeForward (const IGenFunction &f, double x, double h) |
Computation of the first derivative using a forward formula. | |
double | DerivativeForward (double x) |
Computation of the first derivative using a forward formula. | |
double | Error () const |
Returns the estimate of the absolute Error of the last derivative calculation. | |
double | operator() (double x) |
RichardsonDerivator & | operator= (const RichardsonDerivator &rhs) |
Assignment operator. | |
void | SetFunction (const IGenFunction &f) |
Set function for derivative calculation (copy the function if option has been enabled in the constructor) | |
void | SetStepSize (double h) |
Set step size for derivative calculation. | |
Protected Attributes | |
const IGenFunction * | fFunction |
pointer to function | |
bool | fFunctionCopied |
flag to control if function is copied in the class | |
double | fLastError |
error estimate of last derivative calculation | |
double | fStepSize |
step size used for derivative calculation | |
#include <Math/RichardsonDerivator.h>
ROOT::Math::RichardsonDerivator::~RichardsonDerivator | ( | ) |
Destructor: Removes function if needed.
Definition at line 43 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 average larger or decrease if x is smaller
Definition at line 23 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 31 of file RichardsonDerivator.cxx.
ROOT::Math::RichardsonDerivator::RichardsonDerivator | ( | const RichardsonDerivator & | rhs | ) |
Copy constructor.
Definition at line 50 of file RichardsonDerivator.cxx.
double ROOT::Math::RichardsonDerivator::Derivative1 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
First Derivative calculation passing function object and step-size.
Definition at line 81 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.
\[ D(h) = \frac{f(x+h) - f(x-h)}{2h} \]
the final estimate
\[ D = \frac{4D(h/2) - D(h)}{3} \]
"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:
\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]
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 116 of file RichardsonDerivator.h.
double ROOT::Math::RichardsonDerivator::Derivative2 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Second Derivative calculation passing function and step-size.
Definition at line 159 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.
\[ D(h) = \frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} \]
the final estimate
\[ D = \frac{4D(h/2) - D(h)}{3} \]
"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:
\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]
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 172 of file RichardsonDerivator.h.
double ROOT::Math::RichardsonDerivator::Derivative3 | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Third Derivative calculation passing function and step-size.
Definition at line 180 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.
\[ D(h) = \frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^{3}} \]
the final estimate
\[ D = \frac{4D(h/2) - D(h)}{3} \]
"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:
\[ err = k\sqrt{f(x)^{2} + x^{2}deriv^{2}}\sqrt{\sum ai^{2}}, \]
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 211 of file RichardsonDerivator.h.
|
inline |
Computation of the first derivative using a forward formula.
Definition at line 138 of file RichardsonDerivator.h.
Computation of the first derivative using a backward formula.
Definition at line 133 of file RichardsonDerivator.h.
double ROOT::Math::RichardsonDerivator::DerivativeForward | ( | const IGenFunction & | f, |
double | x, | ||
double | h | ||
) |
Computation of the first derivative using a forward formula.
Definition at line 118 of file RichardsonDerivator.cxx.
Computation of the first derivative using a forward formula.
Definition at line 125 of file RichardsonDerivator.h.
|
inline |
Returns the estimate of the absolute Error of the last derivative calculation.
Definition at line 83 of file RichardsonDerivator.h.
Definition at line 117 of file RichardsonDerivator.h.
RichardsonDerivator & ROOT::Math::RichardsonDerivator::operator= | ( | const RichardsonDerivator & | rhs | ) |
Assignment operator.
Definition at line 60 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 71 of file RichardsonDerivator.cxx.
|
inline |
Set step size for derivative calculation.
@param h step size for calculation
Definition at line 230 of file RichardsonDerivator.h.
|
protected |
pointer to function
Definition at line 237 of file RichardsonDerivator.h.
|
protected |
flag to control if function is copied in the class
Definition at line 234 of file RichardsonDerivator.h.
|
protected |
error estimate of last derivative calculation
Definition at line 236 of file RichardsonDerivator.h.
|
protected |
step size used for derivative calculation
Definition at line 235 of file RichardsonDerivator.h.