In these notes I will use mathematical notation similar to the syntax of Mathematica.

9. Mandelbrot travelog.

The west end cosine approximation.

We saw in Lecture 7  (specifically Theorem 7.8) that the Mandelbrot set exhibits self-similarity near a preperiodic point. The simplest example of this is the point c0 = -2, where the self-similarity ratio is 4. Recall our definitions

Then this self-similarity near c0 = -2 means that for small values of e, G[n, -2 + e, 0] is very close to G[n+1, -2 + e/4, 0]. This can be seen by plotting the two functions. With this in mind, define

Plotting this function for various values of n reveals the following properties.

The function 2Cos[Sqrt[e*k]] (for any positive constant k) has the same properties. To find the appropriate value of k, we can compare the Taylor series for the functions in question. The code

gives us

The limiting coefficient of e in these series is 1/6, so

Here is an illustration given by the code

Figure 9.2. Comparison of H[8,e] in black with 2Cos[Sqrt[e/6]] in red.

Why should (9.1) be true? It follows from the definition of H[n, e] that

which is approximately H[n, e]^2 - 2. On the other it follows from the double angle formula that

which approximates the identity of (9.3).

Here is an illustration of some of the curves G[n, c, 0], showing the nth points of the critical orbits for various real values of c, given by the code

Figure 9.4. Plots of G[n, c, 0] for 3 <= n <= 6.

This diagram has some interesting properties.

We can use (9.1) to predict the location of periodic points near c = -2, and use FindRoot to locate them precisely. Here is some code that does this.

Here is its output.

Look for a relation between the sizes of the miniature Ms at these points and the values of n and i.

Find a way to use (9.1) to predict the location of preperiodic points near c = -2.

Buds on the main cardioid.

Recall the the main cardioid of the Mandelbrot set M has (roughly) circular regions attached to it known as buds or bulbs. Each of them has a periodic point at its center. We have made some observations about these:

In general the center of a period n bud is a root of the polynomial G[n, c, 0], which has degree 2^(n-1).

We will describe a formula for the point where a bud is attached to the main cardioid. Recall that the cardioid itself is the set of comlex numbers of the form u/2 - u^2/4 with |u| = 1. Such a number u always has the form

Now let m/n be a fraction reduced to lowest terms with 0 < m < n. Then there is a period n bud is attached to the main cardioid at the point Exp[2*Pi*I*m/n], and we will call it the m/n bud. Here are some sample attaching points.


Attaching point




-0.125 + 0.6495I


0.25 + 0.5 I


0.3567 + 0.3285 I


-0.4817 + 0.5317 I

We can estimate the radius of a bud by finding the distance from this attaching point to the periodic point at the center of the bud. Computer experiments indicate that it is roughly Sin[Pi*m/n]/n^2.

The following pictures were produced with the Fractint program BudViewer described below. In each case the picture has been rotated so that the main cardioid is on the left with the bud on the right, and magnified so that each bud is roughly the same size.



Figure 9.5. The primary buds for 1/3, 1/4, 1/5 and 2/5.

There is a feature of these pictures worth noting. To the right of the bud for p/q there is a juntion point where q spokes meet. The shortest of these is always p steps in a counterclockwise direction from the one that connects to the main cardioid. Here is another illustration.



Figure 9.6. The primary buds for 1/7, 2/7 and 3/7. Note the position of the shortest of the seven spokes in each.

For more online information on this topic, see Robert Devaney's The Fractal Geometry of the Mandelbrot Set I , especially Section 3, and II, especially Sections 3, 4, 5, 6 and 7. See also Devaney's recent paper (in postscript format) The Mandebrot set and the Farey tree. (For a picture of Devaney, Mandelbrot and me together, see the Yale photo.)

Seahorse valley and spiral formations.

The portion of the Mandelbrot set near c = -3/4 is known as Seahorse Valley. On its right bank are the primary buds for fractions close to 1/2. Two such buds are shown below. In each case Budviewer is used with the magnification set at .5 rather than the default .66, in order to show all of the out lying features near the bud. The color map is set to firestrm.map, and the iteration number is is set to 20000 or more for increased clarity.


Figure 9.7. The buds for 7/15 and 10/21.

Note that Budviewer rotates the picture so that the cardioid always appears on the left, even though the buds in question really have the cardioid to their right. Note also that the shape in the bottom center of each picture resembles the tail of a seahorse, hence the name. The following picture shows the largest minaiture M (which has a pronounced distortion) and the largets tail for the 10/21 bud.


Figure 9.8. Details of the bud for 10/21.


Figure 9.9. Two successive zooms into the tail of the bud for 10/21.

It is interesting to compare this with the bud for 20/21, which is near the cusp of the main cardioid.



Figure 9.10. Successive zooms of the bud for 20/21.

If we look at similar pictures of secondary buds, we find that their "tails" have spirals with multiple arms.


Figure 9.11. The 1/7 secondary buds attached to the primary buds for 1/3 and 1/4. Note the spirals with 3 and 4 arms respectively.

A project on this topic should address some or all the following questions.

Fractint's formula mode.

Fractint has a formula mode which enables you to design your own fractals. To reach it, go to the Fractals menu, select Fractal formula, and then choose formula. Then you will see a dialog box asking you to choose a file with the extension .frm. There is likely to be just one, fractint.frm, in the default directory. With a text editor you can create one of your ownor modify an exsiting one. Once you have selected such a file, a list of fractal names (Formula selection) will appear. After choosing one, you may be given some choices of parameter values, after which you will see a fractal image of some sort.

Once an frm file has been chosen and a fractal image produced, you can return to Formula selection by typing <t>, which brings up Select a Fractal Type. The formula option will be highlighted. Confirm it by pressing <Enter>, and you will see the Formula selection list again.

An frm file consists of a collection of small programs written in simple programming language built into Fractint. It is extensively documented in An Introduction to the Fractint Formula Parser in the Fractint Home Page. We will illustrate it here with three examples of increasing complexity.

Here is a simple example, Dragon in fractint.frm.

It creates the Julia set J(-0.74543 + 0.2*I) in the usual way. The three lines of code above mean roughly the following.

  1. Let z be the complex number correpsonding to a pixel. This is an initialization command, and there could be several of them separated by commas. The colon indicates the end of the initialization sequence.
  2. Replace z by z^2 - 0.74543 + 0.2*I. Note that a complex number is indicated by a pair of coordinates, and sqr(z) is synonymous with z^2.
  3. If |z| <= 4, repeat Step 2. This is an escape criterion.

Fractint automatically does this for each pixel on the screen and colors each one according to the number of iterations.

The next example, BudViewer, is taken from the file dcr95.frm, which I wrote 3 years ago. To download it, click here and save it in a directory you can reach from winfrac.

This program is designed to show pictures of buds on the main cardioid of the Mandelbrot set. It uses the usual iteration algorithm, but shows only a certain region of M.

It has several features not visible in the first example.

Our third example is MandelJuliaZoom taken from dcr.frm, which is designed to illustrate Lei's theorem about local similarity between Julia and Mandelbrot sets. The screen is split into four regions, c, with two of them showing successive zooms of near a user defined point c0, and two showing zooms of J(c0) near c0. Here is the code:

Note that last line (the only one after the colon) gives the usual iteration algorithm, but there are complicated rules for determining the initial values of c and z for each pixel. They determined by the pixel in four different ways, depending on which quadrant of the screen the pixel is in. in order to explain how this is done, a little mathematical background is in order.

Given an interval [a, b] on the real line, its characteristic function CF[x] is defined is defined to be 1 if

a <= x <= b,

and 0 otherwise. Here is a formula for it.

((x-b)/Abs[x-b] - (x-a)/Abs[x-a])/2.

The quantities x1 and x2 in the program are the characteristic functions for the intervals [-2, 0] and [0, 2] with x as the variable, while y1 and y2 are the ones for [-1.5, 0] and [0, 1.5] with y as the variable. The product of two o these gives a function of two variables which takes the value 1 on a certain rectangle and 0 outside, in other words the characteristic function CF[x, y] for the rectangle.

We denote the pixel by u. Suppose we have four different functions F11[u], F12[u], F21[u], and F22[u]. This means that the function

x1*y1*F11[u] + x1*y2*F12[u] + x2*y1*F21[u] + x2*y2*F11[u]

will have the value F11[u] if u is in the lower left quadrant of the screen,  F12[u] if u is in the lower right quadrant,  and so on. The initial values of c and z are defined in the program in this manner. The functions c11, c12, etc. each convert a single quadrant into the rectangle usually associated to the full screen. Note that division by 5 or 100 in the program corresponds to magnification by those amounts, since a small difference in the value of z or c gets converted to a large difference in the pixel coordinate.


This page was last revised on March 19, 1998.