Julia Sets

Pascal Kraft is a researcher at the Institute for Applied and Numerical Mathematics of the Karlsruhe Institute of Technology (KIT) and he introduces us to Julia Sets which he investigated for his Bachelors Thesis. It is natural for us to think something like this: If I take two simple things and put them together in some sense, nothing too complex should arise from that. A fascinating result of the work of mathematicians like Gaston Julia and Benoît Mandelbrot dating back to the first half of the 20th century show that this assumption doesn't always hold.

In his bachelor's thesis under supervision of Jan-Philipp Weiß, Pascal Kraft worked on the efficient computation of Julia Sets. In laymans terms you can describe these sets as follows: Some electronic calculators have the functions of repeating the last action if you press "=" or "enter" multiple times. So if you used the root function of your calculator on a number and now you want the root of the result you simply press "=" again. Now imagine you had a function on your calculater that didn't only square the input but also added a certain value - say 0.5. Then you put in a number, apply this function and keep repeating it over and over again. Now you ask yourself if you keep pressing the "="-button if the result keeps on growing and tends to infinity or if it stays below some threshold indefinitely.

Using real numbers this concept is somewhat boring but if we use complex numbers we find, that the results are astonishing.

To use a more precise definition: for a function f(z), the Filled Julia Set is defined as the set of values z, for whom the series (f^n(z))_n stays bounded. The Julia Set is defined as the boundary of this set. A typical example for a suitable function f(z) in this context is f(z) = z^2 + c. We now look at the complex plane where the x-axis represents the real part of a complex number and the y-axis its imaginary part. For each point on this plane having a coordinate (x,y) we take the corresponding complex number z=x+iy and plug this value into our function f(z) and the results over and over again up to a certain degree until we see if this sequence diverges. Computing a graphical representation of such a Julia Set is a numerically costly task since we have no other way of determining its interior points other then trying out a large amount of starting points and seeing what happens after hundreds of iterations.

The results, however, turn out to be surprising and worth the effort. The geometric representations - images - of filled Julia Sets turn out to be very aesthetically pleasing since they are no simple compositions of elementary shapes but rather consist of intricate shapes and patterns. The reason for these beautiful shapes lie in the nature of multiplication and addition on the complex plane: A multiplication can be a magnification and down-scaling, mirroring and rotation, whereas the complex addition is represented by a translation on the complex plane. Since the function is applied over and over again, the intrinsic features are repeated in scaled and rotated forms over and over again, and this results in a self-similarity on infinite scales. In his bachelor's thesis, Pascal focussed on the efficient computation of such sets which can mean multiple things: it can either mean that the goal was to quickly write a program which could generate an image of a Julia Set, or that a program was sought which was very fast in computing such a program. Lastly it can also mean that we want to save power and seek a program which uses computational power efficiently to compute such an image, i.e. that consumes little energy. This is a typical problem when considering a numerical approach in any application and it arises very naturally here: While the computation of Julia Sets can greatly benefit from parallelization, the benefits are at loss when many tasks are waiting for one calculation and therefore the speedup and computational efficiency breaks down due to Amdahl's law.

The difference of these optimization criteria becomes especially obvious when we want to do further research ontop of our problem solver that we have used so far. The Mandelbrot Set for example is the set of values c, for whom the Filled Julia Set is not equal to the Julia Set (i.e. the Filled Julia Set has interior points). One detail is important for the computation of either of these sets: If we check one single point we can never really say if it is inside the Filled Julia Set for sure (unless we can prove periodicity but that is not really feasible). What we can show however is, that if the magnitude of a point in the series of computations is above a certain bound, the results will tend to infinity from this point on. The approach is therefore to compute steps until either a maximum of steps is reached or a certain threshold is exceeded. Based on this assumption, we see that computing a point which lies inside the filled Julia Set is the bigger effort. So if computing a Julia Set for a given parameter is a lot of work, its complex parameter c most likely lies inside the Mandelbrot Set (as we find many points for whom the computation doesn't abort prematurely and it is therefore likely that some of these points will be interior). If we want to draw the Mandelbrot Set based on this approach, we have to compute thousands of Julia Sets and if the computation of a single image was to take a minute this would not really be feasible anymore.

Since the computation of a Julia Set can even be done in a webbrowser these days, we include below a little tool which lets you set a complex parameter c and compute four different Julia Sets. Have fun with our Interactive Julia Sets!


References and further reading