Discrete Solvers

Discrete Solvers

solve(prob::DiscreteProblem,alg;kwargs)

Solves the discrete function map defined by prob using the algorithm alg. If no algorithm is given, a default algorithm will be chosen.

Recommended Methods

The implementation for solving discrete equations is the Discrete algorithm in OrdinaryDiffEq.jl. It has zero overhead and uses compilation to build a separate setup that allows you to use the common interface (including events/callbacks) to solve function maps, along with everything else like plot recipes, while completely ignoring the ODE functionality related to continuous equations (except for a tiny bit of initialization).

Full List of Methods

Discrete Algorithm

OrdinaryDiffEq.jl also contains the Discrete algorithm which lets you solve a problem where f is a map: $u_{n+1} = f(t_{n+1},u_n)$. It has a piecewise constant interpolation and allows for all of the callback/event handling capabilities (of course, with rootfind=false. If a ContinuousCallback is given, it's always assumed rootfind=false).

The constructor is:

Discrete(;apply_map=false,scale_by_time=false)

If apply_map=false, f is completely ignored. If apply_map=true, then every step is the update

\[u_{n+1} = f(t_{n+1},u_n).\]

If in addition scale_by_time=true, then every step is the update

\[u_{n+1} = u_n + dtf(t_{n+1},u_n).\]

Notice that this is the same as updates from the Euler method, except in this case we assume that its a discrete change and thus the interpolation is piecewise constant.

As a shorthand,

FunctionMap(scale_by_time=false)

is a Discrete with apply_map=true, and thus corresponds to the function map equation

\[u_{n+1} = f(t_n,u_n).\]