Hopf Bifurcations in a Nonlinear Two-Dimensional Autonomous System

Manipulate[Module[{f1,f2,sol,solSS,x,y,t,m,m1,sol2,p1,xx,b1,λ1,λ2,f1b1,f2b1,m2,solSSb1,Eig},

f1[x_,y_]:=y;
f2[x_,y_]:=-b*(x*x-1)*y-x+a;

solSS=Flatten@NSolve[{f1[x,y]==0,f2[x,y]==0},{x,y}];


m1=Outer[D,{f1[x,y],f2[x,y]},{x,y}];

m=m1/.solSS;

Eig=Chop@N@Eigenvalues[m];

f1b1[x_,y_]:=f1[x,y];
f2b1[x_,y_]:=f2[x,y];

solSSb1=Flatten@Quiet@Solve[{f1[x,y]==0,f2[x,y]==0},{x,y}];

m2=Outer[D,{f1b1[x,y],f2b1[x,y]},{x,y}]/.solSSb1;

{λ1,λ2}=Eigenvalues[m2];

x0={1.25,1.25};

sol=NDSolve[{x'[t]==f1[x[t],y[t]],y'[t]==f2[x[t],y[t]],x[0]==x0[[1]],y[0]==x0[[2]]},{x,y},{t,0,900},Method-> "StiffnessSwitching"];

p1=ParametricPlot[Evaluate[{x[t],y[t]}/.sol],{t,0,500},PlotRange->All,PlotStyle->{Black,Thickness[0.01]},PlotPoints->1000];

xx=First[Cases[p1,x_Line:> First@x,Infinity]];

Pane[Switch[ctrl,
1,
zz=Chop@N@Eigenvalues[m];

Show[
ContourPlot[{f1[x,y]==0,f2[x,y]==0},{x,-4,4},{y,-4,4},
PlotLabel->Grid[Transpose@{
{"eigenvalues",If[Im[First@zz]==0,NumberForm[zz,{4,2}],Row[{Style["z",Italic]," = ",NumberForm[First@zz,{4,2}],", ",(OverBar[Style["z",Italic]])}]]},
{"trace",NumberForm[Chop@N@Tr[m],{4,2}]},
{"determinant",NumberForm[Chop@N@Det[m],{4,2}]},
{"Δ",NumberForm[Chop@N@Tr[m]^2-4 Det[m],{4,2}]}},ItemSize->({#,Automatic}&/@{10,4,4,4})],
FrameLabel->{Style["x",16,Italic],Style["y",16,Italic]},PlotPoints-> 100,ContourStyle->{{Green,Thick,Dashed,Opacity[0.99]},{Blue,Dashed,Thick,Opacity[0.99]}},Epilog-> {Green,PointSize[0.025],Point[{x,y}/.solSS],Cyan,Point[x0]}],
Graphics[{Red,Arrowheads[Table[0.06,{6}]],Dashed,Thickness[0.005],Arrow[Line[Partition[xx,Floor[Length[xx/10]]][[;;;;100]]]]}],
StreamPlot[{f1[x,y],f2[x,y]},{x,-4,4},{y,-4,4},StreamStyle->Directive[Opacity[0.5]],StreamPoints-> 50],
ImageSize->400{1,1},ImagePadding->{{50,Automatic},{Automatic,Automatic}}
],
2,
Plot[Evaluate[{x[t],y[t]}/.sol],{t,0,75},PlotRange->All,PlotStyle->{{Blue,Thick},{Red,Thick}},FrameLabel->{Style["t",16,Italic],Style[Row[{Style["x",Italic],", ",Style["y",16,Italic]}],16]},Frame-> True,GridLines->Automatic,AspectRatio->1,PlotPoints->1000,ImageSize->.9 400{1,1},ImagePadding->{{40,Automatic},{40,Automatic}}],
3,
Show[Plot[{Re[λ1],Re[λ2]},{b1,0,3},PlotStyle->{{Red,Thick},{Blue,Dashed,Thick}},Frame->True,FrameLabel->{Style["b",Italic,16],Style["Re(λ)",16]},PlotRange->{{0,3},{-5,1}},GridLines->Automatic,AspectRatio-> 1],
Graphics[{RGBColor[0,0.8,0],PointSize[0.025],Point[{b,Re[Eig[[1]]]}],Point[{b,Re[Eig[[2]]]}]},ImagePadding->{{40,Automatic},{40,Automatic}}],
ImageSize->.9 400{1,1}
],
4,
Show[
Plot[{Im[λ1],Im[λ2]},{b1,0,3},PlotStyle->{{Red,Thick},{Blue,Dashed,Thick}},Frame->True,FrameLabel->{Style["b",Italic,16],Style["Im(λ)",16]},PlotRange->{{-4,4},{-4,4}},GridLines->Automatic,AspectRatio-> 1],
Graphics[{RGBColor[0,0.8,0],PointSize[0.025],Point[{b,Im[Eig[[1]]]}],Point[{b,Im[Eig[[2]]]}]},ImagePadding->{{40,Automatic},{40,Automatic}}],
ImageSize->.9 400{1,1}
]
],ImageSize->{500,400},Alignment->Center]],
{{a,0.8},-2,2,0.01,Appearance-> "Labeled"},
{{b,0.062},-2,2,0.001,Appearance-> "Labeled"},{{ctrl,1,""},{1-> "phase portrait",2-> "time series",3-> "real part of (Subscript[λ, 1]) and (Subscript[λ, 2])",4-> "imaginary part of (Subscript[λ, 1]) and (Subscript[λ, 2])"}},ControlPlacement->Top]

In the study of nonlinear dynamics, it is useful to first introduce students to simple systems that exhibit periodic behavior as a consequence of a Hopf bifurcation. The two-dimensional nonlinear and autonomous system given by

(OverDot[x])=(Subscript[f, 1])(x,y)=-x+a y+(x^2) y,

(OverDot[y])=(Subscript[f, 2])(x,y)=b-a y-(x^2) y

has this feature. These equations describe the autocatalytic reaction of two intermediate species x and y in an isothermal batch reactor, when the system is far from equilibrium [1]. In this context, the steady state referred to below is a pseudo steady state, and is applicable when the precursor reactant is slowly varying with time.

The unique steady state is given by (Subscript[x, S])=b and (Subscript[y, S])=b/(a+(b^2)). This steady state is at the position of the green dot in the phase portrait diagram. It appears as the intersection of the dotted blue and green curves, which are the level curves given by (Subscript[f, 1])(x,y)=0 and (Subscript[f, 2])(x,y)=0.

The stability of steady state to small disturbances can be assessed by determining the eigenvalues of the Jacobian J=(({{∂(Subscript[f, 1])/∂x, ∂(Subscript[f, 1])/∂y}, {∂(Subscript[f, 2])/∂x, ∂(Subscript[f, 2])/∂y}})). A Hopf bifurcation occurs when a complex conjugate pair of eigenvalues crosses the imaginary axis.

This Demonstration shows the phase portrait with the vector field of directions around the critical point ((Subscript[x, S]),(Subscript[y, S])). In addition, the eigenvalues of J, the trace tr(J), the determinant |J|, and ((Δ=tr(J)))^2)-4 |J| are computed. The time series are also plotted in a separate diagram (the blue and red curves correspond to x(t) and y(t), respectively. Finally, the real and imaginary parts of the two eigenvalues (Subscript[λ, 1]) and (Subscript[λ, 2]) are plotted (in blue and red, respectively) versus b for user-specified values of the parameter a.

To observe a Hopf bifurcation, you can set a=0.08 and vary b. As you can see in the snapshots, there are two Hopf bifurcation points. Indeed, for b=0.3, the steady state is a stable focus; for b=0.5, the trajectory is attracted to a stable periodic solution (called a limit cycle); and finally for b=1.0, the steady state is again a stable focus. For a=0.08, the two Hopf bifurcation points are obtained at b=0.34641 and b=0.8485281374238571`. Finally, the last snapshot (obtained for larger values of a, for instance, a=0.65), the Hopf bifurcation disappears and there are only transitions from a stable node to a stable focus and then back to stable node.

Reference

[1] P. Gray and S. K. Scott, Chemical Oscillations and Instabilities: Non-Linear Chemical Kinetics, Oxford: Clarendon Press, 1994.

Contributed by: Housam Binous, Ahmed Bellagi, and Brian G. Higgins