# 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(), ...) ` # S3 method for default
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

A real m by n matrix.

##### See Also

##### Examples

`library(numDeriv)`

```
# NOT RUN {
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*

### Community examples

**ERVIN.LOPEZLUX@GMAIL.COM**at Aug 26, 2019 numDeriv v2016.8-1.1

# NOT RUN { func2 <- function(x) c(sin(x), cos(x)) x <- (0:1)*2*pi jacobian(func2, x) jacobian(func2, x, "complex") # }