Numerical differentiation (GSL) More...
This class computes the numerical derivative of a function. The stepsize h should be specified before use. If similar functions are being differentiated in succession, the user may be able to increase the speed of later derivatives by setting the new stepsize equal to the optimized stepsize from the previous differentiation, by setting h to h_opt.
The derivative computation will never fail, but the results will be incorrect for sufficiently difficult functions or if the step size is not properly chosen.
Some successive derivative computations can be made more efficient by using the optimized stepsize in deriv_gsl::h_opt , which is set by the most recent last derivative computation.
Setting deriv_base::verbose to a number greater than zero results in output for each call to central_deriv() which looks like:
deriv_gsl: step: 1.000000e-04 abscissas: 4.999500e-01 4.999000e-01 5.000500e-01 5.001000e-01 ordinates: 4.793377e-01 4.793816e-01 4.794694e-01 4.795132e-01 res: 8.775825e-01 trc: 1.462163e-09 rnd: 7.361543e-12
where the last line contains the result (res
), the truncation error (trc
) and the rounding error (rnd
). If deriv_base::verbose is greater than 1, a keypress is required after each iteration.
Computing first derivatives requires either 1 or 2 calls to central_deriv() and thus either 4 or 8 function calls. This class never calls the error handler.
An example demonstrating the usage of this class is given in examples/ex_deriv.cpp
and the Differentiation example .
Definition at line 110 of file deriv_gsl.h.
#include <deriv_gsl.h>
Public Member Functions | |
virtual int | deriv_err (double x, func_t &func, double &dfdx, double &err) |
Calculate the first derivative of func w.r.t. x and uncertainty. | |
virtual const char * | type () |
Return string denoting type ("deriv_gsl") | |
![]() | |
virtual double | deriv (double x, func_t &func) |
Calculate the first derivative of func w.r.t. x. More... | |
virtual double | deriv2 (double x, func_t &func) |
Calculate the second derivative of func w.r.t. x. | |
virtual double | deriv3 (double x, func_t &func) |
Calculate the third derivative of func w.r.t. x. | |
virtual double | get_err () |
Get uncertainty of last calculation. | |
virtual int | deriv2_err (double x, func_t &func, double &d2fdx2, double &err) |
Calculate the second derivative of func w.r.t. x and the uncertainty. | |
virtual int | deriv3_err (double x, func_t &func, double &d3fdx3, double &err) |
Calculate the third derivative of func w.r.t. x and the uncertainty. | |
Data Fields | |
double | h |
Initial stepsize. More... | |
double | h_opt |
The last value of the optimized stepsize. More... | |
![]() | |
bool | err_nonconv |
If true, call the error handler if the routine does not "converge". | |
int | verbose |
Output control. | |
Protected Member Functions | |
template<class func2_t > | |
int | deriv_tlate (double x, func2_t &func, double &dfdx, double &err) |
Internal template version of the derivative function. | |
virtual int | deriv_err_int (double x, funct11 &func, double &dfdx, double &err) |
Internal version of calc_err() for second and third derivatives. | |
template<class func2_t > | |
int | central_deriv (double x, double hh, double &result, double &abserr_round, double &abserr_trunc, func2_t &func) |
Compute derivative using 5-point rule. More... | |
![]() | |
virtual double | deriv_int (double x, funct11 &func) |
Calculate the first derivative of func w.r.t. x. More... | |
double | derivfun (double x, func_t *fp) |
The function for the second derivative. | |
double | derivfun2 (double x, func_t *fp) |
The function for the third derivative. | |
Additional Inherited Members | |
![]() | |
bool | from_deriv |
Avoids infinite loops in case the user calls the base class version. | |
double | derr |
The uncertainity in the most recent derivative computation. | |
|
inlineprotected |
Compute the derivative using the 5-point rule (x-h, x-h/2, x, x+h/2, x+h) and the error using the difference between the 5-point and the 3-point rule (x-h,x,x+h). Note that the central point is not used for either.
This must be a class template because it is used by both deriv_err() and deriv_err_int().
Definition at line 213 of file deriv_gsl.h.
double o2scl::deriv_gsl< func_t >::h |
This should be specified before a call to deriv() or deriv_err(). If it is zero, then will used, or if
x
is zero, then will be used.
Definition at line 128 of file deriv_gsl.h.
double o2scl::deriv_gsl< func_t >::h_opt |
This is initialized to zero in the constructor and set by deriv_err() to the most recent value of the optimized stepsize.
Definition at line 135 of file deriv_gsl.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).
Hosted at
.