## Mandelbrot & Julia Sets

Interactive visualization of fractals

By Juan Carlos Ponce Campuzano, 15/August/2018

### The Mandelbrot Set

Essentially, the Mandelbrot set is generated by iterating a simple function on the points of the complex plane. The points that produce a cycle (the same value over and over again) fall in the set, whereas the points that diverge (give ever-growing values) lie outside it. When plotted on a computer screen in many colors (different colors for different rates of divergence), the points outside the set can produce pictures of great beauty. The boundary of the Mandelbrot set is a fractal curve of infinite complexity, any portion of which can be blown up to reveal ever more outstanding detail, including miniature replicas of the whole set itself.

The Mandelbrot set is certainly the most popular fractal, and perhaps the most popular object of contemporary mathematics of all. Since Benoît B. Mandelbrot (1924-2010) discovered it in 1979-1980, while he was investigating the mapping $z \rightarrow z ^2+c$, it has been duplicated by tens of thousands of people around the world (including myself).

### Constructing the Mandelbrot Set

Here is how the Mandelbrot set is constructed. Take a starting point $z_0$ in the complex plane.
Then we use the quadratic recurrence equation
$$z_{n+1}=z_{n}^2+z_0$$
to obtain a sequence of complex numbers $z_n$ with $n=0, 1, 2, \ldots$. The points $z_n$ are
said to form the *orbit* of $z_0$, and the Mandelbrot set, denoted by $M$, is defined as
follows:

If the orbit $z_n$ fails to go to infinity, we say that $z_0$ is contained within the set $M$. If the orbit $z_n$ does go to infinity, we say that the point $z_0$ is outside $M$.

Take, for example, $z_0=1$. Then we have
\[
\begin{array}{rcl}
%\hline
%\text{ } & z_{n+1}=z_{n}^2+z_0 \\
%\hline
z_0 &=& 1 \\
%\hline
z_1 &=& 1^2 + 1 = 2 \\
%\hline
z_2 &=& 2^2 + 1 = 5\\
%\hline
z_3 &=& 5^2 + 1 = 26 \\
%\hline
z_4 &=& 26^2 + 1 = 677 \\
%\hline
&\vdots&
\end{array}
\]
As you can see, $z_n$ just keeps getting bigger and bigger. Thus $z_0=1$ is *not* in the
Mandelbrot
set. But if we choose different values for $z_0$ this won't always be the case. Consider now the
value $z_0=i$. In this case, we obtain:
\[
\begin{array}{rcl}
%\hline
% \text{ } &=& z_{n+1}=z_{n}^2+z_0 \\
%\hline
z_0 &=& i \\
%\hline
z_1 &=& i^2 + i = -1 + i \\
%\hline
z_2 &=& (-1+i)^2 + i = -2i+i = -i\\
%\hline
z_3 &=& (-i)^2 + i = -1+i \\
%\hline
z_4 &=& (-1+i)^2 + i = -i \\
%\hline
&\vdots&
\end{array}
\]
It is clear that in this case further iterations will just repeat the values $−1+i$ and $−i$.
All of these complex numbers lie within distance 3 of the origin. So they stay in a bounded
subset of the plane; they do not run out to infinity. So the number $z_0=i$ is *in* the
Mandelbrot set.

### Colorful Mandelbrot Set

The simplest algorithm for generating a representation of the Mandelbrot set is known as the escape time algorithm. A repeating calculation is performed for each $x$, $y$ point in the plot area and based on the behavior of that calculation, a color is chosen for that pixel.

In the following applet, the HSV color scheme is used and depends on the distance from point $z_0$ (in exterior or interior) to nearest point on the boundary of the Mandelbrot set. In other words, provided that the maximal number of iterations is sufficiently high, we can obtain a picture of the Mandelbrot set with the following properties:

- Every pixel that contains a point of the Mandelbrot set is colored black.
- Every pixel that does not cotain a point of the Mandelbrot set is colored using hue values depending on how close that point is to the Mandelbrot set.

Now explore the Mandelbrot set. Zoom in or out in different regions. Change the number of iterations and observe what happens to the plot. You can also plot the orbit.

**+:**Zoom In

**-:**Zoom Out

**R**=Reset view

**O**=Orbit

**I**=Information & Frame

### The Julia Set

In the previous section we showed how the Mandelbrot set can be generated using the expression \[z_{n+1}=z_{n}^2+z_0.\] This is a particular case of the quadratic recurrence equation \begin{eqnarray}\label{julia} z_{n+1}=z_{n}^2+c \end{eqnarray} with $c$ a fixed complex number. The set we obtain with this equation is known as the Julia set. In fact, there is a different Julia set for almost every $c$.

Similarly as we did for the Mandelbrot set, we obtain a sequence of complex numbers $z_n$ with $n=0,1,2,\ldots$. Again, the points $z_n$ are said to form the orbit of $z_0$, and the Julia set is defined as follows:

If the orbit $z_n$ fails to escape to infinity, the initial $z_0$ is said to belong to thefilled-in Julia Set.

The Julia set is named after the French mathematician Gaston Julia
who investigated their properties in 1915 and culminated in his famous paper in 1918:
*Mémoire
sur l’itération des fonctions rationnelles*.
While the Julia set is now associated with the quadratic polynomial in (\ref{julia}),
Julia was interested in the iterative properties of a more general expression, namely
\[z^4 + \frac{z^3}{z-1} + \frac{z^2}{z^3 + 4 z^2 + 5} + c.\]
The Julia sets, defined by the equation (\ref{julia}), can take all kinds of
shapes, and a small change in $c$ can change the Julia
set very greatly. In 1979, with the help of computer, B. B. Mandelbrot studied the Julia sets
and tried to classify all the possible shapes and came up with a new shape: the Mandelbrot Set.

Explore the Julia sets in the applet below. Zoom in or out in different regions. Change the number of iterations and observe what happens to the plot. Move the mouse around and observe the different Julia sets depending of the value of $c$.

**+:**Zoom In

**-:**Zoom Out

**R**=Reset view

**O**=Orbit

**I**=Information & Frame

### The Mandelbrot and Julia Sets Connection

Due to the definition of the Mandelbrot set, there is a close correspondence between the geometry
of the Mandelbrot set at a given point and the structure of the corresponding Julia set. In
other
words, the Mandelbrot set forms a kind of index into the Julia set.
A Julia set is either connected or disconnected, values of $c$ chosen from within the
Mandelbrot set are connected while those from the outside of the Mandelbrot
set are disconnected. The disconnected sets are often called *dust*,
they consist of individual points no matter what resolution they are viewed at.

Explore the relationship between the Mandelbrot and Julia sets in the following applet. Move the mouse over to the Mandelbrot set to observe different Julia sets. Zoom in or out in different regions. Open the Controls menu to change the number of iterations or choose an specific value of $c$.

**+:**Zoom In

**-:**Zoom Out

**R**=Reset view

**O**=Orbit

**I**=Information & Frame

This applet was recently included in some of the animations for the following video from Quanta Magazine:

### Further reading

All the applets were made with p5.js and the source code can be found here:

If you want to learn how to program them yourself, I recommend you these tutorials:

I also recommend you some of the most widely read basic introductions to the Mandelbrot and Julia sets:

- The Fractal Geometry of Nature. by B. B. Mandelbrot. New York: W. H. Freeman, 1983.
- Fractals and Chaos: The Mandelbrot Set and Beyond. by B. B. Mandelbrot. New York: Springer-Verlang, 2004.
- The Beauty of Fractals by Heinz-Otto Peitgen & Peter H. Richter, Munich: Springer-Verlang, 1986.
- The Colours of Infinity, by Nigel Lesmoir-Gordon (ed), London: Springer-Verlang, 2010.

Finally, if you are adept at programming, then you can easily translate the pseudocode below into C++, Python, JavaScript, or any other language. For each pixel on the screen perform this operation:

```
{
x0 = x co-ordinate of pixel
y0 = y co-ordinate of pixel
x = 0
y = 0
iteration = 0
max_iteration = 1000
while ( x*x + y*y <= (2*2) AND iteration < max_iteration )
{
xtemp = x*x - y*y + x0
y = 2*x*y + y0
x = xtemp
iteration = iteration + 1
}
if ( iteration == max_iteration )
then
color = black
plot(x0,y0,color)
else
color = iteration
plot(x0,y0,color)
}
```

If you find this content useful, please consider supporting my work using the links below.

∞ Thanks!