The function hessian calculates an numerical approximation to 
  the n x n second derivative of a scalar real valued function with n-vector
  argument.
  
The argument method can be "Richardson" or "complex".
  Method "simple" is not supported.
  
For method "complex" the Hessian matrix is calculated as the Jacobian
  of the gradient. The function grad with method "complex" is used, 
  and method.args is ignored for this (an eps of 
  .Machine$double.eps is used). 
  However,  jacobian is used in the second step, with method 
  "Richardson" and argument method.args is used for this. 
  The default is
  method.args=list(eps=1e-4, d=0.1, zero.tol=sqrt(.Machine$double.eps/7e-7), 
   r=4, v=2, show.details=FALSE). (These are the defaults for hessian 
   with method "Richardson", which are slightly different from the defaults 
   for jacobian with method "Richardson".)
  See addition comments in grad before choosing 
  method "complex".
  
Methods "Richardson" uses genD and extracts the 
  second derivative. For this method 
   method.args=list(eps=1e-4, d=0.1, zero.tol=sqrt(.Machine$double.eps/7e-7), 
   r=4, v=2, show.details=FALSE) is set as the default. hessian does
   one evaluation of func in order to do some error checking before
   calling genD, so the number of function evaluations will be one more
   than indicated for genD.
The argument side is not supported for second derivatives and since
  … are passed to func there may be no error message if it is
  specified.