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 F is the square matrix of second-order partial derivatives:
(H(F))ij=∂ijF
When the function F is a tensor-valued function Fd1,…,dn, the hessian is computed for each scalar component.
(H(F))d1…dn,ij=∂ijFd1…dn
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 interfacef <-function(x) x[1]*x[2]*x[3]hessian(f = f, var = c(1,2,3))### symbolic vector-valued functionsf <- c("y*sin(x)","x*cos(y)")hessian(f = f, var = c("x","y"))### numerical vector-valued functionsf <-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()