## Symbolic and Algorithmic Derivatives of Simple Expressions

## Usage

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

## Arguments

`expr` | expression which should be derivated
`namevec` | character vector, giving the variable names with respect to which derivatives will be computed.
`function.arg` | ... ?? ...
`tag` | ... ?? ...

## Description

`D` is modelled after its S pendant 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 `$RHOME/src/main/deriv.c'.

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

## References

A. Griewank, G. F. Corliss (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
    ##- expression({
    ##-         .value <- x^2
    ##-         .grad <- array(0, c(length(.value), 1), list(NULL, c("x")))
    ##-         .grad[, "x"] <- 2 * x
    ##-         attr(.value, "gradient") <- .grad
    ##-         .value
    ##- })
    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 Contents]