Library
Parameters
MultiParamContinuation.CoveringPar — TypeParameters for the covering algorithm(s).
Fields
ϵ::Any: Maximum distance between the tangent plane and the manifold. Default: 0.1R0::Any: Initial radius of validity. Default: 0.1Rmin::Any: [Internal] Minimal radius of polyhedra. Default: 0.001delta_angle::Any: Maximum angle difference between charts' tangent spaces in radians. Default: 2πmax_charts::UInt64: Maximum number of charts. Default: 100max_steps::UInt64: Maximum number of continuation steps. Because of mesh adaptation or failure, the number of computed charts is less or equal thanmax_steps. Default: 1000verbose::Int64: Verbose mode, belongs to {0,1,2}. verbose = 0 prints nothing. verbose = 1 prints the charts, verbose = 2 print the intersection of the charts. Default: falsenewton_options::Any: Newton options. Default: NonLinearSolveSpec()solver_bls::Any: Bordered Linear Solver Default: nothingdotmin::Any: [Internal]. Default: 0.2
Results
MultiParamContinuation.Chart — Typemutable struct Chart{Tu, Ttg, Tr, Tp, Tin, Td, Teve, Tl}Structure to define a chart, that is a local system of coordinates which parametrizes a small patch of the manifold.
Fields
u::AnyΦ::AnyR::Any: Radius for region of validity (Ball).P::Any: Polyhedron. Represents the domain of the solution manifold covered by this chart.inside_ball::Any: Array of booleans to check if the vertices in P are inside the ball of validityinterior::Bool: Is the polygon inside the validity ball?index::Int64data::Anyevent_values::Anylabel::Anyneighbors::Vector{Int64}: [Internal] list of direct neighbors in the atlas
Methods
do_intersect(c1, c2)::Boolwhether the charts intersect
MultiParamContinuation.Atlas — Typestruct Atlas{dim, Tc, Talg, Ttree}Atlas of charts which represents a manifold.
Fields
atlas::Vector: List of ChartsBList::Vector: [Internal] Boundary list of chartsalg::Any: Algorithm, for example:Henderson()tree::Any: [Internal] Tree for neighbors search
Methods
add!(a::Atlas, c::Chart)new_atlas(c::Chart, alg = nothing; dim = 2)length(a::Atlas)returns the number of chartsa[3]returns the 3rd chart in the atlasa, see?Chart
Problems
MultiParamContinuation.ManifoldProblem — Typestruct ManifoldProblem{Tu<:(AbstractVector), Tp, TVF, Trec, Tproj, Ttangent, Tradius, Tevent, Tfinalize, Tbb, Tpc, Tupdate} <: MultiParamContinuation.AbstractManifoldProblemDefine a problem to perform multi-parameters continuation of a manifold defined as the zeros of F: Rⁿ → Rᵐ with n > m >= 1.
Fields
n::Int64: [Internal] input space dimensionm::Int64: [Internal] output space dimensionVF::Any: Equation representing the mapping Fu0::AbstractVector: Guess for the initial point on the manifoldparams::Any: Parameters passed to FrecordFromSolution::Any: Record a few indicators at each chart of the manifoldproject::Any: Function to project a point from a tangent space to the manifold. If not provided, a newton algorithm is used. The signature isproject(u, par)and returns a vector of solutionsget_tangent::Any: Compute an orthonormal basis of the tangent space at a point u on the manifold. Return a matrix of dimension n x (n-m). The signature isget_tangent(u, par). If not provided, a dedicaded function is used.get_radius::Any: Get the an estimate of the curvature at a point u on the manifold. If not provided, a dedicaded function is used.event_function::Any: Event functionfinalize_solution::Any: Finalise solution. Function to accept or not the current chart. It has signaturefinalise(c::Chart, par)::Boolproject_for_tree::Any: Function used to project a point for the tree used to find the charts near a new point. Needs not be linear but the dimension should be at least the manifold embedding dimension.prob_cons::Any: [Internal] constrained problem for projecting on manifoldupdate!::Any: Function used to update the problem after each continuation step. The signature isupdate_problem!(prob, ::Atlas)
Constructor
ManifoldProblem(F, u0, par;
m = length(F(u0, par)),
check_dim::Bool = true,
recordFromSolution = (u,p) -> nothing,
project = nothing,
get_radius = get_radius_default,
get_tangent = nothing,
event_function = event_default,
finalize_solution = finalize_default,
project_for_tree = project_for_tree_default
)MultiParamContinuation.ManifoldProblemBK — Typestruct ManifoldProblemBK{Tu<:(AbstractVector), Tp, TVF, Trec, Tproj, Ttangent, Tradius, Tevent, Tfinalize, Tbb, Tpc, Tupdate} <: MultiParamContinuation.AbstractManifoldProblemDefine a problem to perform multi-parameters continuation of a manifold defined as the zeros of F: Rⁿ → Rᵐ with n > m >= 1.
Fields
n::Int64: [Internal] input space dimensionm::Int64: [Internal] output space dimensionVF::Any: Equation representing the mapping Fu0::AbstractVector: Guess for the initial point on the manifoldparams::Any: Parameters passed to FrecordFromSolution::Any: Record a few indicators at each chart of the manifoldproject::Any: Function to project a point from a tangent space to the manifold. If not provided, a newton algorithm is used. The signature isproject(u, par)and returns a vector of solutionsget_tangent::Any: Compute an orthonormal basis of the tangent space at a point u on the manifold. Return a matrix of dimension n x (n-m). The signature isget_tangent(u, par). If not provided, a dedicaded function is used.get_radius::Any: Get the an estimate of the curvature at a point u on the manifold. If not provided, a dedicaded function is used.event_function::Any: Event functionfinalize_solution::Any: Finalise solution. Function to accept or not the current chart. It has signaturefinalise(c::Chart, par)::Boolproject_for_tree::Any: Function used to project a point for the tree used to find the charts near a new point. Needs not be linear but the dimension should be at least the manifold embedding dimension.prob_cons::Any: [Internal] constrained problem for projecting on manifoldupdate!::Any: Function used to update the problem after each continuation step. The signature isupdate_problem!(prob, ::Atlas)
Constructor
ManifoldProblem(F, u0, par;
m = length(F(u0, par)),
check_dim::Bool = true,
recordFromSolution = (u,p) -> nothing,
project = nothing,
get_radius = get_radius_default,
get_tangent = nothing,
event_function = event_default,
finalize_solution = finalize_default,
project_for_tree = project_for_tree_default
)Continuation algorithms
MultiParamContinuation.Henderson — Typestruct Henderson{T} <: MultiParamContinuation.AbstractCoveringAlgorithmContinuation algorithm from [1] computing implicitly defined 2d manifolds.
Fields
np0::Int64: Number of initial vertices in the polyhedra on each tangent space.use_curvature::Bool: Use hessian for curvature estimate.θmax::Any: [Internal]θmin::Any: [Internal]use_tree::Bool: Use tree to find neighbors. Useful when the number of charts is large because the complexity changes from N² to N⋅log(N).children_pre_leaf::Int64: Number of children per leaf in the tree. Control the depth of the tree.
Reference(s)
[1] Henderson, Michael E. “Multiple Parameter Continuation: Computing Implicitly Defined k-Manifolds.” International Journal of Bifurcation and Chaos 12, no. 03 (March 2002): 451-76. https://doi.org/10.1142/S0218127402004498.
Continuation methods
MultiParamContinuation.step! — Functionstep!(Ω)
Perform one step of the continuation algorithm.
step!(Ω, n)
Perform n steps of the continuation algorithm.
Bounding functions
MultiParamContinuation.Cube — TypeDefine a hypercube C of radius r.
C = { u ∈ Rⁿ | -r <= u <= r}
You can define one using
cube = Cube(1)You can test whether a point is in the cube by doing
cube(rand(3))MultiParamContinuation.ProductSpace — Typestruct ProductSpace{T<:(AbstractVector)}Structure to define a domain defined by a set of intervals
Fields
lower::AbstractVector: lower parts of all intervalsupper::AbstractVector: upper parts of all intervals
Usage
For example, to create the domain [1,2] x [3,4], you can does
space = ProductSpace([1,3], [2,4])and test whether a point belongs to this space:
space(rand(2))