# jacobian

##### Gradient of a Vector Valued Function

Calculate the m by n numerical approximation of the gradient of a real m-vector valued function with n-vector argument.

- Keywords
- multivariate

##### Usage

```
jacobian(func, x, method="Richardson", side=NULL, method.args=list(), ...)
"jacobian"(func, x, method="Richardson", side=NULL, method.args=list(), ...)
```

##### Arguments

- func
- a function with a real (vector) result.
- x
- a real or real vector argument to func, indicating the point at which the gradient is to be calculated.
- method
- one of
`"Richardson"`

,`"simple"`

, or`"complex"`

indicating the method to use for the approximation. - method.args
- arguments passed to method. See
`grad`

. (Arguments not specified remain with their default values.) - ...
- any additional arguments passed to
`func`

. WARNING: None of these should have names matching other arguments of this function. - side
- an indication of whether one-sided derivatives should be
attempted (see details in function
`grad`

).

##### Details

For $f:R^n -> R^m$ calculate the $m x n$
Jacobian $dy/dx$.
The function `jacobian`

calculates a numerical approximation of the
first derivative of `func`

at the point `x`

. Any additional
arguments in ... are also passed to `func`

, but the gradient is not
calculated with respect to these additional arguments.

If method is "Richardson", the calculation is done by
Richardson's extrapolation. See `link{grad}`

for more details.
For this method ```
method.args=list(eps=1e-4, d=0.0001,
zero.tol=sqrt(.Machine$double.eps/7e-7), r=4, v=2, show.details=FALSE)
```

is set as the default.

If method is "simple", the calculation is done using a simple epsilon
difference.
For method "simple" `method.args=list(eps=1e-4)`

is the
default. Only `eps`

is used by this method.

If method is "complex", the calculation is done using the complex step
derivative approach. See addition comments in `grad`

before
choosing this method.
For method "complex", `method.args`

is ignored.
The algorithm uses an `eps`

of `.Machine$double.eps`

which cannot
(and should not) be modified.

##### Value

##### See Also

##### Examples

`library(numDeriv)`

```
func2 <- function(x) c(sin(x), cos(x))
x <- (0:1)*2*pi
jacobian(func2, x)
jacobian(func2, x, "complex")
```

*Documentation reproduced from package numDeriv, version 2016.8-1, License: GPL-2*