% File src/library/stats/man/numericDeriv.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2020 R Core Team
% Distributed under GPL 2 or later

\name{numericDeriv}
\alias{numericDeriv}
\title{Evaluate Derivatives Numerically}
\description{
  \code{numericDeriv} numerically evaluates the gradient of an expression.
}
\usage{
numericDeriv(expr, theta, rho = parent.frame(), dir = 1,
             eps = .Machine$double.eps ^ (1/if(central) 3 else 2), central = FALSE)
}
\arguments{
  \item{expr}{\code{\link{expression}} or \code{\link{call}} to be
    differentiated.  Should evaluate to a \code{\link{numeric}} vector.}
  \item{theta}{\code{\link{character}} vector of names of numeric variables
    used in \code{expr}.}
  \item{rho}{\code{\link{environment}} containing all the variables needed to
    evaluate \code{expr}.}
  \item{dir}{numeric vector of directions, typically with values in
    \code{-1, 1} to use for the finite differences;
    will be recycled to the length of \code{theta}.}
  \item{eps}{a positive number, to be used as unit step size \eqn{h} for
    the approximate numerical derivative \eqn{ (f(x+h)-f(x))/h } or the
    central version, see \code{central}.}
  \item{central}{logical indicating if \emph{central} divided differences
    should be computed, i.e., \eqn{ (f(x+h) - f(x-h)) / 2h }.  These are
    typically more accurate but need more evaluations of \eqn{f()}.}
}
\details{
  This is a front end to the C function \code{numeric_deriv}, which is
  described in \emph{Writing R Extensions}.

  The numeric variables must be of type \code{double} and not \code{integer}.
  %% checked in C code .. why not just coerce them?   (TODO?)
}
\value{
  The value of \code{eval(expr, envir = rho)} plus a matrix
  attribute \code{"gradient"}.  The columns of this matrix are
  the derivatives of the value with respect to the variables listed in
  \code{theta}.
}
\author{Saikat DebRoy \email{saikat@stat.wisc.edu};
  tweaks and \code{eps}, \code{central} options by R Core Team.}
\examples{
myenv <- new.env()
myenv$mean <- 0.
myenv$sd   <- 1.
myenv$x    <- seq(-3., 3., length.out = 31)
nD <- numericDeriv(quote(pnorm(x, mean, sd)), c("mean", "sd"), myenv)
str(nD)

## Visualize :
require(graphics)
matplot(myenv$x, cbind(c(nD), attr(nD, "gradient")), type="l")
abline(h=0, lty=3)
## "gradient" is close to the true derivatives, you don't see any diff.:
curve( - dnorm(x), col=2, lty=3, lwd=2, add=TRUE)
curve(-x*dnorm(x), col=3, lty=3, lwd=2, add=TRUE)
##
## IGNORE_RDIFF_BEGIN
# shows 1.609e-8 on most platforms
all.equal(attr(nD,"gradient"),
          with(myenv, cbind(-dnorm(x), -x*dnorm(x))))
## IGNORE_RDIFF_END
}
\keyword{models}

