Mandelbrot zooming maths 

Geometric zooming occurs about Feigenbaum points:

$$
c_{n+1} - c = a (c_n - c)
$$

Concretely with $3$ successive points $c_k$
$$
a = \frac{c_2 - c}{c_1 - c} = \frac{c_1 - c}{c_0 - c}
$$

Simple algebra gives:
$$
(c_2 - c) (c_0 - c) = (c_1 - c)^2
$$
which is linear in $c$ (the $c^2$ terms cancel):
$$
c = \frac{c_1^2 - c_2 c_0}{2 c_1 - c_2 - c_0}
$$

Substitute $c$ into the equation for $a$ to get its value.

Follow

Mandelbrot zooming maths 

Exponential zooming occurs in "Julia morphing":
$$
c_{n+1} - c = a (c_n - c)^b
$$

A hard problem for arbitrary $b$! Empirical data leads to consider the specific case $b = \frac{3}{2}$:
$$
(c_{n+1} - c)^2 = a (c_n - c)^3
$$

Concretely with $3$ successive points $c_k$,
$$
a = \frac{(c_2 - c)^2}{(c_1 - c)^3} = \frac{(c_1 - c)^2}{(c_0 - c)^3}
$$

Simple algebra gives:
$$
(c_2 - c)^2 (c_0 - c)^3 - (c_1 - c)^5 = 0
$$
which is a quartic in $c$ (the $c^5$ terms cancel), solvable by radicals or other methods. Solve for $a$ for each root $c$ using the previous equation, pick the $(c, a_c)$ with smallest $|a_c|$ (or maybe some other choice?).

· · Web · 1 · 0 · 0

Mandelbrot zooming maths 

But would that it were so easy: the roots of the quartic are hard to separate, even with 100x more bits of precision than the input, `acb_poly_find_roots()` fails to distinguish them. (Input precision 16000 bits.)

Which means I still haven't checked that the algorithm does something reasonable. There's also a seemingly-arbitrary choice of which $\pm$ square root: perhaps using 4 input points instead of 3 would be enough to narrow that down?

Work in progress...

Show thread

Mandelbrot zooming maths 

I found that (for one case tested so far) Julia morphing leads to patterns in specially restricted atom domains of the nucleii deeper in the zoom path. The example has angled internal address 1 2 3 8/17 50 1/3 59 1/3 121 1/3 245 1/3 ... (from here on each next period is twice the previous one, plus 3).

The influencing island has period 3, and for example the 3p245 atom domain (plus its symmetrical mirror) has a boundary that stretches just to the period 121 atom between them, with atom domain coordinate 1+0i at that point. This means $1 = $f^{245}(0, c_{121}) / f^3(0, c_{121})$ which is the same as $f^{245} = f^3$ which is "obviously true" because $245 = 121 + 121 + 3$ and the period of $c_{121}$ is $121$.

What I want to do is get an algorithm that goes from c_121 to c_245, ideally with a way to distinguish between 1/3 and 2/3 angles in the address.

I have:
$$
f^{245}(0, c_{245}) = 0 \\
f^{245}(0, c_{121}) = f^3(0, c_{121})
$$
and I can't just use Newton's method to find $c_{245}$ from initial guess $c_{121}$ because the symmetry means there's a fractal basin boundary right through $c_{121}$... maybe I can adapt the homotopy root methods I saw once[1] and construct a differential equation that transports $c_{121}$ to $c_{245}$...

[1] ir.lib.uwo.ca/etd/4028/ section 2.4 p19

Show thread

Mandelbrot zooming maths 

I think it works out as
$$\frac{dc}{dt} = 2 f^3(0, c_{121}) t / \frac{df^{245}(c)}{dc}$$
with $t = 0$ at $c = c_{121}$) to $t = 1$ where hopefully $c = c_{245}$. There remains the issue of needing to perturb the initial conditions so it can even get started...

Show thread

Mandelbrot zooming maths 

Setting $c = c_{121} + a t$ for small t and expanding Taylor series $f^{245}(c) = f^{245}(c_{121}) + a t f^{245}'(c_{121}) + \frac{1}{2} (a t)^2 f^{245}''(c_{121}) + O(t^3)$ before substituting into the original homotopy $f^{245}(c) = (1 - t^2) f^3(c_{121})$, then equating powers of $t^2$, gives

$$ a = \pm \sqrt{\frac{-2 f^3(c_{121})}{f^{245}''(c_{121})}} $$

so one can initialize the differential equation in the previous post with a suitably small $t$ and choice of sign for $a$.

The paper I referenced mentions solving the ODE with Runge-Kutta-Fehlberg RKF45 with pole-vaulting, but I think I'll try simple forward Euler to start with followed by Newton's method to polish the root when I get to $t = 1$

Show thread

Mandelbrot zooming maths 

Oh yuck, it fails after some iterations because $z$ and $dz/dc$ escape to inifinity -> nan and all explodes. Even if it didn't overflow, the increment of $c$ would be so tiny that it would be below the precision threshold and be lost entirely. I think this means my calculation of $a$ is wrong because investigating graphically the dwell values should be above the period, which means the overflow must be from a wild $c$ value way further away than it should be...

Show thread

Mandelbrot zooming maths 

The eventual end goal is an algorithm, that given an example coordinate, can analyse the patterns of zooming that led there and extrapolate those patterns to a greater zoom depth, or vary them sideways to related coordinates. In my mandelbrot-numerics repository I have a program to do some of the analysis (`c/bin/m-describe.c`). This morning I wrote another bit, in Haskell, to find a recurrence relation for the sequence of periods:

```
import Data.List (maximumBy, tails)
import Data.Ord (comparing)
import System.Environment (getArgs)

partitions 0 = [[]]
partitions n = [ part : parts | part <- [1..n], parts <- partitions (n - part) ]

recurrences = filter ((/= 0) . last) . filter (not . null) . map (map (subtract 1)) . partitions

score ps rs = length [()| (target:terms) <- tails ps, target == sum (zipWith (*) rs terms) ]

recurrence limit periods = maximumBy (comparing (score periods)) $ concatMap recurrences [1 .. limit]

main = do
[ limit ] <- map read <$> getArgs
interact ((++"\n") . unwords . map show . recurrence limit . reverse . map read . words)
```

Use it like
```
$ echo "1 2 3 6 38 79 196 430 1056 2542 6140 14822 35784" | runghc periodicity.hs 10
2 1
```
and verify by `35784 = 2 * 14822 + 1 * 6140`

Not perfect yet, needs a constant term too...

Show thread

Mandelbrot zooming maths 

Got small constant terms working with a quick hack, but for large terms I'll need to restructure the recurrence generator (or maybe do something more clever than generating all the recurrences up to a certain limit and picking the one that matches the most terms of the input)

```
$ echo "1 2 3 6 38 79 196 430 1056 2542 6140 14822 35784" | runghc periodicity.hs 16
0 2 1
```
35784 = 0 + 2 * 14822 + 1 * 6140

```
$ echo "1 4 8 63 130 264 532 1068 2140 4284" | runghc periodicity.hs 16
4 2
```
4284 = 4 + 2 * 2140

Show thread
Sign in to participate in the conversation
post.lurk.org

Welcome to post.lurk.org, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.