# How to find Jacobian Matrix, df/du, df/dt, directional derivatives, etc. in julia

**URL:** <https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [April 3, 2023, 3:13pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016 "2023-04-03T15:13:39Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 3:13pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/1 "2023-04-03T15:13:39Z")

</div>

Hello, I have solved a system of ODE equation by using Jacobian Sparsity method. I am reading this link [ODE Problems · DifferentialEquations.jl](https://docs.sciml.ai/DiffEqDocs/stable/types/ode_types/#ode_prob). It says that we can find df/du by using the command `jac(J,u,p,t)` or `J=jac(u,p,t)`. But, I have no idea how to use it. Where to write this command in the code to get df/du. Kindly let me know. I am writing it in a new line. But, it is giving error that “jac is not defined”.

My code is like:

using DifferentialEquations

# Define your ODE equation

function my\_ode(du,u,p,t)  
du[1] = u[2]  
du[2] = -u[1] - 0.1\*u[2]  
end

# Define the initial conditions and time span

u0 = [1.0, 0.0]  
tspan = (0.0, 10.0)

p = 0

using Symbolics  
du0 = copy(u0)  
jac\_sparsity = Symbolics.jacobian\_sparsity((du,u)-\>my\_ode(du,u,p,0.0),du0,u0)

f = ODEFunction(my\_ode;jac\_prototype=float.(jac\_sparsity))

prob\_sparse = ODEProblem(f,u0,tspan,p)

alg = Tsit5()  
sol = solve(prob\_sparse,alg)

answer = jac(J,u,p,t)

print(answer)

Here I used very simple ODE, but actual ODE that I am solving is very complex and its jacobian and direcational derivatives cannot found easity. So, I need to find it by using jac command.

---

<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:** [April 3, 2023, 3:15pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/2 "2023-04-03T15:15:35Z")

</div>

That defines how you pass the Jacobian. So that’s not what you’re looking for.

Are you trying to get the Jacobian of the solution of the ODE? Or some Jacobian of a loss function defined on the solution?

---

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 3:18pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/3 "2023-04-03T15:18:11Z")

</div>

> [@Hassan\_Alam](#):
>
> jac(J,u,p,t)

I am trying to do something like this:

using DifferentialEquations

# Define your ODE equation

function my\_ode(du,u,p,t)  
du[1] = u[2]  
du[2] = -u[1] - 0.1\*u[2]  
end

# Define the initial conditions and time span

u0 = [1.0, 0.0]  
tspan = (0.0, 10.0)

p = 0

using Symbolics  
du0 = copy(u0)  
jac\_sparsity = Symbolics.jacobian\_sparsity((du,u)-\>my\_ode(du,u,p,0.0),du0,u0)

f = ODEFunction(my\_ode;jac\_prototype=float.(jac\_sparsity))

prob\_sparse = ODEProblem(f,u0,tspan,p)

alg = Tsit5()  
sol = solve(prob\_sparse,alg)

answer = jac(J,u,p,t)

print(answer)

Here I used very simple ODE, but actual ODE that I am solving is very complex and its jacobian and direcational derivatives cannot found easity. So, I need to find it by using jac command.

---

<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:** [April 3, 2023, 3:24pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/4 "2023-04-03T15:24:50Z")

</div>

```julia
prob = ODEProblem(my_ode, u0, tspan, p)
sys = modelingtoolkitize(prob)
extended_prob = ODEProblem(sys, [], tspan, jac = true)
extended_prob.f.jac(u,p,t)

```

would generate the symbolic solution to your Jacobian. But a better solution is likely just to use ForwardDiff.jl here. Have you tried using ForwardDiff?

---

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 3:27pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/5 "2023-04-03T15:27:43Z")

</div>

> [@ChrisRackauckas](#):
>
> you tried using ForwardDiff

I tried ForwardDiff as well. But, I failed. Not sure, how to merge ForwardDiff with my code. Kindly tell.

---

<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:** [April 3, 2023, 3:42pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/6 "2023-04-03T15:42:16Z")

</div>

What did you try?

---

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 3:44pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/7 "2023-04-03T15:44:51Z")

</div>

I am doing like this:

using DifferentialEquations

# Define your ODE equation

function my\_ode(du,u,p,t)  
du[1] = u[2]  
du[2] = -u[1] - 0.1\*u[2]  
end

# Define the initial conditions and time span

u0 = [1.0, 0.0]  
tspan = (0.0, 10.0)

p = 0

using Symbolics  
du0 = copy(u0)  
jac\_sparsity = Symbolics.jacobian\_sparsity((du,u)-\>my\_ode(du,u,p,0.0),du0,u0)

f = ODEFunction(my\_ode;jac\_prototype=float.(jac\_sparsity))

prob\_sparse = ODEProblem(f,u0,tspan,p)

alg = Tsit5()  
sol = solve(prob\_sparse,alg)

# Compute the Jacobian

u = sol(5.0)  
t = 5.0  
J = ForwardDiff.jacobian(sol, sol.t)

---

<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:** [April 3, 2023, 3:49pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/8 "2023-04-03T15:49:21Z")

</div>

What derivative are you trying to compute here? `df/du`, `du/dp`, `du/dt`?

---

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 4:09pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/9 "2023-04-03T16:09:44Z")

</div>

I like to find df/du.

---

<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:** [April 3, 2023, 4:18pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/10 "2023-04-03T16:18:10Z")

</div>

```julia
u = sol(5.0)
t = 5.0
function diff_function(u)
  du = zero(u)
  my_ode(du,u,p,t)
  du
end
J = ForwardDiff.jacobian(diff_function, u)

```

---

<div class="post-metadata">

**Author:** ![Hassan\_Alam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hassan_alam/32/46169_2.png) [@Hassan\_Alam](https://discourse.julialang.org/u/Hassan_Alam)\
**Post date:** [April 3, 2023, 4:41pm UTC](https://discourse.julialang.org/t/how-to-find-jacobian-matrix-df-du-df-dt-directional-derivatives-etc-in-julia/97016/11 "2023-04-03T16:41:32Z")

</div>

> [@ChrisRackauckas](#):
>
> ForwardDiff

Thank you very much.
