# Multibrot
Generalisation of Mandelbrot set to arbitrary power .
Here only integer are considered.
# 1 Critical Point
has the solution
which is where iteration should start from to determine the number of components that the filled-in Julia set has (1 if it remains bounded, infinitely many if it escapes to infinity).
# 2 Escape To Infinity
Suppose If that implies with some , then as .
Calculating,
Therefore, setting gives is arbitrarily small, so this gives bounds:
That is, will escape to infinity, and the whole set is contained in the ball of radius centered on the origin.
# 3 Boundedness
See:
“Cross-sections of multibrot sets”, Line Baribeau, Thomas Ransford https://arxiv.org/abs/1701.05535
Relevant result:
If then , that is, remains bounded.
# 4 Fast Exponentiation
Simply multiplying by times is inefficient. Much better is exponentiation by squaring:
This takes operations instead of , which is a big improvement.
The recursive description gives the operations in the reverse order to which they need to be performed.
The execution opcodes can be captured in a table, or in unrolled inner loops of generated code. The opcodes for one iteration of are , , and .
# 5 Perturbation
Perturbing gives an expression with terms: This is inefficient in terms of number of operations.
Images also can have glitches if care is not taken: the glitch test is no longer but needs to be more like (to be verified).
For greater efficiency and robustness, combine with fast exponentiation: store the reference before opcode step, that is, store values per iteration.
Then check and rebase pixel iterations using Zhuoran’s trick before each opcode step: whenever , set and (the latter by resetting the iteration index into the reference orbit; don’t reset the reference’s step index).
This works so easily because 0 is the only critical point, and so the initial portion of the reference orbit is a sequence of steps in the first iteration until the first at the start of the second iteration. For non-zero or multiple critical points it would be more complicated.
# 6 Implementation
Example implementation:
git clone https://code.mathr.co.uk/fractal-bits.git
cd fractal-bits/mandelbrot-arbitrary-power
make
./znc >100.pgm
display 100.pgmBrowse source: znc.c.