R: Richardson's Numerical Derivative

numderiv {pracma} | R Documentation

## Richardson's Numerical Derivative

### Description

Richardson's method applied to the computation of the numerical derivative.

### Usage

    numderiv(f, x0, maxiter = 16, h = 1/2, ..., tol = .Machine$double.eps)

    numdiff(f, x, maxiter = 16, h = 1/2, ..., tol = .Machine$double.eps)

### Arguments

`f` | function to be differentiated.
`x0, x` | point(s) at which the derivative is to be computed.
`maxiter` | maximum number of iterations.
`h` | starting step size, should be the default `h=0.5`.
`tol` | relative tolerance.
`...` | variables to be passed to function `f`.

### Details

`numderiv` returns the derivative of `f` at `x0`, where `x0` must be a single scalar in the domain of the function.

`numdiff` is a vectorized form of `numderiv` such that the derivatives will be returned at all points of the vector `x`.

### Value

Numeric scalar or vector of approximated derivatives.

### Note

See `grad` in the ‘numDeriv’ package for another implementation of Richardson's method in the context of numerical differentiation.

### References

Mathews, J. H., and K. D. Fink (1999). Numerical Methods Using Matlab. Third Edition, Prentice Hall.

### See Also

`fderiv`, `complexstep`

### Examples

    # Differentiate an anti-derivative function
    f <- function(x) sin(x)*sqrt(1+sin(x))
    F <- function(x)
            integrate(f, 0, x, rel.tol = 1e-12)$value
    x0 <- 1
    dF0 <- numderiv(F, x0, tol = 6.5e-15)   #=> 1.141882942715462
    f(x0)                                   #   1.141882942715464 true value
    # fderiv(F, x0)                         #   1.141882942704476
    # numDeriv::grad(F, x0)                 #   1.141882942705797

    # Compare over a whole period
    x <- seq(0, 2*pi, length.out = 11)
    max(abs(numdiff(sin, x) - cos(x)))          #=> 3.44e-15
    # max(abs(numDeriv::grad(sin, x) - cos(x))) #   7.70e-12

    # Example from complex step
    f <- function(x) exp(x) / sqrt(sin(x)^3 + cos(x)^3)
    x0 <- 1.5
    numderiv(f, x0)                          #   4.05342789389876, error 0.5e-12
                                             #   4.053427893898621... true value

[Package pracma version 2.0.4 Index]