Non-simple branch point
The general method is exposed in Golubitsky, Martin, David G Schaeffer, and Ian Stewart. Singularities and Groups in Bifurcation Theory. New York: Springer-Verlag, 1985, VI.1.d page 295
An example of use of the methods presented here is provided in 2d generalized Bratu–Gelfand problem.
We expose our method to study non-simple branch points. Such branch point $(x_0,p_0)$ for the problem $F(x,p)=0$ satisfies $d=\dim \ker dF(x_0,p_0) > 1$ and the eigenvalues have zero imaginary part. At such point, we can apply Lyapunov-Schmidt reduction to transform the initial problem in large dimensions to a $d$-dimensional polynomial equation, called the reduced equation.
More precisely, it is possible to write $x = u + v$ where $u\in \ker dF(x_0,p_0)$ and $v\approx 0$ belongs to a vector space complement of $\ker dF(x_0,p_0)$. It can be shown that $u$ solves $\Phi(u,\delta p)=0$ with $\Phi(u,\delta p) = (I-\Pi)F(u+\psi(u,\delta p),p_0+\delta p)$ where $\psi$ is known implicitly and $\Pi$ is the spectral projector on $\ker dF(x_0,p_0)$. Fortunately, one can compute the Taylor expansion of $\Phi$ up to order 3. Computing the bifurcation diagram of this $d$-dimensional multivariate polynomials can be done using brute force methods.
Once the zeros of $\Phi$ have been located, we can use them as initial guess for continuation
but for the original $F$ !!
Reduced equation computation
The reduced equation (E) can be automatically computed as follows
get_normal_form(br::ContResult, ind_bif::Int ; verbose = false, ζs = nothing, lens = getlens(br))
where prob
is a bifurcation problem. br
is a branch computed after a call to continuation
with detection of bifurcation points enabled and ind_bif
is the index of the bifurcation point on the branch br
. The above call returns a point with information needed to compute the bifurcated branch. For more information about the optional parameters, we refer to get_normal_form
. It returns a point with all requested information:
mutable struct NdBranchPoint{Tv, T, Tevl, Tevr, Tnf} <: BranchPoint
"bifurcation point"
x0::Tv
"Parameter value at the bifurcation point"
p::T
"Right eigenvectors"
ζ::Tevr
"Left eigenvectors"
ζstar::Tevl
"Normal form coefficients"
nf::Tnf
"Type of bifurcation point"
type::Symbol
end
Using the reduced equation
Once a branch point has been computed bp = get_normal_form(...)
, you can do all sort of things.
- For example, quoted from the file
test/testNF.jl
, you can print the 2d reduced equation as follows:
julia> BifurcationKit.nf(bp2d)
2-element Array{String,1}:
" + (3.23 + 0.0im) * x1 * p + (-0.123 + 0.0im) * x1^3 + (-0.234 + 0.0im) * x1 * x2^2"
" + (-0.456 + 0.0im) * x1^2 * x2 + (3.23 + 0.0im) * x2 * p + (-0.123 + 0.0im) * x2^3"
You can evaluate the reduced equation as
bp2d(Val(:reducedForm), rand(2), 0.2)
. This can be used to find all the zeros of the reduced equation by sampling on a grid or using a general solver likeRoots.jl
.Finally, given a $d$-dimensional vector $x$ and a parameter $\delta p$, you can have access to an initial guess $u$ (see above) by calling
bp2d(rand(2), 0.1)
Predictor
The predictor for a non trivial guess at distance $\delta p$ from the bifurcation point is provided by the method
BifurcationKit.predictor
— Methodpredictor(
bp,
δp;
verbose,
ampfactor,
nbfailures,
maxiter,
perturb,
J,
normN,
optn
)
This function provides prediction for what the zeros of the reduced equation / normal form should be for the parameter value δp
. The algorithm for finding these zeros is based on deflated newton.
Optional arguments
J
jacobian of the normal form. It is evaluated with ForwardDiff otherwise.perturb
perturb function used in Deflated newtonnormN
norm used for newton.
BifurcationKit.predictor
— Methodpredictor(
bp,
,
δp;
verbose,
ampfactor,
nbfailures,
maxiter,
perturb,
J,
igs,
normN,
optn
)
This function provides prediction for what the zeros of the reduced equation / normal form should be should be for the parameter value δp
. The algorithm for finding these zeros is based on deflated newton. The initial guesses are the vertices of the hypercube.
Optional arguments
J
jacobian of the normal form. It is evaluated with ForwardDiff otherwise.perturb
perturb function used in Deflated newtonnormN
norm used for newton.igs
vector of initial guesses. If not passed, these are the vertices of the hypercube.