Hénon Map

from Essential Mathematica for Students of Science
© James J. Kelly, 1998
Last revised: January, 2006

Introduction

In 1974 the French astronomer M. Hénon map discovered a simple two-dimensional map

(Subscript[x, n + 1]) = 1 + (Subscript[y, n]) - a ((Subscript[x, n])^2)
(Subscript[y, n + 1]) = b (Subscript[x, n])

which, for appropriate choices of the parameters {a, b}, possesses a strange attractor.  The sequence of points {(Subscript[x, 0]), (Subscript[y, 0])},  {(Subscript[x, 1]), (Subscript[y, 1])},  {(Subscript[x, 2]), (Subscript[y, 2])},  {(Subscript[x, 3]), (Subscript[y, 3])}, ⋯ is called the orbit of the initial point.  When the map possesses a strange attractor, one finds that orbits either diverge to infinity or quickly approach a confined set that has the appearance of a complicated two-dimensional curve with many folds.  Nevertheless, the system exhibits deterministic chaos.  Although the attractor appears to follow a smooth curve, the system point hops around the attractor quite erratically as the map is iterated.  Furthermore, although two nearby initial points may both approach the attractor, their orbits rapidly diverge from each other — the Euclidean distance between points on two orbits increases rapidly as the iteration proceeds and then fluctuates erratically as each points hops around the attractor with very different sequences.  The attractor itself also exhibits the fractal property of self-similarity, with similar structure appearing at any level of magnification.

References

R.L. Devaney, in The Science of Fractal Images, edited by H.O. Peitgen and D. Saupe, (Springer-Verlag, N.Y., 1988), p. 135 ff.

M. Hénon, Commun. Math. Phys. 50, 69 (1976).

Initialization

ClearAll["Global`*"];
Off[General::spell,  General::spell1]

Implementation

henon[{a_, b_}][{x_, y_}] := {1 + y - a (x^2), b x}

henonMap[{a_, b_}, {x0_, y0_}, n_] := 
      NestList[henon[{a, b}], {x0, y0}, n]

distance[{x1_, y1_}, {x2_, 
            y2_}] := (Sqrt[(((x1 - x2))^2) + (((y1 - y2))^2)]);
distance[list1 : {{_, _} .. }, list2 : {{_, _} .. }] := 
      MapThread[distance, {list1, list2}]

Characteristic behavior

Below we construct a set for the Hénon map and then compare the first few iterations, shown as red points, with the attractor itself after allowing transients to decay.

data = henonMap[{1.4, 0.3}, {0, 0}, 100000];

\(\(Show[{ListPlot[Take[data, 20], PlotRange -> All, 
            PlotStyle -> RGBColor[1, 0, 0], 
            DisplayFunction -> Identity], 
		ListPlot[
            Take[data, {100, 10000}], PlotRange -> All, 
            PlotStyle -> PointSize[0.001], 
            DisplayFunction -> Identity]}, 
        DisplayFunction -> $DisplayFunction];\)\)

Upon magnification lines which appear to be thin are seen to consist of closely spaced lines themselves.  Of course, the larger the number of iterations the more clearly this structure is seen — some regions fill in relatively slowly.

ListPlot[data, 
        PlotRange -> {{0.72, 0.73}, {0.17, 0.176}}];

Below we show that the orbits of two neighboring points diverge, after which the distance between is comparable to the size of the attractor itself.

data1 = henonMap[{1.4, 0.3}, {0, 0}, 100];
data2 = henonMap[{1.4, 0.3}, {0, 0.0001}, 100];
ListPlot[distance[data1, data2]];