# Specifying analytical jacobian in NonlinearProblem

Hi! I’m new to using `NonlinearSolve.jl` and trying to understand how to provide an analytical jacobian to the problem. I realize that this is unnecessary if we have autodiff in the mix since that will be enough - but in cases where I have say registered functions (and corresponding registered jacobians) I want to understand how to explicitly supply the jacobian to the problem.

Here’s what I have as an example:

``````# Starting with a simple example
function f(u, p)
@. u*u - p
end
u0 = [1.0, 1.0, 1.0]
p = [2.0, 1.0, 4.0]
prob = NonlinearProblem(f, u0, p)
``````
``````julia> sol = solve(prob, NewtonRaphson())
retcode: Success
u: 3-element Vector{Float64}:
1.4142135623730951
1.0
2.000000000000002
``````

Now if I try to give it the jacobian and setup a `NonlinearFunction` (was not very sure how else to setup a `NonlinearProblem` with a jacobian than doing this):

``````df(u,p) = 2.0 .* u
h = NonlinearFunction(f, jac = df)
prob = NonlinearProblem(h, u0, p)
``````

If I try solving this problem now I get this:

``````julia> sol = solve(prob, NewtonRaphson())
retcode: Unstable
u: 3-element Vector{Float64}:
1.0
1.0
1.0
``````

And looking at this I tried specifying to the `NewtonRaphson` algorithm `concrete_jac = true` but that still does not seem to help.

``````julia> sol = solve(prob, NewtonRaphson( ;concrete_jac = true))
retcode: Unstable
u: 3-element Vector{Float64}:
1.0
1.0
1.0
``````

All this is using the latest `NonlinearSolve` version:

``````  [8913a72c] NonlinearSolve v3.9.1
``````

Any thoughts or suggestions would be very appreciated!

That’s not outputing a matrix. Did you mean `Diagonal(2.0 .* u)`?

1 Like

That was silly! Thanks!