
Bifurcation fractals - a pictorial representation of a population growth model.

formulas: bifxxx


The wonder of fractal geometry is that such complex forms can arise from
such simple generating processes. A parallel surprise has emerged in the
study of dynamical systems: that simple, deterministic equations can yield
chaotic behavior, in which the system never settles down to a steady state
or even a periodic loop. Often such systems behave normally up to a
certain level of some controlling parameter, then go through a transition
in which there are two possible solutions, then four, and finally a
chaotic array of possibilities.

This emerged many years ago in biological models of population growth.
Consider a (highly over-simplified) model in which the rate of growth is
partly a function of the size of the current population:

New Population =  Growth Rate * Old Population * (1 - Old Population)

where population is normalized to be between 0 and 1. At growth rates less
than 200 percent, this model is stable: for any starting value, after
several generations the population settles down to a stable level. But for
rates over 200 percent, the equation's curve splits or "bifurcates" into
two discrete solutions, then four, and soon becomes chaotic.

Type=bifurcation illustrates this model. (Although it's now considered a
poor one for real populations, it helped get people thinking about chaotic
systems.) The horizontal axis represents growth rates, from 190 percent
(far left) to 400 percent; the vertical axis normalized population values,
from 0 to 4/3. Notice that within the chaotic region, there are narrow
bands where there is a small, odd number of stable values. It turns out
that the geometry of this branching is fractal; zoom in where changing
pixel colors look suspicious, and see for yourself.

Three parameters apply to bifurcations: Filter Cycles, Seed Population,
and Function or Beta.

Filter Cycles (default 1000) is the number of iterations to be done before
plotting maxiter population values. This gives the iteration time to settle
into the characteristic patterns that constitute the bifurcation diagram,
and results in a clean-looking plot. However, using lower values produces
interesting results too. Set Filter Cycles to 1 for an unfiltered map.

Seed Population (default 0.66) is the initial population value from which
all others are calculated. For filtered maps the final image is independent
of Seed Population value in the valid range (0.0 < Seed Population < 1.0).

Seed Population becomes effective in unfiltered maps - try setting Filter
Cycles to 1 (unfiltered) and Seed Population to 0.001. This results in a
map overlaid with nice curves. Each Seed Population value results in a
different set of curves.

Function (default "ident") is the function applied to the old population
before the new population is determined. The "ident" function calculates
the same bifurcation fractal that was generated before these formulae
were generalized.

Beta is used in the bifmay bifurcations and is the power to which the
denominator is raised.

Note that xmfract normally uses periodicity checking to speed up
bifurcation computation. However, in some cases a better quality image
will be obtained if you turn off periodicity checking with "periodicity=no"
for instance, if you use a high number of iterations and a smooth
colormap.

Many formulae can be used to produce bifurcations. Mitchel Feigenbaum
studied lots of bifurcations in the mid-70's, using a HP-65 calculator
(IBM PCs, Fractals, Fractint, and xmfract were all Sci-Fi then!). He studied
where bifurcations occurred, for the formula r*p*(1-p), the one described
above. He found that the ratios of lengths of adjacent areas of
bifurcation were four and a bit. These ratios vary, but, as the growth
rate increases, they tend to a limit of 4.669+. This helped him guess
where bifurcation points would be, and saved lots of time.

When he studied bifurcations of r*sin(PI*p) he found a similar pattern,
which is not surprising in itself. However, 4.669+ popped out, again.
Different formulae, same number ?  Now, THAT's surprising !  He tried many
other formulae and ALWAYS got 4.669+ - Hot Damn !!!  So hot, in fact, that
he phoned home and told his Mom it would make him Famous ! He also went on
to tell other scientists. The rest is History...

(It has been conjectured that if Feigenbaum had a copy of Fractint, and
used it to study bifurcations, he may never have found his Number, as it
only became obvious from long perusal of hand-written lists of values,
without the distraction of wild color-cycling effects !).

We now know that this number is as universal as PI or E. It appears in
situations ranging from fluid-flow turbulence, electronic oscillators,
chemical reactions, and even the Mandelbrot Set - yup, 'fraid so:
"budding" of the Mandelbrot Set along the negative real axis occurs at
intervals determined by Feigenbaum's Number, 4.669201660910.....

Xmfract does not make direct use of the Feigenbaum Number (yet).
However, it does now reflect the fact that there is a whole sub-species of
Bifurcation-type fractals. Those implemented to date, and the related
formulae, (writing P for pop[n+1] and p for pop[n]) are :

  bifurcation  P =  p + r*fn(p)*(1-fn(p))  Verhulst Bifurcations.
  biflambda    P =      r*fn(p)*(1-fn(p))  Real equivalent of Lambda Sets.
  bif+sinpi    P =  p + r*fn(PI*p)         Population scenario based on...
  bif=sinpi    P =      r*fn(PI*p)         ...Feigenbaum's second formula.
  bifstewart   P =      r*fn(p)*fn(p) - 1  Stewart Map.
  bifmay       P =      r*p / ((1+p)^b)    May Map.

It took a while for bifurcations to appear here, despite them being over a
century old, and intimately related to chaotic systems. However, they are
now truly alive and well in xmfract!

