# NonlinearSolve uses AD Jacobian even when I specify it analytically

**URL:** <https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608>\
**Category:** Numerics\
**Tags:** nonlinearsolve\
**Created:** [November 13, 2024, 3:56pm UTC](https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608 "2024-11-13T15:56:42Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![DanDoe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dandoe/32/52717_2.png) [@DanDoe](https://discourse.julialang.org/u/DanDoe)\
**Post date:** [November 13, 2024, 3:56pm UTC](https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608/1 "2024-11-13T15:56:42Z")

</div>

Hm, I recently tried specification of the Jacobian in this way - however, `NonlinearSolve` still tries to attempt to construct the Jacobian using AD. Has anything changed here?

---

<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:** [November 13, 2024, 4:21pm UTC](https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608/2 "2024-11-13T16:21:26Z")

</div>

That’s a different topic, so please make a separate thread with an MWE.

---

<div class="post-metadata">

**Author:** ![DanDoe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dandoe/32/52717_2.png) [@DanDoe](https://discourse.julialang.org/u/DanDoe)\
**Post date:** [November 14, 2024, 8:05am UTC](https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608/3 "2024-11-14T08:05:49Z")

</div>

So here is an MWE that demonstrates unexpected behaviour (for me) at multple places:

```julia
using NonlinearSolve

function r(gamma, params_nonlinear)
    println("r") # Does show up
    return gamma^params_nonlinear.exponent
end

function dr(gamma, params_nonlinear)
    println("dr") # Does not show up
    return params_nonlinear.exponent * gamma^(params_nonlinear.exponent - 1.0)
end

h = NonlinearFunction(r; jac = dr)
gamma_0 = 1.0
params_nonlinear = (exponent = 2.0, )
sol = NonlinearSolve.solve(NonlinearProblem(h, gamma_0, params_nonlinear), 
                           NewtonRaphson(;concrete_jac = true, autodiff = false), 
                           abstol = 2 * eps(Float64))
println(sol.stats) # SciMLBase.NLStats(27, 26, 0, 26, 26) => 26 Jacobians created

```

---

<div class="post-metadata">

**Author:** ![avikpal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/avikpal/32/6550_2.png) [@avikpal](https://discourse.julialang.org/u/avikpal)\
**Post date:** [November 14, 2024, 3:32pm UTC](https://discourse.julialang.org/t/nonlinearsolve-uses-ad-jacobian-even-when-i-specify-it-analytically/122608/4 "2024-11-14T15:32:20Z")

</div>

You seem to be using an old version of NonlinearSolve. Passing `false` to autodiff will fail in the new releases. In v4 I am getting:

```julia
julia> sol = NonlinearSolve.solve(NonlinearProblem(h, gamma_0, params_nonlinear), 
                                  NewtonRaphson(;concrete_jac = true), 
                                  abstol = 2 * eps(Float64))
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
dr
r
r
r
retcode: Success
u: 1.4901161193847656e-8

```
