Polynomial Julia Sets
Enter a comma separated list of polynomial coefficients in the order of ascending
degree to define a polynomial. Hit the generate button to generate the filled Julia
set of the resulting polynomial using an escape time algorithm. You can click on
the image to choose an initial seed and visualize the resulting orbit.
Some theory
The Julia set
Definition: The filled Julia set
of a polynomial \(f\) is exactly the set of all initial seeds \(z_0\in\mathbb C\)
that lead to bounded orbits under iteration of \(f\).
The Julia set of \(f\) is the boundary of the filled Julia set.
Since the Julia set is the boundary of the filled Julia set any neighborhood (no matter
how small) of any point in the Julia set contains points that stay bounded under iteration
of \(f_c\) and points that diverge to \(\infty\) under iteration of \(f_c\).
The Julia set is exactly where the chaos lies under iteration of \(f_c\).
The escape time algorithm
We can generate an image of the filled Julia of the general polynomial
\(f(z)= a_nz^n+a_{n-1}z^{n-1}+\cdots+a_0\)
as follows.
- Choose an escape radius
- In the case of \(f_c(z)=z^2+c\), this can be the maximum of \(|c|\) and \(2\).
- For the more general polynomial, it can be the maximum of \(2|a_n|\) and
\[2\frac{|a_{n-1}|+\cdots+|a_0|}{|a_n|}.\]
-
Choose a maximum possible number of iterations. The correct choice really depends
on the function and how close you want to zoom in. For a global view of a Julia set
of a function of the form \(f_c(z)=z^2+c\), a maximum iteration count of \(100\) is
a sufficient and popular choice. Generally, the higher the maximum iteration count,
the more accurate the picture but the longer the computation time.
- Choose a grid of initial seeds in the complex plane. These will be represented as
pixels on our computer screen and we'll generate our image by shading each of these points.
- For each point in your grid of initial seeds, iterate the function \(f\) from that point
until one of two things happens.
- The iterate exceeds our escape radius, in which case we shade the pixel according
to how many iterates it took to get there, or
- We reach our maximum allowable number of iterates, in which case we color the
pixel black.