# How to get sol.du in DifferentialEquations.jl

Hello,

I am solving an ODE with DifferentialEquations.jl. I would like to access to the derivative of the solution at every time step via `sol.du`.
In the documentation( http://docs.juliadiffeq.org/latest/basics/solution.html#Interpolations-1) they give this example
`[t+3u-du for (t,u,du) in zip(sol.t,sol.u,sol.du)]`

How should I do to enable the option to save `sol.du` when I solve the ODE?

We need to make this happen for non-DAEs. Generally it’s stored as `sol.k[i]`.

1 Like

I am not sure that I understand the structure of `sol.k`.

For an ODE with 3 state variable, `sol.k[1:end]` which should contain the first derivatives at all time is only of Array of Array of 3 elements, I guess it contains the derivatives at time t_0.

And `sol.k[:][:]` is an Array of Array of Array. I tried to play around with `VectorOfArray()` and `convert(Array,..)` but I can only reduce it to a Array of Array

Is there a simple way to get an Array of type Array{Float64,2} of all state derivative at different time steps.

``````function lorenz(du,u,p,t)
du = 10.0*(u-u)
du = u*(28.0-u) - u
du = u*u - (8/3)*u
end

u0 = [1.0;0.0;0.0]
tspan = (0.0,100.0)
prob = ODEProblem(lorenz,u0,tspan)
sol = solve(prob)

sol.k[:]
1-element Array{Array{Float64,1},1}:
[4.94066e-324, 1.97626e-323, 2.47033e-323]

sol.k[:][:]
1250-element Array{Array{Array{Float64,1},1},1}:
[[4.94066e-324, 1.97626e-323, 2.47033e-323]]
[[-10.0, 28.0, 0.0], [-9.99782, 27.9982, 0.00016083], [-9.99557, ...blablabla

``````

`sol.k[1:end]` won’t work, just the linear index. If you want more of them, you need to do a comprehension: `[sol.k[i] for i in 1:length(sol)]` should be it.