# How to reinit NonlinearSolve.jl problem/integrator?

**URL:** https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536
**Category:** Optimization (Mathematical)
**Tags:** nonlinearsolve
**Created:** [January 31, 2024, 10:50pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536 "2024-01-31T22:50:50Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![jamblejoe](https://avatars.discourse-cdn.com/v4/letter/j/ee7513/32.png) [@jamblejoe](https://discourse.julialang.org/u/jamblejoe)
#### Post date: [January 31, 2024, 10:50pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/1 "2024-01-31T22:50:50Z")

</div>

Consider

```julia
f(u, p) = u .* u .- p
u0 = @SVector[1.0, 1.0]
prob = NonlinearProblem(f, u0, [1])
solver = solve(prob)

```

How do I reinitialize the problem or the underlying integrator/cache with new `u0` and `p`?

---

<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: [February 1, 2024, 1:42am UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/2 "2024-02-01T01:42:39Z")

</div>

If you’re using the version that landed 2 weeks ago: [What is a Nonlinear Solver? And How to easily build Newer Ones by avik-pal · Pull Request #345 · SciML/NonlinearSolve.jl · GitHub](https://github.com/SciML/NonlinearSolve.jl/pull/345), it should just work like the ODE solver. Use `init`, `reinit!` and `step!`. Not fully documented yet, but what is documented is on latest [Nonlinear Solver Iterator Interface · NonlinearSolve.jl](https://docs.sciml.ai/NonlinearSolve/dev/tutorials/iterator_interface/).

---

<div class="post-metadata">

### Author: ![jamblejoe](https://avatars.discourse-cdn.com/v4/letter/j/ee7513/32.png) [@jamblejoe](https://discourse.julialang.org/u/jamblejoe)
#### Post date: [February 1, 2024, 12:09pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/3 "2024-02-01T12:09:12Z")

</div>

This seems to work:

```julia
f(u, p) = u .* u .- p
u0 = @SVector[1.0, 1.0]
prob = NonlinearProblem(f, u0, [3])
nlcache = init(prob, NewtonRaphson())
@show 0, nlcache.u
for i in 1:4
  step!(nlcache)
  @show i, nlcache.u
end

reinit!(nlcache, (@SVector[2.,1.]); p=[3])
@show 0, nlcache.u
for i in 1:4
  step!(nlcache)
  @show i, nlcache.u
end

```

```julia
(0, nlcache.u) = (0, [1.0, 1.0])
(i, nlcache.u) = (1, [2.0, 2.0])
(i, nlcache.u) = (2, [1.75, 1.75])
(i, nlcache.u) = (3, [1.7321428571428572, 1.7321428571428572])
(i, nlcache.u) = (4, [1.7320508100147276, 1.7320508100147276])

(0, nlcache.u) = (0, [2.0, 1.0])
(i, nlcache.u) = (1, [1.75, 2.0])
(i, nlcache.u) = (2, [1.7321428571428572, 1.75])
(i, nlcache.u) = (3, [1.7320508100147276, 1.7321428571428572])
(i, nlcache.u) = (4, [1.7320508075688772, 1.7320508100147276])

```

How do I replace the manual stepping via for loops with something similar to `solve`? `solve(nlcache)` errors.

```julia
julia> solve(nlcache)
ERROR: MethodError: no method matching init(::NonlinearSolve.GeneralizedFirstOrderAlgorithmCache{…})

Closest candidates are:
  init(::SciMLBase.AbstractJumpProblem, Any...; kwargs...)
   @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:545
  init(::NonlinearProblem{<:Union{Number, var"#s157"} where var"#s157"<:AbstractArray, iip, <:Union{var"#s156", var"#s155"} where {var"#s156"<:ForwardDiff.Dual{T, V, P}, var"#s155"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}}, ::Union{Nothing, SciMLBase.AbstractNonlinearAlgorithm}, ::Any...; kwargs...) where {T, V, P, iip}
   @ NonlinearSolve ~/.julia/packages/NonlinearSolve/UPIol/src/internal/forward_diff.jl:37
  init(::PDEProblem, ::SciMLBase.AbstractDEAlgorithm, ::Any...; kwargs...)
   @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:1140
  ...

Stacktrace:
 [1] solve(args::NonlinearSolve.GeneralizedFirstOrderAlgorithmCache{…}; kwargs::@Kwargs{})
   @ CommonSolve ~/.julia/packages/CommonSolve/JfpfI/src/CommonSolve.jl:23
 [2] top-level scope
   @ REPL[67]:1
Some type information was truncated. Use `show(err)` to see complete types.

```

---

<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: [February 1, 2024, 12:25pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/4 "2024-02-01T12:25:14Z")

</div>

`solve!`

---

<div class="post-metadata">

### Author: ![ayushinav](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ayushinav/32/32687_2.png) [@ayushinav](https://discourse.julialang.org/u/ayushinav)
#### Post date: [November 4, 2025, 8:20pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/5 "2025-11-04T20:20:52Z")

</div>

This does not seem to work for `IntervalNonlinearProblem`. Creating `nlcache` throws an error for not finding `u0`, so I passed it as a keyword argument and it still errored.

---

<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 5, 2025, 11:47pm UTC](https://discourse.julialang.org/t/how-to-reinit-nonlinearsolve-jl-problem-integrator/109536/6 "2025-11-05T23:47:14Z")

</div>

Yeah NonlinearSolveBracketing are fully static so there isn’t an integrator state to reinit. But it is fully non-allocating so that wouldn’t shave anything off anyways. We’re building a trait to query for this.
