Newton fractals
December 20, 2020
Another interesting set of fractals, are Newton fractals. Newton fractals are created by applying Newton's method to complex function $f(z)$. The method uses the iterated equation $$ z_{n+1} = z - \frac{f(z_n)}{f'(z_n)}. $$ If we want to apply Newton's method, we also need to find the derivative of the function $f(z)$. Since Newton's method is used to find the zero's of a function, if we repeatedly apply it to a point $z$, then $f(z_{n\rightarrow\infty}) = 0$, meaning that every point converges to a root of the complex function. Although the points usually converge to a root, it is also possible that is orbit cyclic.
Suppose we have the function $f(z) = z^3 - 1$, then the derivative is $f'(z) = 3z^2$. This function has three roots.
If we apply Newton's method for all the points in the plane $[-1, 1]\times[-1, 1]$, then each of these points will end up at one of those three roots.
We can then visualize the result by giving the resulting pixel value a color based on the root it ended up at.
In this case the color is determined by looking at the angle of the root, and then get a color from a color map.
The color map used in this example is hsv2rgb(angle + 0.1, 1, 1)
.
It took a few attempts to get this image. The silliest mistake I made was using a function that has only 1, or 2 roots. This simply results in an image with only one, or two colors.
Relaxed Newton's method
It is possible to modify the method by multiplying with a relaxation parameter $R$. This real number is used to increase/decrease the step size. The relaxed Newton's method is $$ z_{n+1} = z_n - R\cdot\frac{f(z_n)}{f'(z_n)}. $$ If we then let the value of R animate between $[0.2, 2.2]$, we can see what the effect of this relaxation parameter is. Press play in the shader below, to see the animation.
Generalized Newton's method
Another thing that can be done is to generalize the method by it multiplying with a complex number $a$, instead of using the real relaxation parameter: $$ z_{n+1} = z_n - a\cdot\frac{f(z_n)}{f'(z_n)}. $$ If we then let $\Re(z)$ and $\Im(z)$ animate between the values $[-1, 1]$, in this case with a Lissajous curve, we can see the effect $a$ has on the method. Press play in the shader below to see the animation.
Using a different color map
Instead of using the HSV color map, which gives us a rainbow based on the angle of the complex number, we are going to look at the magnitude of the complex number, which is $|z|$. We will also use the magma color map from matplotlib, which is created by Mattz and available on ShaderToy. I have slightly modified the color map, because I wanted it to wrap at the edges, instead of having a discontinuity.
Because we want to loop our color map, we will only use the fractional part of $|z|$. The following image is the Newton fractals rendered with the color map.