Overview of BifurcationKit.jl
The general workflow for using the package is as follows:
- Define a problem
- Solve the problem
- Analyze the output
Defining Problems
Problems are specified via a type interface. The problem types are designed to contain the necessary information to fully define their associated continuation method. For example, a bifurcation problem is defined by
\[F(u, pars) = 0\]
with some parameters pars
, some initial guess u0
, and scalar parameter axis lens
contained in pars
. Therefore the BifurcationProblem
is defined by those components:
prob = BifurcationProblem(F, u0, pars, lens)
Note that the number types in the solution will match the types you designate in the problem. However complex types are not advised as they mess up the detection of bifurcation points.
Continuing from the initial guess
Each type of bifurcation problem has its own problem type which allow the solvers to dispatch to the right methods. The common interface for calling the solvers is:
br = continuation(prob, alg; kwargs)
Into the command, one passes the bifurcation problem that was defined prob
, choose an algorithm alg
, and change the properties of the solver using keyword arguments. The solver returns a branch object br
which holds all the details for the branch.
Analyzing the branch
The solution type has a common interface, which makes handling the solution similar between the different types of bifurcation problems. Tools such as interpolations are seamlessly built into the solution interface to make analysis easy. This interface is described in the ContResult
.
Plotting functionality is provided by a recipe to Plots.jl
. To use plot branches, simply call the plot(br)
and the plotter will generate appropriate plots. Plots can be customized using all the keyword arguments provided by Plots.jl. Please see Plots.jl's documentation for more information.