# Fractals/Iterations in the complex plane/boettcher

The Böttcher function of which maps the complement of the Mandelbrot set ( Julia set) conformally to the complement of the closed unit disk.

# Complex potential on dynamical plane

Exterior or complement of filled-in Julia set is :

$A_{f_{c}}(\infty )=K(f_{c})^{C}=F_{\infty }$ It can be analysed using

• escape time (simple but gives only radial values = escape time ) LSM/J,
• distance estimation ( more advanced, continuus, but gives only radial values = distance ) DEM/J
• Boettcher coordinate or complex potential ( the best )

" The dynamics of polynomials is much better understood than the dynamics of general rational maps" due to the Bottcher’s theorem

## Superattracting fixed points

For complex quadratic polynomial there are many superattracting fixed point ( with multiplier = 0 ):

• infinity ( It is always is superattracting fixed point for polynomials )
• $z_{s}=0\,$ is finite superattracting fixed point for map $f_{0}\,$ • $z_{s}=0\,$ and $z_{s}=-1\,$ are two finite superattracting fixed points for map $f_{-1}\,$ ## Description

Near super attracting fixed point (for example infinity) the behaviour of discrete dynamical system :

$z_{n+1}=f_{c}(z_{n})=z_{n}^{2}+c\,$ based on complex quadratic polynomial $f_{c}(z)=z^{2}+c\,$ is similar to

$w_{n+1}=f_{0}(w_{n})=w_{n}^{2}\,$ based on $f_{0}(w)=w^{2}\,$ It can be treated as one dynamical system viewed in two coordinate systems :

• easy ( w )
• hard to analyse( z )

In other words map $f_{c}\,$ is conjugate  to map $f_{0}\,$ near infinity.

### explicit closed form solution

For c = -2 Julia set is a horizontal segment between -2 and 2 on the real axis:

$\ K_{-2}\ {\overset {\underset {\mathrm {def} }{}}{=}}\ \{z\in \mathbb {C} :-2\leq \operatorname {Re} (z)\leq 2,\operatorname {Im} (z)=0\}$ Now:

• equipotential lines are elipses
• field lines are hyperbolas
• Boettcher map and it's inverse have explicit equations ( closed-form expression ):
$\Phi _{-2}(z)={\frac {z+{\sqrt {z^{2}-4}}}{2}}\,$ $\Phi ^{-1}(w)=w+{\frac {1}{w}}\,$ where branch cut is taken to coincide with $\ K_{-2}$ • charged line segment
• Joukowsky transformation

## History

In 1904 LE Boettcher:

• solved Schröder functional equation in case of supperattracting fixed point
• "proved the existence of an analytic function $\phi (z)\sim z$ near $\infty$ which conjugates the polynomial with $z^{d}$ , that is $\phi \circ p(z)=\phi (z)^{d}$ " ( Alexandre Eremenko ) 

## Names

• $w\,$ is Boettcher coordinate
• $\Phi _{c}\,$ is Boettcher function
• Boettcher Functional Equation:
 $\Phi _{c}(f_{c}(z))=\Phi _{c}(z)^{2}\,$ where :

 $w=\Phi _{c}(z)\,$ Complex potential or Boettcher coordinate has :

• radial values ( real potential ) LogPhi = CPM/J
• angular values ( external angle ) ArgPhi

Both values can be used to color with 2D gradient.

To compute Boettcher coordinate $w\,$ use this formula 

$w=\Phi _{c}(z)=z*\prod _{n=1}^{\infty }\left({\frac {f_{c}^{n}(z)}{f_{c}^{n}(z)-c}}\right)^{1/2^{n}}\,$ It looks "simple", but :

## LogPhi - Douady-Hubbard potential - real potential - radial component of complex potential

### CPM/J

Note that potential inside Kc is zero so :

Pseudocode version :

if (LastIteration==IterationMax)
then potential=0    /* inside  Filled-in Julia set */
else potential= GiveLogPhi(z0,c,ER,nMax); /* outside */


It also removes potential error for log(0).

#### Full version

Math (full) notation :

$LogPhi_{c}(z)=ln|z|+\sum _{n=1}^{\infty }{\frac {1}{2^{n}}}ln|1+{\frac {c}{(f_{c}^{n-1}(z))^{2}}}|$ Maxima (full) function :

GiveLogPhi(z0,c,ER,nMax):=
block(
[z:z0,
logphi:log(cabs(z)),
fac:1/2,
n:0],
while n<nMax and abs(z)<ER do
(z:z*z+c,
logphi:logphi+fac*log(cabs(1+c/(z*z))),
n:n+1
),
return(float(logphi))
)$ #### Simplified version The escape rate function of a polynomial f is defined by : $G_{f}(z)=\lim _{n\rightarrow \infty }{\frac {1}{2^{n}}}log^{+}|f^{n}(z)|\,$ where : $log^{+}=max(log,0)$ "The function Gp is continous on C and harmonic on the complement of the Julia set. It vanishes identically on K(f) and as it has a logarithmic pole at infinity, it is a it is the Green's function for C/ K(f)." ( Laura G. DeMarco)  Math simplified formula : $SLogPhi_{c}(z)={\frac {log(f^{n}(z))}{2^{n}}}\,$ Maxima function : GiveSLogPhi(z0,c,e_r,i_max):= block( [z:z0, logphi, fac:1/2, i:0 ], while i<i_max and cabs(z)<e_r do (z:z*z+c, fac:fac/2, i:i+1 ), logphi:fac*log(cabs(z)), return(float(logphi)) )$


If you don't check if orbit is not bounded ( escapes, bailout test) then use this Maxima function :

GiveSLogPhi(z0,c,e_r,i_max):=
block(
[z:z0, logphi, fac:1/2, i:0],
while i<i_max and cabs(z)<e_r do
(z:z*z+c,
fac:fac/2,
i:i+1 ),
if i=i_max
then logphi:0
else logphi:fac*log(cabs(z)),
float(logphi)
)$ C version : double jlogphi(double zx0, double zy0, double cx, double cy) /* this function is based on function by W Jung http://mndynamics.com */ { int j; double zx=zx0, zy=zy0, s = 0.5, zx2=zx*zx, zy2=zy*zy, t; for (j = 1; j < 400; j++) { s *= 0.5; zy = 2 * zx * zy + cy; zx = zx2 - zy2 + cx; zx2 = zx*zx; zy2 = zy*zy; t = fabs(zx2 + zy2); // abs(z) if ( t > 1e24) break; } return s*log2(t); // log(zn)* 2^(-n) }//jlogphi  Euler version by R. Grothmann ( with small change : from z^2-c to z^2+c) : function iter (z,c,n=100) ... h=z; loop 1 to n; h=h^2+c; if totalmax(abs(h))>1e20; m=#; break; endif; end; return {h,m}; endfunction x=-2:0.05:2; y=x'; z=x+I*y; {w,n}=iter(z,c); wr=max(0,log(abs(w)))/2^n;  ### Level Sets of potential = pLSM/J Here is Delphi function which gives level of potential : Function GiveLevelOfPotential(potential:extended):integer; var r:extended; begin r:= log2(abs(potential)); result:=ceil(r); end;  ### Level Curves of potential = equipotential lines = pLCM/J ## ArgPhi - External angle (angular component of complex potential) and external ray One can start with binary decomposition of basin of attraction of infinity. The second step can be using $\Psi _{c}\,$ ### period detection How to find period of external angle measured in turns under doubling map : Here is Common Lisp code : (defun give-period (ratio-angle) "gives period of angle in turns (ratio) under doubling map" (let* ((n (numerator ratio-angle)) (d (denominator ratio-angle)) (temp n)) ; temporary numerator (loop for p from 1 to 100 do (setq temp (mod (* temp 2) d)) ; (2 x n) modulo d = doubling) when ( or (= temp n) (= temp 0)) return p )))  Maxima CAS code : doubling_map(n,d):=mod(2*n,d);  /* catch-throw version by Stavros Macrakis, works */ GivePeriodOfAngle(n0,d):= catch( block([ni:n0], for i thru 200 do if (ni:doubling_map(ni,d))=n0 then throw(i), 0 ) )$

/* go-loop version, works */
GiveP(n0,d):=block(
[ni:n0,i:0],
block(
loop,
ni:doubling_map(ni,d),
i:i+1,
if i<100 and not (n0=ni) then go(loop)
),
if (n0=ni)
then i
else 0
);

/* Barton Willis while version without for loop , works */
GivePeriod(n0,d):=block([ni : n0,k : 1],
while (ni : doubling_map(ni,d)) # n0 and k < 100 do (
k : k + 1),


## Lamination of dynamical plane

Here is long description