Go to the first, previous, next, last section, table of contents.

The functions described in this chapter compute numerical derivatives by
finite differencing. An adaptive algorithm is used to find the best
choice of finite difference and to estimate the error in the derivative.
These functions are declared in the header file ``gsl_diff.h'`

__Function:__int**gsl_diff_central***(const gsl_function **`f`, double`x`, double *`result`, double *`abserr`)-
This function computes the numerical derivative of the function
`f`at the point`x`using an adaptive central difference algorithm. The derivative is returned in`result`and an estimate of its absolute error is returned in`abserr`.

__Function:__int**gsl_diff_forward***(const gsl_function **`f`, double`x`, double *`result`, double *`abserr`)-
This function computes the numerical derivative of the function
`f`at the point`x`using an adaptive forward difference algorithm. The function is evaluated only at points greater than`x`and at`x`itself. The derivative is returned in`result`and an estimate of its absolute error is returned in`abserr`. This function should be used if f(x) has a singularity or is undefined for values less than`x`.

__Function:__int**gsl_diff_backward***(const gsl_function **`f`, double`x`, double *`result`, double *`abserr`)-
This function computes the numerical derivative of the function
`f`at the point`x`using an adaptive backward difference algorithm. The function is evaluated only at points less than`x`and at`x`itself. The derivative is returned in`result`and an estimate of its absolute error is returned in`abserr`. This function should be used if f(x) has a singularity or is undefined for values greater than`x`.

The following code estimates the derivative of the function
f(x) = x^{3/2}
at x=2 and at x=0. The function f(x) is
undefined for x<0 so the derivative at x=0 is computed
using `gsl_diff_forward`

.

#include <stdio.h> #include <gsl/gsl_math.h> #include <gsl/gsl_diff.h> double f (double x, void * params) { return pow (x, 1.5); } int main (void) { gsl_function F; double result, abserr; F.function = &f; F.params = 0; printf ("f(x) = x^(3/2)\n"); gsl_diff_central (&F, 2.0, &result, &abserr); printf ("x = 2.0\n"); printf ("f'(x) = %.10f +/- %.5f\n", result, abserr); printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0)); gsl_diff_forward (&F, 0.0, &result, &abserr); printf ("x = 0.0\n"); printf ("f'(x) = %.10f +/- %.5f\n", result, abserr); printf ("exact = %.10f\n", 0.0); return 0; }

Here is the output of the program,

$ ./a.out f(x) = x^(3/2) x = 2.0 f'(x) = 2.1213203435 +/- 0.01490 exact = 2.1213203436 x = 0.0 f'(x) = 0.0012172897 +/- 0.05028 exact = 0.0000000000

The algorithms used by these functions are described in the following book,

- S.D. Conte and Carl de Boor, Elementary Numerical Analysis: An Algorithmic Approach, McGraw-Hill, 1972.

Go to the first, previous, next, last section, table of contents.