SteadyStateDiffEq.jl is a component package in the DifferentialEquations ecosystem. It holds the steady state solvers for differential equations. While completely independent and usable on its own, users interested in using this functionality should check out DifferentialEquations.jl.
SteadyStateDiffEq.jl provides three algorithms for finding steady states:
Use a nonlinear solver to directly find the steady state:
using SciMLBase: SteadyStateProblem, solve
using SteadyStateDiffEq
using NonlinearSolve
function f!(du, u, p, t)
du[1] = 2 - 2u[1]
du[2] = u[1] - 4u[2]
end
u0 = zeros(2)
prob = SteadyStateProblem(f!, u0)
sol = solve(prob, SSRootfind())Evolve the system forward in time until derivatives approach zero:
using SciMLBase: SteadyStateProblem, solve
using SteadyStateDiffEq
using Sundials: CVODE_BDF
prob = SteadyStateProblem((u, p, t) -> 1 .- u, [0.0])
sol = solve(prob, DynamicSS(CVODE_BDF()); dt = 1.0)Integrate the continuous Newton flow with a mass-matrix solver:
using SciMLBase: SteadyStateProblem, solve
using SteadyStateDiffEq
using OrdinaryDiffEqRosenbrock: Rodas3d
prob = SteadyStateProblem((u, p, t) -> 1 .- u, [0.0])
sol = solve(prob, SICNM(Rodas3d()))For more details, see the SciML documentation.
NLsolve.jldependency has been dropped.SSRootfindrequires a nonlinear solver to be specified.DynamicSSno longer storesabstolandreltol. To use separate tolerances for the odesolve and the termination, specifyodesolve_kwargsinsolve.- The deprecated termination conditions are dropped, see NonlinearSolve.jl Docs for details on this.