To define an BVP Problem, you simply need to give the function $f$ and the initial condition $u₀$ which define an ODE:
along with an implicit function
bc! which defines the residual equation, where
is the manifold on which the solution must live. A common form for this is the two-point
BVProblem where the manifold defines the solution at two points:
For any BVP problem type,
bc! is the inplace function:
bc!(residual, u, p, t)
residual computed from the current
u is an array of solution values where
u[i] is at time
p are the parameters. For a
t = tspan. For the more general
u can be all of the internal time points, and for shooting type methods
u=sol the ODE solution. Note that all features of the
ODESolution are present in this form. In both cases, the size of the residual matches the size of the initial condition.
Parameters are optional, and if not given then a
NullParameters() singleton will be used which will throw nice errors if you try to index non-existent parameters. Any extra keyword arguments are passed on to the solvers. For example, if you set a
callback in the problem, then that
callback will be added in every solve call.
f: The function for the ODE.
bc: The boundary condition function.
u0: The initial condition. Either the initial condition for the ODE as an initial value problem, or a
Vectorof values for $u(t_i)$ for collocation methods
tspan: The timespan for the problem.
p: The parameters for the problem. Defaults to
kwargs: The keyword arguments passed onto the solves.