Skip to contents

Provides numerical gradients and Jacobians.

Usage

nl.grad(x0, fn, heps = .Machine$double.eps^(1/3), ...)

Arguments

x0

point as a vector where the gradient is to be calculated.

fn

scalar function of one or several variables.

heps

step size to be used.

...

additional arguments passed to the function.

Value

grad returns the gradient as a vector; jacobian

returns the Jacobian as a matrix of usual dimensions.

Details

Both functions apply the ``central difference formula'' with step size as recommended in the literature.

Author

Hans W. Borchers

Examples


  fn1 <- function(x) sum(x ^ 2)
  nl.grad(seq(0, 1, by = 0.2), fn1)
#> [1] 0.0 0.4 0.8 1.2 1.6 2.0
  ## [1] 0.0  0.4  0.8  1.2  1.6  2.0
  nl.grad(rep(1, 5), fn1)
#> [1] 2 2 2 2 2
  ## [1] 2  2  2  2  2

  fn2 <- function(x) c(sin(x), cos(x))
  x <- (0:1) * 2 * pi
  nl.jacobian(x, fn2)
#>      [,1] [,2]
#> [1,]    1    0
#> [2,]    0    1
#> [3,]    0    0
#> [4,]    0    0
  ##    [,1] [,2]
  ## [1,]  1  0
  ## [2,]  0  1
  ## [3,]  0  0
  ## [4,]  0  0