# Wrong derivatives saved with SavingCallback

**URL:** <https://discourse.julialang.org/t/wrong-derivatives-saved-with-savingcallback/92471>\
**Category:** General Usage\
**Tags:** question, package, differentialequation\
**Created:** [January 3, 2023, 11:15pm UTC](https://discourse.julialang.org/t/wrong-derivatives-saved-with-savingcallback/92471 "2023-01-03T23:15:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![DanielVandH](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danielvandh/32/31134_2.png) [@DanielVandH](https://discourse.julialang.org/u/DanielVandH)\
**Post date:** [January 3, 2023, 11:15pm UTC](https://discourse.julialang.org/t/wrong-derivatives-saved-with-savingcallback/92471/1 "2023-01-03T23:15:16Z")

</div>

I’m trying to save the derivative values from an ODE using `SavingCallback` from DiffEqCallbacks.jl. Why is `manual_du` not the same as `save_du.saveval` in this code? Am I misunderstanding when these values are saved, or is this is an issue?

```julia
using OrdinaryDiffEq, DiffEqCallbacks
function f!(du, u, p, t)
    du[1] = 0.3u[1]
    du[2] = 0.2u[1] + u[2]
    return nothing
end
save_function = (u, t, integrator) -> (_u = similar(u); get_du!(_u, integrator); return _u)
save_du = SavedValues(Float64, Vector{Float64})
t0, t1 = 0.0, 1.0
saveat = t0:0.1:t1
cb = SavingCallback(save_function, save_du; saveat=saveat)
prob = ODEProblem(f!, [1.0,1.0], (t0,t1), callback=cb)
sol = solve(prob, Tsit5(), saveat=saveat)

manual_du = [zeros(2) for _ in eachindex(saveat)]
for j in eachindex(sol)
    u = sol.u[j] 
    f!(manual_du[j], u, nothing, nothing)
end 
manual_du[1] - [0.3 * 1.0, 0.2 * 1.0 + 1.0]
save_du.saveval[1] - [0.3 * 1.0, 0.2 * 1.0 + 1.0]
manual_du - save_du.saveval

```

```julia
julia> manual_du[1] - [0.3 * 1.0, 0.2 * 1.0 + 1.0]
2-element Vector{Float64}:
 0.0
 0.0

julia> save_du.saveval[1] - [0.3 * 1.0, 0.2 * 1.0 + 1.0]
2-element Vector{Float64}:
 0.009350154485183504
 0.13582658198324649

julia> manual_du - save_du.saveval
11-element Vector{Vector{Float64}}:
 [-0.009350154485183504, -0.13582658198324649]
 [-0.0002137942991308761, -0.0032172187877890224]
 [-0.015279228394231514, -0.26106071340989256]
 [-0.005577907363575996, -0.09867494524327491]
 [-0.0320137675756863, -0.6656221051911233]
 [-0.021712550094837635, -0.46684142492757896]
 [-0.01109761449724933, -0.2469357592801935]
 [-0.00015940524436997006, -0.0036734640814164443]
 [-0.023582896950197274, -0.6267856404645369]
 [-0.011968307129786249, -0.32916801361346115]
 [0.0, 0.0]

```

---

<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:** [January 4, 2023, 2:40am UTC](https://discourse.julialang.org/t/wrong-derivatives-saved-with-savingcallback/92471/2 "2023-01-04T02:40:34Z")

</div>

It’s pulled from the interpolation so it’s only to tolerance. Lower the tolerance on the solve and it should converge.
