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

12. Mandelbrot and Julia sets for other functions.

Polynomials.

Remember how the classical Mandelbrot and Julia sets are defined. We start with a quadratic function of the form g[z_] := z^2 + c, and we want to see what happens when we iterate it. For a fixed complex number c, the Julia set J(c) is defined to be the set of complex numbers z which have bounded orbits under iteration of g. The Mandelbrot set M is the set of complex numbers c such that the orbit of 0 is bounded. The orbit of zero is chosen because 0 is the critical point of the function g[z], i.e. the value of z at which the derivative g'[z] is zero. We have also looked at the logistic function f[z_] := r*z*(1-z), for which the critical point is z = 1/2.

What happens if we replace f or g by some other polynomial of higher degree? For a polynomial degree d,

p[z] = a*z^d + a*z^(d-1) + ... + a[d]

where a,...,a[d] are constants, we can define the Julia set J[p] in the same way, namely the set of complex numbers z which have bounded orbits under iteration of p. The theorem of Julia and Fatou (Theorem 5.7) is relevant here. It says the Julia set is connected if and only if the orbit of each critical point of p is bounded. A quadratic polynomial such as f or g has jsut one critical point, but a polynomila of degree d could have as many as d -1 critical points.

In order to define a Mandelbrot set, we need to look at a family of polynomials, such as z^2 + c for varying c. Then we can ask which polynomials in the family have connected Jula sets, and the Julia-Fatou theorem tells us that that this is equivalent to asking which of the polynomials have bounded critical orbits.

Here is a simple example. Consider the cubic polynomials p[z_] := z^3 + c for varying c. In this case the derivative is p'[z] = 3z^2, so there is just one one critical point, z = 0. Fractint can display the resulting Mandelbrot set using manzpower, which computer the Mandelbrot set for the function z^d + c, where the exponent d is defined by the user. The corresponding Julia sets can be seen with julzpower. Here are some examples.  Figure 12.1. The Mandelbrot set for the family z^3 + c, and the Julia set for c = .9I.

Determine which symmetries must hold for this Mandelbrot set and this type of Julia set.

This Mandelbrot set has the following features, some of which require further magnifcation to see.

• There is a main body that has two cusps instead of the one we see on a cardioid.
• The buds themselves are shaped like cardioids.
• There are miniature copies of this Mandelbrot set thoughout.

Look for similar features in the Mandelbrot set for z^d + c for larger values of the exponent d.

We can derive an equation for the main body in the same way we did for the classical Mandelbrot set. Here is the code needed to get Mathematica to solve the relevant equations.

p[z_] := z^3 + c;

Solve[{p[z] == z, p'[z] == u}, c, z]

and here is the output.

{{c -> -Sqrt[9*u - 6*u^2 + u^3]/(3*Sqrt)},

{c -> Sqrt[9*u - 6*u^2 + u^3]/(3*Sqrt)}}

We can simplify this by eplacing u by u^2 and then using

Factor[c^2/.Solve[{p[z] == z, p'[z] == u^2}, c, z]]

which gives

{(1*u^2*(-3 + u^2)^2)/27, (1*u^2*(-3 + u^2)^2)/27}

The following code will give us a picture of the corresponding curve for |u| = 1.

u[t_] := Exp[2Pi*I*t];

z[u_] := u*(u^2-3)/Sqrt;

ParametricPlot[{{Re[z[u[t]]], Im[z[u[t]]]}, {t, 0, 1} ,AspectRatio-> Automatic]

which gives the curve Figure 12.2. Main body curve for the Mandelbrot set for the family z^3 + c.

Find an equation for the period 2 body for this Mandelbrot set.

Find a formula for the points where buds are attached to the main body.

Find an equation for the main body of the Mandelbrot set for z^d + c for larger values of d.

Here is another example, which can be seen using the program CubeMandel2 in dcr.frm. In it we consider the family of cubic polynomials p[z] = z^3 - 3p1^2*z + c for varying c and a fixed user defined value of p1. The derivative of this polynomial is

p'[z] = 3z^2 - 3p1^2 = 3(z - p1)(z + p1),

so there are two critical points, z = p1 and z = - p1, and both of them must be tested. The code in CubeMandel2 is

CubeMandel2(ORIGIN){; Douglas C. Ravenel

;Mandelbrot set for f(z)=z^3 -3*p1*p1*z using BOTH critical points

z = p1, z2 = - p1, c = pixel:

z = z*z*z - 3*p1*p1*z + c

z2 = z2*z2*z2 - 3*p1*p1*z2 + c

|z| + |z2| <= 20 }

Note that z and z2 are initially set to the critical points, and then the polynomial is iterated on both of them.

Now here is an escape criterion exercise. Prove that an orbit under this cubic polynomial is unbounded if it contains a number with absolute value at least 10.

The code above stops iterating if |z| + |z2| > 20. If this is the case , then at least one of the two absolute values must exceed 10 , so one of the two orbits must be unbounded. We are looking for cases where both orbits are bounded.

Find an equation for the main body of this Mandelbrot set and plot it for various values of p1.

Are there values of p1 for which this Mandelbrot set is empty?

One could consider a more general family of cubic polynomials

p[z_] := z^3 - 3*p1^2*z + p2.

Here there are two complex parameters, p1 and p2. The corresponding Julia sets are produced by CubeJulia in dcr.frm. Again there are two critical values, z = p1 and z = - p2, and both of the critical orbits must be tested for boundedness.

The Mandelbrot set for this family consists of pairs of complex numbers (p1, p2) for which both critical orbits of p[z] are bounded. In order to see it we would need a 4-dimensional viewing screen, but these are not available yet. For the moment we can only look at 2-dimensional slices of it, such as the one provided by CubeMandel2, which fixes the value of p1 and varies p2. The program CubeMandel3 fixes the value of p2 and varies p1. One could look at other slices, for example the one where p1 = p2, or even at curved slices, such as the one where p2 = p1^2. Another possibility is to limit ones attention to real values of p1 and p2.

Rational functions.

A rational function f[z] = p[z]/q[z] is one that can be written as a fraction whose numerator p[z] and denominator q[z] are polynomials. It is not defined at points where q[z] = 0; such points are called poles. Fractint can be programmed (using its formula mode) to find the Julia set of a rational function, and it will ignore the poles in doing so.

The Julia-Fatou Theorem (5.7) does not apply to rational functions, but only to polynomials. It is not true that the Julia set is connected if and only if the critical orbits (of which there are always a finite number) are all bounded. We will see an example of this below.

Nevertheless we can look at a one parameter family of rational functions and define its Mandelbrot set to be the ste of rational functions in the family forwhich each critical orbit is bounded.

Here is an example which can be seen using the programs Garland and GarlandJulia in dcr95.frm. Consider the function

f[z_] := c*(z^q + z^(-q)) = c*(z^(2q) + 1)/z^q

where c is the pixel coordinate and the exponent q is userdefined. Then we have

f'[z] = q*c*(z^(q-1) - z^(-q-1))

= q*c*(z^(2q) - 1)/z^(q+1).

This derivative vanishes when z^(2q) = 1, i.e., when z is a 2qth root of unity. Hence there are 2q critical orbits, but we will see that it is only necessary to test one of them, the orbit for z = 1, which has the form

{1, 2c, f[2c], f[f[2c]], ...}

Note that if w^(2q) = 1, then either w^q = 1 or w^q = - 1. In the former case, f[w*z] = f[z], so z = w has the same orbit (beyond the first point) as z = 1. Thus q of the critical orbits are identical beyond the first point. If w^q = - 1, then

f[w*z] = c*((w*z)^(2q) - 1)/(w*z)^q

= - c*(z^(2q) - 1)/z^q

= - f[z]

f[f[w*z]] = f[-f[z]]

= (-1)^q*f[f[z]]

f[f[f[w*z]]] = (-1)^(q^2)*f[f[f[z]]]

etc.

This means that each point (beyond the first) in the orbit of w*z is the same as the corresponding point in the orbit of z up to sign. This means that the 2q critical orbits are either all bounded or all unbounded.  Figure 12.3. The garland Mandelbrot set for q = 3 and the corresponding Julia set for c = 1/2.

Note the symmetry and the appearance of miniature Mandelbrot sets in the left picture of Figure 12.3. The point c = 1/2 is the center of the leftmost cardioid, so its 6 critical orbit are all bounded; in fact each of the critical points is an attarcting fixed point. However the Julia set shown on the right does not appear to be connected. Recall the the theorem of Julia and Fatou (5.7) does not apply here.

Every cubic polynomial is equivalent for our purposes to one of the form f[z_] := z^3 - 3a^2*z + b for constants a and b. This manes that the full Mandelbrot set of cubic polynomials is parametrized by two complex variable a and b, and hence it is 4-dimensional. We cannot look at it in its entirety, we can only look at 2-dimensional slices of it. There are many ways to do this, and some are implemented by programs in dcr95.frm.

• CubicMandelLine looks at a complex line through the origin in parameter space by setting a = p1*pixel, b = p2*pixel. Setting p1 = 0 has the same effect as using manzpower with exponent 3. Setting p2 =0 gives an image that includes 4 copies of the period 2 bud on the classical Mandelbrot set shown below.  Figure 12.4. CubicMandelLine with p2 = 0 and Blanchard with n = 3.

This should be compared with Blanchard, which gives the Mandelbrot set for f[z_] := c*z*(1+z^n), which turns out to have n copies of a symmetrized period n bud.

• CubicMandelSlice looks at a complex line in parameter space by setting a = pixel, b = p1*a + p2. In particular we can set b equal a constant p2 by setting p1 = 0.
• CubicMandelRoot looks at a complex line in parameter space by setting a = pixel and choosing b so that a prescribed number r = p1 is a root of f.
• CubicMandelFixed sets a = pixel and chooses b in such a way that f[z] has a fixed point with derivative u = p1. It would be interesting to animate this with u moving around the unit circle. Setting u = 0 gives an image that has two types of sets occuring at many different scales: replicas of the quadratic Mandelbrot set and a second larger type. A detail of this image is shown below.  Figure 12.6. Detail of CubicMandelFixed with u = 0 and the full image with u = .5 + .866I.

• CubicMandel1Orbit sets a = pixel and chooses b in such a way that f[-a]=a, so only one orbit has to be tested. This image is not connected and has many miniature Ms. Some details are shown below.  Figure 12.7. Details of CubicMandel1Orbit at a = -1 (magnification 5) and a = -.29810+.65445*I (magnificiation 1600).

• CubicJulia gives the Julia set for fixed values of a and b.CubicJuliaFixed does it for fixed a and u with b chosen as in CubicMandelFixed, and CubicJulia1Orbit does it for fixed a with b chosen as in CubicMandel1Orbit.

Distorting the classical Mandelbrot set.

The program DistortMandel in dcr95.frm produces distorted pictures of M by altering the relation between c and pixel. The relevant code here is a = p1, b = 10^p2, c = a*b*pixel/(a + b*pixel). The program then makes the usual Mandelbrot computation with the number c. If we solve the equation for pixel, we get

pixel = r[c_] := a*c/(b*(a-c)).

Thus raising b from its default value of 1 has the effect of zooming out by a factor off 10^p2. We will refer to this image as the Mandelbrot set inverted at a.

Suppose for the moment that p2 = 0, so b = 1. Then if a is a large number, c is approximately equal to pixel, so the image looks a lot like M. If a is off the real axis, then the resulting image is a lopsided version of M, similar to the ones seen in miniature form in M itself.

Things get more interesting when the complex number a (which must be nonzero) is close to or inside M. If a and c are close, then the value of pixel is very large, and pixel is infinite when c=a. This means

• If a is in the interior of M, then for b suffciently large, all but the central area of the screen will be black as in the left portion of Figure 12.8 below. In that illustration, the period 2 bud (whose center is at -1) has been turned inside out. The large circle in the picture is the edge of this bud. The main cardioid is on the left, the period 4 bud that is normally to the left of the period 2 bud is now on the right, and the main antenna is pointing toward the center. If we choose a to be a nonzero point inside the main cardioid, we would see a region shaped like a tear drop corresponding to the exterior of the cardioid.
• If a is preperiodic, then the small scale self-similarity associated with it gets converted to large scale self-similarity. In the right half of Figure 12.8, the black body on the right consists of the main cardioid, and the now slightly larger period 2 bud. The black object on the left is the period 3 miniature M with cups at c = -1.75. Another example is the right half of Figure 12.9, for which a = I and b = 10^1.5 = 31.6.  the balck object near the center consists of the main cardiodi with the period 3 and 9 buds attached. The black obect in the upper left is the period 4 miniature M.  Further zoomouts will reveal more miniature Ms clooser to c = I.
• If a is the root of a bud, then the edge of the bud and the object it is attached to get transformed into parallel lines, as seen in the left half of Figure 12.9. In this case we have set p2 = .68, the approximate value of I*Pi/Log. The effect of this "zoom out" is a 90 degree rotation. the vsible secondary buds are equally spaced and half roughly the same size.  Figure 12.8. DistortMandel with a = -1 and a = -2.  Figure 12.9. DistortMandel with a = -.75, p2 =.68*I and a = I, p2 = 1.5.

Study topics.

• Try this for the Feigenbaum points -1.4011524 (period doubling), -1.786440252979 (period tripling) and other points like them. You may want ot use a version of Fractint (19.6 or above) that supports more than 2^15 iterations.
• Try it for the Fibonacci point -.39067+.58681* (more precisely u/2-u^2/4 where u = Exp[Pi*I*(Sqrt-1)/2]). In this case the distortion viewed at a large scale looks just like the original viewed at a small scaleand rotated half a turn. Why is that?
• Write a variant of the program that allows you to toggle back and forth between a small scale picture of the area near c in M and a large scale picture of M inverted at c.
• Try for other preperiodic points like .437924241359 + .3418920843381*I, the main junction point near the 1/5 bud. Try it for a spiral point in seahorse valley.
• Write a program that distorts Julia sets in a similar way. The formula parser that come with version 19.6 of Fractint supports three (rather than two) complex parameters.
• Try using other functions to distort M.
• Find some miniature M's which are distorted and try to match their shapes with this program.  Is there a lmiit to how badly distorted they can be?

Some mathematical background for distortion.

A function of the form

h[z_] := (m*z + n)/(p*z + q)

(such as the one that occurs in DistortMandel above) for constants m, n, p and q is called a birational map or Moebius transformation. It is undefined when its denominator p*z + q is zero, i.e., when z = -q/p. This point is called a pole of h.

This function is closely related to the 2 x 2 matrix M = {{m, n}, {p, q}}. Given two such functions h1 and h2 with matrices M1 and M2, the composite function h1[h2[z]] is another birational map with matrix M1.M2. In particular the function h has an inverse if and only if its matix does, and this happens if and only if the determinant m*q - n*p is nonzero. These facts are easy exercises.

For example in DistortMandel, c is obtained from pixel by applying the birational map

h[pixel_] := a*b*pixel/(a + b*pixel),

so the associated matrix is M = {{a*b, 0}, {b, a}}. Its determinant is a^2*b, which is nonzero if both a and b are nonzero. Its inverse is {{1/(a*b), 0}, {-(1/a^2), 1/a}}, and the associated birational map is the function r[c] defined above.