# Hessian of function involving integration of ODE

**URL:** <https://discourse.julialang.org/t/hessian-of-function-involving-integration-of-ode/104339>\
**Category:** Machine Learning\
**Tags:** question\
**Created:** [September 28, 2023, 8:43am UTC](https://discourse.julialang.org/t/hessian-of-function-involving-integration-of-ode/104339 "2023-09-28T08:43:53Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stefano\_Giampiccolo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefano_giampiccolo/32/46018_2.png) [@Stefano\_Giampiccolo](https://discourse.julialang.org/u/Stefano_Giampiccolo)\
**Post date:** [September 28, 2023, 8:43am UTC](https://discourse.julialang.org/t/hessian-of-function-involving-integration-of-ode/104339/1 "2023-09-28T08:43:53Z")

</div>

Hi all,  
I apologize if it’s a possibly stupid question, but I am trying to calculate the Hessian of a function that internally performs the integration of a differential equation. What I am currently doing is this:

```julia
using Zygote, DifferentialEquations
function der!(du, u, p, t)
    du[1] = -p[1] * u[1]
end

function cost_for_hessian(params)
    prob_uode_pred = ODEProblem{true}(der!, [10.0], (0, 10))
    solutions = solve(prob_uode_pred, Tsit5(), p=params, saveat=[10.0], sensealg=ForwardDiffSensitivity())
    return sum(abs2.((solutions)))
end

sensitivity_analysis_hessian = hessian(p -> cost_for_hessian(p), [2.0])

```

When I try to execute the code (julia version 1.9.1, Zygote v0.6.61, DifferentialEquations v7.7.0), I get the following error: ERROR: Cannot determine ordering of Dual tags.

Could anyone tell me if what I am trying to do is feasible and how to do it?  
Thank you in advance!

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [September 28, 2023, 9:11am UTC](https://discourse.julialang.org/t/hessian-of-function-involving-integration-of-ode/104339/2 "2023-09-28T09:11:48Z")

</div>

> [@Stefano\_Giampiccolo](#):
>
> Could anyone tell me if what I am trying to do is feasible and how to do it?  
> Thank you in advance!

Use Forward over Reverse, not Zygote.hessian. These examples

> **[Newton and Hessian-Free Newton-Krylov with Second Order Adjoint Sensitivity...](https://docs.sciml.ai/SciMLSensitivity/dev/examples/ode/second_order_adjoints/)**
>
> Documentation for SciMLSensitivity.jl.

make use of that. It’s done in Optimization.jl like this:

> <https://github.com/SciML/Optimization.jl/blob/master/ext/OptimizationZygoteExt.jl#L93-L109>

Or you can directly use [Direct Adjoint Sensitivities of Differential Equations · SciMLSensitivity.jl](https://docs.sciml.ai/SciMLSensitivity/dev/manual/direct_adjoint_sensitivities/#SciMLSensitivity.second_order_sensitivities)

---

<div class="post-metadata">

**Author:** ![Stefano\_Giampiccolo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefano_giampiccolo/32/46018_2.png) [@Stefano\_Giampiccolo](https://discourse.julialang.org/u/Stefano_Giampiccolo)\
**Post date:** [September 29, 2023, 7:12am UTC](https://discourse.julialang.org/t/hessian-of-function-involving-integration-of-ode/104339/3 "2023-09-29T07:12:04Z")

</div>

Thank you!
