orbithunter.core.Orbit.costhess

Orbit.costhess(**kwargs)[source]

Matrix-vector product with the Hessian of the cost function.

Parameters:
otherOrbit

Orbit instance whose state is an evaluation of the governing equations

kwargsdict

extra arguments for rmatvec method.

Returns:
hessnp.ndarray

Hessian matrix of Orbit.cost()

Notes

The hessian is the combination of jacobian-transpose multiplied with jacobian plus a second term, equal to the dot product of the hessian of the governing equations (tensor) dotted with the equations, resulting in a 2-d matrix, \(J^TJ + F (d^2F)\). This method has not been implemented for any equation, but the recipe is given below. While there are tensor product functions I think the easiest way to compute this is by broadcasting and dot product.

Another issue is that \(F (d^2F)\) scales like N^3 in terms of memory, and so it’s just untenable to define it explicitly in most cases. I recommend defining it as an iteration over i, if i is an index s.t. \(F (d^2F) = \sum_i F_i (d^2F)_{ijk}\), only ever defining a single ith component of \((d^2F)_{ijk}\) at a time.