Fig: Quadratic Julia sets depicted by combined methods. (a) A Siegel disc (). Exterior (blue) by level set, Julia (white) by modified inverse iteration, irrational flow (green) by the sine of the velocity. (b) Super-attracting period 3 (Solution of ). Exterior by continuous potential, Julia by modified inverse iteration, interior basins by level set. (c) Seahorse valley dendrite () by distance estimator, exterior by level set. (d) Parabolic bifurcation period1 to 20 ( adjacent to ). Exterior by level set, Julia by modified inverse iteration, petals by velocity.
Begin with the point for a fixed c and iterate . If we are depicting the Mandelbrot parameter plane, we begin instead with the critical point and iterate for each . If the point escapes a circle, say of radius 10, , we colour it by the number of iterations. If it remains bounded after a fixed number of iterations, we assume it cannot escape and colour it black (or white in the above examples).
This method will work for the Julia set of any function provided we can determine basins of attraction of fixed or periodic points, to apply the algorithm to. In the case of this is and the Julia set is the boundary of the basin of attraction of . In other functions it may be finite and multiple. In the case of transcendental functions, such as cos and exp, is an essential singularity and the Julia set is the closure of its basin of attraction and the target set may be or . This method will also work for the parameter plane (Mandelbrot set) of any function provided we can locate and handle the critical points and establish individual parameter planes for each.
Variation 1 Internal Basins:
If the Julia set has an internal attracting periodic point we can test for this by also finding the periodic cycle by first iterating the critical point until it becomes within of being periodic and then colour a non-escaping point by the number of iterations to bring within of a point on the cycle.
Variation 2 Continuous Potential (Quadratics only):
We can derive a continuous potential with an even gradation but less sensitivity at the boundary of by using the continuous potential formula for an escaping point.
Variation 3 Distance Estimator (Quadratics only):
For dealing with dendritic Julia sets, or the Mandelbrot set, to demonstrate connectivity, we can make two additional tests to detect proximity to :
(a) Test for overflow of the derivative of any point on the escaping orbit:
(b) Test for distance
We can calculate orbit derivatives iteratively as follows for the Julia set and for the Mandelbrot set, since we are differentiating with respect to c rather than z. In practice, O ~ 1600000, ~ 0.1. The derivative overflow tests for highly repulsive dynamics adjacent to .
Variation 4 Discrete Velocity of non-attracting Basins and Petals:
Compute, for the points that don?t escape, the average discrete velocity on the orbit.
Herman ring Irrational annular flow depicted
by sine of the discrete velocity, interior basin level sets red, exterior blue.
First find a repelling fixed point , , by solving . For , one of the two fixed points is always a repeller as , unless . Now plot the two inverse images of this point and repeat to form the n-th inverse iterates. This method requires a heap, or some equivalent data structure, to keep track of the branching tree of inverse iterates. If memory is exceeded we can randomly plot one or other roots and its pre-images. However this method has the problem that it is computationally intractable because the points are exponentially unevenly distributed over the Julia set, due to multifractality (fractal redistribution of the probabilities), resulting in the inverse mapping being strongly contractive to some features leaving others unrepresented, and thus fails to represent significant features of , even with exhaustive computation times.
Variation Modified Inverse Iteration MIIM:
We cut off the sub tree from a given if the derivative .
This eliminates dominant highly contractive regions of the inverse iteration, which have already been registered. We can calculate successive derivatives iteratively .
typedef double cno;
const short finish = 10000;
const short scal = 100;
const double gam = 2.0;
const double huge = 10000;
int nw, level,mysiz;
cno root1, root2;
Handle mSet, mMat;
long mapSize, PackScreen(Ptr);
cno* csq(cno cc) //gives 1 of 2 complex square roots - the other is symmetric
if (cc != 0)
rt = sqrt(cc + sqrt(cc * cc + cc * cc));
csqrt = rt / sq2;
csqrt = cc / sq2 / rt;
else if (cc >= 0)
csqrt = sqrt(cc);
csqrt = 0;
csqrt = sqrt(-cc);
csqrt = 0;
void iterate(cno val)
void fwdispold (void)
void sideptr(cno* myp)
void backptr(cno* myp)
void plot(cno* myp)
cno c, z, *zz;
c = a;
c = b;
z = 1 - 4 * c;
z = -4 * c;
zz = csq(z);
z = (1 - (*zz)) / 2;
z = -(*zz) / 2;
if (z * z + z * z < 0.5)
z = (1 + (*zz)) / 2;
z = (*zz) / 2; //find the greatest i.e. repelling root