Bifurcation Diagrams

MATH 242 Modern Computational Mathematics

Logistic Map Code

We will again start with the logistic map (Subscript[f, r])(x)=r x (1-x):

f[r_][x_]:=r*x(1-x)

Here is a Manipulate environment that draws the “time series” view of the trajectory for specified parameter r and starting value (Subscript[x, 0]).

Manipulate[
ListPlot[NestList[f[r],(Subscript[x, 0]),80],PlotRange->{0,1},AxesLabel->{"iteration","value"},Joined->True,Mesh->All,AspectRatio->1/5],{r,0,4},{(Subscript[x, 0]),0,1}]

Bifurcation Diagrams

A bifurcation diagram shows the long-term behavior of lots of trajectories. Specifically, we will compute trajectories for lots of r-values in some interval (Subscript[r, start])<r<(Subscript[r, stop]). For each trajectory, we will ignore the first few values and focus on the “tail.” For each value x in the tail of a trajectory of (Subscript[f, r]), we will plot the point (r,x).

bifurcationDiagram[f_,start_,rStart_,rStop_,rStep_,numIter_,numTail_]:=Module[
{allPoints={},traj,tail,points},

(* repeat for lots of r values *)
Do[
(* compute a trajectory *)
traj=NestList[f[r],start,numIter];
(* take the tail of the trajectory *) 
tail=traj[[-numTail;;]];
(* form points (r,x) for all values x in the tail *) 
points=Table[{r,x},{x,tail}];
(* add the points to the big list allPoints *) 
allPoints=Join[allPoints,points]
,{r,rStart,rStop,rStep}];

(* return a graphics object that plots all of the points *) 
Graphics[ {PointSize[0.001],Opacity[0.1], Point[allPoints]}, AspectRatio->1/2,Frame->True]//Quiet
]

Let's make our first bifurcation diagram:

Now zoom in on the region 3<=r<=4:

What do you notice? What do you wonder?

Create more bifurcation diagrams, experimenting with various parameter values, to explore the properties of the logistic map.

For which positive integers k can you find a k-cycle?

Chaos

For certain values of r, the logistic map trajectories exhibit chaotic behavior. Mathematically, chaos is characterized by aperiodicity, ergodicity (trajectory will eventually visit every interval in the domain), and sensitive dependence on initial conditions. A good way to explore this is to compute trajectories for r=4.

With r = 4, trajectories are aperiodic:

traj=NestList[f[4],0.3,200];
ListPlot[traj,PlotRange->{0,1},AxesLabel->{"iteration","value"},Joined->True,Mesh->All,AspectRatio->1/5]

Question: If initial values (Subscript[x, 0]) and (Subscript[y, 0]) are close together, how long until their trajectories are far apart?

How would you investigate this question? Probably we should to state a more precise version of the question before  attempting computational experiments. What might we mean, precisely, by “close together” and “far apart”?