Fractals/Iterations in the complex plane/boettcher
Contents
- 1 Intro
- 2 Complex potential on dynamical plane
- 2.1 LogPhi - Douady-Hubbard potential - real potential - radial component of complex potential
- 2.2 ArgPhi - External angle - angular component of complex potential
- 2.3 Lamination of dynamical plane
- 3 See also
- 4 References
Intro[edit]
" The dynamics of polynomials is much better understood than the dynamics of general rational maps" due to the Bottcher’s theorem^{[1]}
Superattracting fixed points[edit]
For complex quadratic polynomial there are many superattracting fixed point ( with multiplier = 0 ):
- infinity ( It is always is superattracting fixed point for polynomials )
- is finite superattracting fixed point for map
- and are two finite superattracting fixed points for map
Description[edit]
Near^{[2]} super attracting fixed point (for example infinity) the behaviour of discrete dynamical system :
based on complex quadratic polynomial is similar to
based on
It can be treated as one dynamical system viewed in two coordinate systems :
- easy ( w )
- hard to analyse( z )
^{[3]}
In other words map is conjugate ^{[4]} to map near infinity. ^{[5]}
History[edit]
In 1904 LE Boettcher :
- solved Schröder equation^{[6]}^{[7]} in case of supperattracting fixed point^{[8]}
- "proved the existence of an analytic function near which conjugates the polynomial with , that is " ( Alexandre Eremenko ) ^{[9]}
Names[edit]
- is Boettcher coordinate
- is Boettcher function
- Boettcher Functional Equation ^{[10]}^{[11]}:
where :
Exterior or complement of filled-in Julia set is :
- a basin of attraction of infinity ( superattracting fixed point)
- one of components of the Fatou set
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 , gives :
- radial values ( real potential ) LogPhi = CPM/J
- angular values ( external angle ) ArgPhi
So both values can be used to color with 2D gradient.
First compute Boettcher coordinate using this formula ^{[12]}
It looks "simple", but square root of complex nuber gives two values so one have to choose one value.
Complex potential on dynamical plane[edit]
LogPhi - Douady-Hubbard potential - real potential - radial component of complex potential[edit]
CPM/J[edit]
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[edit]
Math (full) notation : ^{[13]}
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[edit]
The escape rate function of a polynomial f is defined by :
where :
"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) ^{[14]}
Math simplified formula :
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) :^{[15]}
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[edit]
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[edit]
ArgPhi - External angle - angular component of complex potential[edit]
One can start with binary decomposition of basin of attraction of infinity.
The second step can be using
period detection[edit]
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), if k = 100 then 0 else k)$
Computing external angle
External angle (argument) is argument of Boettcher coordinate
Because Boettcher coordinate is a product of complex numbers so argument of product is :
Constructing the spine of filled Julia set[edit]
Algorithm for constructiong the spine is described by A. Douady^{[16]}
- join and ,
- (to do )
Drawing dynamic external ray[edit]
Field lines in in the Fatou domain[edit]
Explanation by Gert Buschmann
backwards iteration[edit]
This method has been used by several people and proved by Thierry Bousch. ^{[17]}
Code in c++ by Wolf Jung can be found in procedure QmnPlane::backray() in file qmnplane.cpp ( see source code of program mandel version 5.3 ). ^{[18]}
- Ray for periodic angle ( simplest case )
It will be explained by an example :
First choose external angle (in turns). External angle for periodic ray is a rational number.
Compute period of external angle under doubling map.
Because "1/3 doubled gives 2/3 and 2/3 doubled gives 4/3, which is congruent to 1/3" ^{[19]}
or
- ^{[20]}
so external angle has period 2 under doubling map.
Start with 2 points near infinity (in conjugate plane):
on ray 1/3 is a point
on ray 2/3 is a point .
Near infinity so one can swith to dynamical plane ( Boettcher conjugation )
Backward iteration (with proper chose from two possibilities)^{[21]} of point on ray 1/3 goes to ray 2/3, back to 1/3 and so on.
In C it is :
/* choose one of 2 roots: zNm1 or -zNm1 where zN = sqrt(zN - c ) */ if (creal(zNm1)*creal(zN) + cimag(zNm1)*cimag(zN) <= 0) zNm1=-zNm1;
or in Maxima CAS :
if (z1m1.z01>0) then z11:z1m1 else z11:-z1m1;
One has to divide set of points into 2 subsets ( 2 rays). Draw one of these 2 sets and join the points. It will be an approximation of ray.
- Ray for preperiodic angle ( to do )
Drawing dynamic external ray using inverse Boettcher map by Curtis McMullen[edit]
This method is based on C program by Curtis McMullen^{[22]} and its Pascal version by Matjaz Erat^{[23]}
There are 2 planes^{[24]}here :
- w-plane ( or f0 plane )
- z-plane ( dynamic plane of fc plane )
Method consist of 3 big steps :
- compute some w-points of external ray of circle for angle and various radii (rasterisation)
- where
- map w-points to z-point using inverse Boettcher map
- draw z-points ( and connect them using segments ( line segment is a part of a line that is bounded by two distinct end points^{[25]} )
First and last steps are easy, but second is not so needs more explanation.
Rasterisation[edit]
For given external ray in plane each point of ray has :
- constant value ( external angle in turns )
- variable radius
so points of ray are parametrised by radius and can be computed using exponential form of complex numbers :
One can go along ray using linear scale :
t:1/3; /* example value */ R_Max:4; R_Min:1.1; for R:R_Max step -0.5 thru R_Min do w:R*exp(2*%pi*%i*t); /* Maxima allows non-integer values in for statement */
It gives some w points with equal distance between them.
Another method is to use nonlinera scale.
To do it we introduce floating point exponent such that :
and
To compute some w points of external ray in plane for angle use such Maxima code :
t:1/3; /* external angle in turns */ /* range for computing R ; as r tends to 0 R tends to 1 */ rMax:2; /* so Rmax=2^2=4 / rMin:0.1; /* rMin > 0 */ caution:0.93; /* positive number < 1 ; r:r*caution gives smaller r */ r:rMax; unless r<rMin do ( r:r*caution, /* new smaller r */ R:2^r, /* new smaller R */ w:R*exp(2*%pi*%i*t) /* new point w in f0 plane */ );
In this method distance between points is not equal but inversely proportional to distance to boundary of filled Julia set.
It is good because here ray has greater curvature so curve will be more smooth.
Mapping[edit]
Mapping points from -plane to -plane consist of 4 minor steps :
- forward iteration in plane
until is near infinity
- switching plane ( from to )
( because here, near infinity : )
- backward iteration in plane the same ( ) number of iterations
- last point is on our external ray
1,2 and 4 minor steps are easy. Third is not.
Backward iteration uses square root of complex number. It is 2-valued functions so backward iteration gives binary tree.
One can't choose good path in such tree without extre informations. To solve it we will use 2 things :
- equicontinuity of basin of attraction of infinity
- conjugacy between and planes
Equicontinuity of basin of attraction of infinity[edit]
Basin of attraction of infinity ( complement of filled-in Julia set) contains all points which tends to infinity under forward iteration.
Infinity is superattracting fixed point and orbits of all points have similar behaviour. In other words orbits of 2 points are assumed to stay close if they are close at the beginning.
It is equicontinuity ( compare with normality).
In plane one can use forward orbit of previous point of ray for computing backward orbit of next point.
Detailed version of algorithm[edit]
- compute first point of ray (start near infinity ang go toward Julia set )
- where
here one can easily switch planes :
It is our first z-point of ray.
- compute next z-point of ray
- compute next w-point of ray for
- compute forward iteration of 2 points : previous z-point and actual w-point. Save z-orbit and last w-point
- switch planes and use last w-point as a starting point :
- backward iteration of new toward new using forward orbit of previous z point
- is our next z point of our ray
- and so on ( next points ) until
Maxima CAS src code
/* gives a list of z-points of external ray for angle t in turns and coefficient c */ GiveRay(t,c):= block( [r], /* range for drawing R=2^r ; as r tends to 0 R tends to 1 */ rMin:1E-20, /* 1E-4; rMin > 0 ; if rMin=0 then program has infinity loop !!!!! */ rMax:2, caution:0.9330329915368074, /* r:r*caution ; it gives smaller r */ /* upper limit for iteration */ R_max:300, /* */ zz:[], /* array for z points of ray in fc plane */ /* some w-points of external ray in f0 plane */ r:rMax, while 2^r<R_max do r:2*r, /* find point w on ray near infinity (R>=R_max) in f0 plane */ R:2^r, w:rectform(ev(R*exp(2*%pi*%i*t))), z:w, /* near infinity z=w */ zz:cons(z,zz), unless r<rMin do ( /* new smaller R */ r:r*caution, R:2^r, /* */ w:rectform(ev(R*exp(2*%pi*%i*t))), /* */ last_z:z, z:Psi_n(r,t,last_z,R_max), /* z=Psi_n(w) */ zz:cons(z,zz) ), return(zz) )$
Lamination of dynamical plane[edit]
Here is long description
See also[edit]
References[edit]
- ↑ ON THE NOTIONS OF MATING by CARSTEN LUNDE PETERSEN AND DANIEL MEYER
- ↑ Neighbourhood in wikipedia
- ↑ The work of George Szekeres on functional equations by Keith Briggs
- ↑ Topological conjugacy in wikipedia
- ↑ How to draw external rays by Wolf Jung
- ↑ Schröder equation in wikipedia
- ↑ Lucjan Emil Böttcher and his mathematical legacy by Stanislaw Domoradzki, Malgorzata Stawiska
- ↑ L. E. Boettcher, The principal laws of convergence of iterates and their aplication to analysis (Russian), Izv. Kazan. fiz.-Mat. Obshch. 14) (1904), 155-234.
- ↑ Mathoverflow : Growth of the size of iterated polynomials
- ↑ Böttcher equation at Hyperoperations Wiki
- ↑ wikipedia : Böttcher's equation
- ↑ How to draw external rays by Wolf Jung
- ↑ The Beauty of Fractals, page 65
- ↑ Holomorphic families of rational maps: dynamics, geometry, and potential theory. A thesis presented by Laura G. DeMarco
- ↑ Euler examples by R. Grothmann
- ↑ A. Douady, “Algorithms for computing angles in the Mandelbrot set,” in Chaotic Dynamics and Fractals, M. Barnsley and S. G. Demko, Eds., vol. 2 of Notes and Reports in Mathematics in Science and Engineering, pp. 155–168, Academic Press, Atlanta, Ga, USA, 1986.
- ↑ Thierry Bousch : De combien tournent les rayons externes? Manuscrit non publié, 1995
- ↑ Program Mandel by Wolf Jung
- ↑ Explanation by Wolf Jung
- ↑ Modular arithmetic in wikipedia
- ↑ Square root of complex number gives 2 values so one has to choose only one. For details see Wolf Jung page
- ↑ c program by Curtis McMullen (quad.c in Julia.tar.gz)
- ↑ Quadratische Polynome by Matjaz Erat
- ↑ wikipedia : Complex_quadratic_polynomial / planes / Dynamical_plane
- ↑ wikipedia : Line segment