PurposeThe purpose of this project is to describe how to compute
and display the Lyapunov exponents of the logistic map with periodic forcing (and to
compute and display some very interesting graphics images).

Make the two "Quick Settings" selections, or individually
specify the a and b min and max, number of pixels in each dimension, the
number of iterations, the name, and the sequence.

The names for several of the Parameter Sets (ZirconZity, Jellyfish,
Swallow, LyapunovSpace) are the names A.K. Dewdney
gave for several of the images in his Scientific
American article [Dewdney91], even though these images
appeared unnamed in [Markus89] and [Markus90].
The Parameter Set names with a prefix of "Hess" are images from [Markus89], while the names with a prefix of "Markus" are
images from [Markus90].

For initial computations, choose a fairly small bitmap size because of the
large number of iterations that are made for each pixel computation. Once you think
you have an interesting "subject" in an image, re-compute it with a large bitmap
size.

I would have reversed the "a" and "b" labels to be
consistent with normal "x" and "y" axes conventions, but conform here
with the same convention as used by Markus.

Press the Start button (where the Continue button is above).
Interrupt/continue the computation any number of times.

For each parameter pair, (a,b), the Lyapunov exponent is computed using
double-precision floating-point arithmetic. [Markus89] suggests using 600
"warmup" iterations and found reliable convergence with an additonal 4000
iterations at each point.

The "Raw Image" of the Lyapunov map is formed by storing raw
IEEE floating-point "single" values (trunctated from the computations that used
double-precision values) as the pixel data in a pf32bit bitmap. The mouse
cursor can be used to inspect the value at any point, which is shown below and to the left
of the image. In this experiment of displaying floating point values, the
floating-point exponent is ignored, and the floating-point fraction becomes the 24-bit RGB
value that is displayed. (I'm curious how this technique might work in displaying
other computations, such as Fourier transforms.)

[Markus89] also suggests speeding up the
computation process by using a logarithm lookup table. He used 5000 values with
equidistant arguments in the interval [0, 4]. I just computed all base-2 logarithms
in a brute force way: Remember "We should forget about small efficiencies,
say about 97% of the time: premature optimization is the root of all evil."
-- Donald Knuth.

Click on any of the color boxes above to change the color using the
standard color dialog.

The various regions of the ab parameter map are either
"stable" or "chaotic." Different coloring schemes can be used to
empahsize each region. Feel free to experiment with various color schemes.

[Markus89] often used a shades-of-gray gradient,
or a black-to-yellow gradient for coloring "order" and a black-to-red gradient
for color "chaos." In some images in [Markus90], a
black-to-gray gradient was used to color order and a solid black was used to color
chaos. Another color scheme used in [Markus90] was the
black-to-yellow as described in [Markus89] for order, but a
back-to-blue color mapping for chaos -- these are the current color scheme defaults.

Computation of the "rainbow" colors are explained in more detail
in the Spectra Lab Report.

Press the Save button to store the image in a pf24bit
BMP or a JPG.

Press the Print button and select portrait or landscape
orientation and any other desired printer properties. The following table summarizes
the header and footer information printed with the above image:

pf32bit Enigma. One Win 98 Pentium
reports $FFFFFFFF for the values in a scanline for a new pf32bit bitmap, while two others
report a value of $01FFFFFF? Why should this vary by machine? Both are valid
values for "white" and this should be implemented in a deterministic
way. The $FFFFFFFF value was treated as a -NaN and caused problems in the LambdaValueColor
routine in the LyapunovLibrar unit when floating point values were compared. As a
kludge workaround, code was added in the constructor to initialize the bitmap to black
instead of the default white. I posted a note to
borland.public.delphi.graphics to discuss "pf32bit enigma: 'alpha
byte' indeterminate in new bitmap?" efg, 10 April 2000.

ConclusionsWhether you care about the mathematics in this project or not, the images
of the Lyapunov Exponent maps can be quite interesting, but take considerable time to
compute.