This help topic is for R version 1.1. For the current version of R, try https://stat.ethz.ch/R-manual/R-patched/library/base/html/deriv.html
deriv {base}R Documentation

Symbolic and Algorithmic Derivatives of Simple Expressions

Description

Compute derivatives of simple expressions, symbolically.

Usage

D(expr, namevec)
deriv(expr, namevec, function.arg = NULL, tag = ".expr")

Arguments

expr

expression which should be differentiated.

namevec

character vector, giving the variable names with respect to which derivatives will be computed.

function.arg

NOT YET IMPLEMENTED. If specified, a function ‘prototype’ (with empty body) which will be used to return a function with the given argument list, instead of an expression.

tag

character; the prefix to be used for the locally created variables in result..

Details

D is modelled after its S namesake for taking simple symbolic derivatives.

deriv is a generic function with a default and a formula method. It returns a call for computing the expr and its (partial) derivatives, simultaneously. It uses so-called “algorithmic derivatives”.

Currently, deriv.formula just calls deriv.default after extracting the expression to the right of ~.

Value

D returns an expression and therefore can easily be iterated for higher derivatives.

deriv returns a call object which becomes an expression when evaluated once. Evaluation of the latter expression returns the function values with a ".gradient" attribute containing the gradient matrix.

Note

This help page should be fixed up by one of R&R or someone else who fluently speaks the language in ‘\$R\_HOME/src/main/deriv.c’.

Its author, MM, has only got a vague idea and thinks that a help page is better than none.

References

Griewank, A. and Corliss, G. F. (1991) Automatic Differentiation of Algorithms: Theory, Implementation, and Application. SIAM proceedings, Philadelphia.

See Also

nlm for numeric minimization which should make use of derivatives.

Examples

## formula argument :
dx2x <- deriv(~ x^2, "x") ; dx2x
## Not run: expression({
         .value <- x^2
         .grad <- array(0, c(length(.value), 1), list(NULL, c("x")))
         .grad[, "x"] <- 2 * x
         attr(.value, "gradient") <- .grad
         .value
})
## End(Not run)
mode(dx2x)
x <- -1:2
eval(dx2x)


## Something `tougher':
trig.exp <- expression(sin(cos(x + y^2)))
( D.sc <- D(trig.exp, c("x", "y")) )

( dxy <- deriv(trig.exp, c("x", "y")) )
y <- 1
eval(dxy)
eval(D.sc)

[Package base version 1.1 ]