The "Cobweb" Route to Chaos

One of the first persons to study chaotic behavior in simple mathematical systems was Mitchell Feigenbaum.  In his book Chaos: Making a New Science, James Gleick describes how Feigenbaum was the first scientist to attempt to understand turbulent, non-linear behavior.  While at Los Alamos National Laboratory in the 1970's Feigenbaum started exploring non-linear systems by looking at the simplest non-linear mathematical equation that he could think of, a quadratic equation, y = f(x) = a x^2 + b x + c.

One of the most important features of turbulent, non-linear systems is that they have a feed-back mechanism that leads to chaotic behavior.  Feigenbaum wanted to create a mathematical feed-back system based on a quadratic equation.  To do this he took some starting value for x, say x0.  Then, he evaluated the quadratic equation on x0 to get a y-value, call this y0 (=f(x0)).  The feed-back was accomplished by taking the y0 value and feeding it back into the equation as an x-value, i.e. set x1=y0 and find y1 = f(x1).  By repeating (or iterating) this process we get a sequence of x and y values as follows:

We call the set of iterates x0, x1, x2, ... the orbit of the original point x0 under the iteration of the quadratic function f(x).

It is clear that for the regular parabola, y=x^2, the iterates of x0 will go off to infinity if x0 is larger than 1 in absolute value and will go to zero if x0 is between -1 and 1.  We say that zero and infinity are attractors for this system.  That is, any choice of starting point x0 will move toward one of these atrractor points as we iterate f(x).  Feigenbaum wanted to study a simple quadratic where the orbit of a starting point would not "blow-up" to infinity.  What he decided to study was the quadratic y = r x (1-x).  Here r is a positive constant.  This equation is known as the Logistic Equation. It can be used to model  population growth with a limiting population.  In that model r would represent a growth rate for the population.

Let's re-discover what Feigenbaum found about iterates of points using the logistic equation.  First, we have to create a geometric construction that models the logistic equation.  Start by opening up a new Euclidean Canvas and choosing "Show Axes" under the "Graph" menu.  (For a review of how to use the analytic and graph capabilities in Geometry Explorer look here. ) We show the labels on the origin and unit point on the axes.  The distance from the origin to the unit point is the basic unit of length for the cartesian coordinate system of the graph.

To create a model for the logistic equation we first move the unit point to the right to get a larger interval to use for [0,1].  Then, we attach a point to this interval by creating a point on top of the segment between the origin and the unit point. Let's color it red so that we can identify it easily. Next, we measure the x-coordinate of this attached point using the "Measure" menu. Now, we need to create a geometric object that will serve as the r parameter in the logistic equation. One easy way to do this is by creating a segment and using its length as r.

cobweb 1
At this point we need to create the function that will serve as the y-value for the logistic equation. Pop up the Calculator box and use the measures just defined to create the expression 2*Length(k)*xCoord(x0)*(1-xCoord(x0)). (Remember that you double-click on a measure to add it to the current expression). Then, hit the "Evaluate" button and then the "Add to Canvas" button to add this new expression to the Canvas.  Note: we use 2*Length(k)  instead of Length(k) in order to get a larger range of values for the growth parameter r in the logistic equation.

cob web calculator

In the Canvas we will now have a new measurement which we can use as the y-value for our graph.  Select the x-coordinate measurement and the new measurement from the Calculator (in that order) and then choose "Add as (x,y)" from the "Graph" menu. A new point will appear with these two measures as its x and y coordinates in the graph's coordinate system.  Let's change the color of this graph point to orange for ease of  identification.
cobweb 2

Try moving point x0 back and forth between the origin and the unit point.  You will see point P moving along a hump-shaped curve.  If we increase the length of k the height of the hump will increase and if we decrease the length of k the height will decrease.  So, segment k will govern the overall shape of the quadratic curve. Let's put a trace on P to see this. In the figure below we see point P tracing out a quadratic curve for two different settings for segment k.

cobweb 3

Let's remove the trace on point P and look into how to show the effects of iterating the function just defined.  To efficiently carry out this iteration we will record an iterative process.  Start a new Recorder and hit "Record" in the Recorder window.  Then, select point P and choose "y-Coordinate" to get a measurements of the y-coordinate.  Select the y-coordinate measurement and choose "Duplicate Measure" from the Measure menu to get another copy of the y-coordinate measurement.  Now, multi-select these two y-Coordinate measurments and add them to the graph (choose "Add as (x,y)" under the "Graph" menu) What we have just done is create a new point (the black point below) that has x and y coordinates both equal to the y-coordinate of P.  We do this so we can easily switch y and x and place the new value of x back into the function to carry out the desired iteration.

figure 1

Now, we will compute a new point on the parabola with x-value equal to the y-coordinate if the new point.  To do this, open up the Calculator and compute 2*Length(k) *yCoord(P) *(1-yCoord(P) ). Then, evaluate this expression and add it back to the Canvas. Now, multi-select the y-coordinate measure and this new computed value and click "Add as (x,y)" under the "Graph" menu to plot the point labeled "newP", as shown below.  Then, connect these three points and if you wish color code points on the graph of the quadratic and points on the line y=x, as shown.

cobweb 4

Since we do not really need to see the intermediate measurement steps, hide all of the y-coordinate measures and the newest computed value.  Finally to finish off our recording, we will recursively loop this process.  Select the new point and the length measure and hit "Loop" in the recorder. Then, hit "Stop" in the recorder.

recorder 2

We now have a recording that we can play back as many times as we wish to analyze the nature of the iterates of Feigenbaum's quadratic sequence.  Select the new point and the length measure and hit "FF" in the recorder window.  In the dialog box that pops up type in "15" for the level and hit Okay.  The Recorder will play back the construction we just recorded 15 times, each time replacing the beginning point with the end point of the previous case. What you might see is the following:

cobweb 5

It appears that all of the iterates are bunched up near an attractor point.  If we change the length parameter of segment k we notice some amazing behavior for the iterates.  When k is about 1.83   (2k about 3.63) we get quite a chaotic collection of orbits.

cobweb 6

If we shrink k so that 2k is about 3.5 we see a very orderly orbit of iterates that appear to bounce back and forth between four y-values.  (You may have to move x_0 around a bit to see this clearly) We would call this orbit a 4-cycle.  See if you can find 2-cycles, 8-cycles, 3-cycles, 6-cycles.  A very nice introduction to the mathematics of these iterates can be found in the book  Does God Play Dice?  The Mathematics of Chance  by Ian Stewart.

cobweb 7