Normal form of the Zero-Hopf bifurcation
We follow the paper[Kuznetsov],[Kuznetsov2] and consider a Cauchy problem
\[\dot x=\mathbf F(x,p).\]
We denote by $\mathbf L$ the jacobian of $\mathbf F$ at the bifurcation point $(x_0,p_0)$. We choose a basis such that:
\[\mathbf L q_0=0, \quad \mathbf L q_1=i \omega_{0} q_1.\]
Under some conditions, $x(t)\approx x_0+2\Re w_1(t)q_1+w_0(t)q_0$ where $w_i$ satisfy the normal form:
\[\left\{\begin{aligned} \dot{w}_0= & \frac{1}{2} G_{200} w_0^2+G_{011}\left|w_1\right|^2+\frac{1}{6} G_{300} w_0^3 +G_{111} w_0\left|w_1\right|^2+O\left(\left\|\left(w_0, w_1, \bar{w}_1\right)\right\|^4\right) \\ \dot{w}_1= & i \omega_0 w_1+G_{110} w_0 w_1+\frac{1}{2} G_{210} w_0^2 w_1+\frac{1}{2} G_{021} w_1\left|w_1\right|^2 +O\left(\left\|\left(w_0, w_1, \bar{w}_1\right)\right\|^4\right) . \end{aligned}\right.\tag{E}\]
This normal form is usually computed in order to branch from a Zero-Hopf bifurcation point to curves of Neimark-Sacker bifurcations of periodic orbits (see [Kuznetsov2]). Not all coefficients in (E) are required for this branching procedure, that is why only a subset of the $G_{ijk}$ is returned.
Normal form computation
The normal form (E) can be automatically computed as follows
get_normal_form(br::ContResult, ind_bif::Int ;
ζs = nothing,
lens = getlens(br))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. The result returns an object of type ZeroHopf.
You should not need to call get_normal_form except if you need the full information about the branch point.
Predictors
The predictor for a non trivial guess at distance $\delta p$ from the bifurcation point is provided by the methods
BifurcationKit.predictor — Method
predictor(
zh::BifurcationKit.ZeroHopf,
::Val{:HopfCurve},
ds;
verbose,
ampfactor
) -> NamedTuple{(:hopf, :ω, :EigenVec, :EigenVecAd, :x0), <:Tuple{BifurcationKit.var"#757#763"{BifurcationKit.var"#HopfCurve#760"{_A, _B}} where {_A, _B}, BifurcationKit.var"#758#764"{BifurcationKit.var"#HopfCurve#760"{_A, _B}} where {_A, _B}, BifurcationKit.var"#EigenVec#761"{BifurcationKit.ZeroHopf{Tv, Tpar, Tlens, Tevr, Tevl, Tnf}} where {Tv, Tpar, Tlens, Tevr, Tevl, Tnf}, BifurcationKit.var"#EigenVecAd#762"{BifurcationKit.ZeroHopf{Tv, Tpar, Tlens, Tevr, Tevl, Tnf}} where {Tv, Tpar, Tlens, Tevr, Tevl, Tnf}, BifurcationKit.var"#759#765"}}
Compute the predictor for the curve of Hopf bifurcations near the Zero-Hopf bifurcation point.
BifurcationKit.predictor — Method
predictor(
zh::BifurcationKit.ZeroHopf,
::Val{:FoldCurve},
ds;
verbose,
ampfactor
) -> NamedTuple{(:fold, :λ0, :EigenVec, :EigenVecAd, :x0), <:Tuple{BifurcationKit.var"#767#773"{BifurcationKit.var"#FoldCurve#770"{_A, _B}} where {_A, _B}, BifurcationKit.var"#768#774"{BifurcationKit.var"#FoldCurve#770"{_A, _B}} where {_A, _B}, BifurcationKit.var"#EigenVec#771"{BifurcationKit.ZeroHopf{Tv, Tpar, Tlens, Tevr, Tevl, Tnf}} where {Tv, Tpar, Tlens, Tevr, Tevl, Tnf}, BifurcationKit.var"#EigenVecAd#772"{BifurcationKit.ZeroHopf{Tv, Tpar, Tlens, Tevr, Tevl, Tnf}} where {Tv, Tpar, Tlens, Tevr, Tevl, Tnf}, BifurcationKit.var"#769#775"}}
Compute the predictor for the curve of Fold bifurcations near the Zero-Hopf bifurcation point.
BifurcationKit.predictor — Method
predictor(
zh::BifurcationKit.ZeroHopf,
::Val{:NS},
ϵ;
verbose,
ampfactor
) -> NamedTuple{(:orbit, :hasNS, :params, :T, :k), <:Tuple{BifurcationKit.var"#777#779"{BifurcationKit.var"#NS#778"{_A, _B, _C}} where {_A, _B, _C}, Vararg{Any, 4}}}
Compute the predictor for the curve of Neimark-Sacker bifurcations near the Zero-Hopf bifurcation point.
Reference
Kuznetsov, Yu A., H. G. E. Meijer, W. Govaerts, and B. Sautois. “Switching to Nonhyperbolic Cycles from Codim 2 Bifurcations of Equilibria in ODEs.” Physica D: Nonlinear Phenomena 237, no. 23 (December 2008): 3061–68. https://doi.org/10.1016/j.physd.2008.06.006.
References
- Kuznetsov
Kuznetsov, Yu. A. “Numerical Normalization Techniques for All Codim 2 Bifurcations of Equilibria in ODE’s.” SIAM Journal on Numerical Analysis 36, no. 4 (January 1, 1999): 1104–24. https://doi.org/10.1137/S0036142998335005.
- Kuznetsov2
Kuznetsov, Yu A., H. G. E. Meijer, W. Govaerts, and B. Sautois. “Switching to Nonhyperbolic Cycles from Codim 2 Bifurcations of Equilibria in ODEs.” Physica D: Nonlinear Phenomena 237, no. 23 (December 2008): 3061–68. https://doi.org/10.1016/j.physd.2008.06.006.