hessian function

Numerical and Symbolic Hessian

Numerical and Symbolic Hessian

Computes the numerical Hessian of functions or the symbolic Hessian of characters.

hessian(f, var, params = list(), accuracy = 4, stepsize = NULL, drop = TRUE) f %hessian% var

Arguments

  • f: array of characters or a function returning a numeric array.
  • var: vector giving the variable names with respect to which the derivatives are to be computed and/or the point where the derivatives are to be evaluated. See derivative.
  • params: list of additional parameters passed to f.
  • accuracy: degree of accuracy for numerical derivatives.
  • stepsize: finite differences stepsize for numerical derivatives. It is based on the precision of the machine by default.
  • drop: if TRUE, return the Hessian as a matrix and not as an array for scalar-valued functions.

Returns

Hessian matrix for scalar-valued functions when drop=TRUE, array otherwise.

Details

In Cartesian coordinates, the Hessian of a scalar-valued function FF is the square matrix of second-order partial derivatives:

(H(F))ij=ijF (H(F))_{ij} = \partial_{ij}F

When the function FF is a tensor-valued function Fd1,,dnF_{d_1,\dots,d_n}, the hessian is computed for each scalar component.

(H(F))d1dn,ij=ijFd1dn (H(F))_{d_1\dots d_n,ij} = \partial_{ij}F_{d_1\dots d_n}

It might be tempting to apply the definition of the Hessian as the Jacobian of the gradient to write it in arbitrary orthogonal coordinate systems. However, this results in a Hessian matrix that is not symmetric and ignores the distinction between vector and covectors in tensor analysis. The generalization to arbitrary coordinate system is not currently supported.

Functions

  • f %hessian% var: binary operator with default parameters.

Examples

### symbolic Hessian hessian("x*y*z", var = c("x", "y", "z")) ### numerical Hessian in (x=1, y=2, z=3) f <- function(x, y, z) x*y*z hessian(f = f, var = c(x=1, y=2, z=3)) ### vectorized interface f <- function(x) x[1]*x[2]*x[3] hessian(f = f, var = c(1, 2, 3)) ### symbolic vector-valued functions f <- c("y*sin(x)", "x*cos(y)") hessian(f = f, var = c("x","y")) ### numerical vector-valued functions f <- function(x) c(sum(x), prod(x)) hessian(f = f, var = c(0,0,0)) ### binary operator "x*y^2" %hessian% c(x=1, y=3)

References

Guidotti E (2022). "calculus: High-Dimensional Numerical and Symbolic Calculus in R." Journal of Statistical Software, 104(5), 1-37. tools:::Rd_expr_doi("10.18637/jss.v104.i05")

See Also

Other differential operators: curl(), derivative(), divergence(), gradient(), jacobian(), laplacian()

  • Maintainer: Emanuele Guidotti
  • License: GPL-3
  • Last published: 2023-03-09