I am trying to continue an unstable periodic orbit of a 3-dimensional ODE using BifurcationKit. I found the limit cycle using AUTO, so I know an initial condition on the periodic orbit and the period for some parameters.
I don’t want to continue starting from a Hopf bifurcation, because there are quite a few bifurcations between the Hopf bifurcation and the creation of periodic orbit I am interested in.
I would like to just use the periodic orbit I already found and then continue from there. How can I achieve that?
I tried following the instructions from the page on Collocation, but can’t figure out what is needed to set up the problem without a hopf point
using Parameters
using BifurcationKit
const BK=BifurcationKit
# Food Chain parameters
@with_kw struct FoodChain
K::Float64 = 0.98
R₀::Float64 = 0.161
C₀::Float64 = 0.5
Xc::Float64 = 0.4
Xp::Float64 = 0.08
Yc::Float64 = 2.01
Yp::Float64 = 2.876
end
"Three species food chain model"
function foodchain_ode!(dy, y, par, t=0)
(;r, K, R₀, C₀, Xc, Xp, Yc, Yp) = par
dy[1] = y[1]*(1 - y[1]/K) - Xc*Yc*y[1]*y[2]/(R₀ + y[1])
dy[2] = -Xc*y[2]*(1 - Yc*y[1]/(R₀ + y[1])) - Xp*Yp*y[2]*y[3]/(C₀ + y[2])
dy[3] = -Xp*y[3]*(1 - Yp*y[2]/(C₀ + y[2]))
return nothing
end
# period, initial condition and parameters
period = 29.7433
u₀ = [0.5416311329006971, 0.497698403753575, 0.5843089702199039]
pode = FoodChain(Yc = 1.99018524859468)
# Is this the right way to set up my bifurcation problem?
prob = BK.ODEBifProblem(foodchain_ode!, u₀, pode, (BK.@optic _.Yc);
record_from_solution = (x, p; k...) -> ( u = x[1], v = x[2], w = x[3]),)
# -> how to set up PriodicOrbitOCollProblem and orbitguess?
po_coll = BK.PeriodicOrbitOCollProblem(100, 4)
options = BK.NewtonPar()
orbitguess = ???
solution = BK.newton(po_coll, orbitguess, options)
If I determine the periodic orbit, how do I continue the orbit along Yc?
Thank you for your help!