Uniformisation of the interior of Mandelbrot set components using multiplier map: internal rays , internal coordinate
c src code
// https://gist.github.com/Gro-Tsen/9f690a9461c99abb4a01249b1838b548// Gro-Tsen http://www.madore.org/~david/// Compute the coefficients of the Jungreis function, i.e., the// Fourier coefficients of the harmonic parametrization of the// boundary of the Mandelbrot set, using the formulae given in// following paper: John H. Ewing & Glenn Schober, "The area of the// Mandelbrot set", Numer. Math. 61 (1992) 59-72 (esp. formulae (7)// and (9)). (Note that their numerical values in table 1 give the// coefficients of the inverse series.)// The coefficients betatab[m+1][0] are the b_m such that// z + sum(b_m*z^-m) defines a biholomorphic bijection from the// complement of the unit disk to the complement of the Mandelbrot// set. The first few values are:// {-1/2, 1/8, -1/4, 15/128, 0, -47/1024, -1/16, 987/32768, 0, -3673/262144}// Formula: b_m = beta(0,m+1) where beta(0,0)=1,// and by downwards induction on n we have:// beta(n-1,m) = (beta(n,m) - sum(beta(n-1,j)*beta(n-1,m-j), j=2^n-1..m-2^n+1) - beta(0,m-2^n+1))/2 if m>=2^n-1, 0 otherwise// (beta(n,m) is written betatab[m][n] in this C program).#include<stdio.h>#include<math.h>#include<float.h>#include<assert.h>#ifndef NBCOEFS#define NBCOEFS 8193#endif#ifndef SIZEN#define SIZEN 14#endif#if ((NBCOEFS+4)>>SIZEN) != 0#error Please increase SIZEN#endifdoublebetatab[NBCOEFS+1][SIZEN];intmain(void){for(intn=0;n<SIZEN;n++)betatab[0][n]=1;for(intm=1;m<=NBCOEFS;m++){for(intn=SIZEN;n>=1;n--){if(m<(1<<n)-1)betatab[m][n-1]=0;else{doublev;assert(n<SIZEN);v=betatab[m][n];for(intk=((1<<n)-1);k<=m-(1<<n)+1;k++)v-=betatab[k][n-1]*betatab[m-k][n-1];v-=betatab[m-(1<<n)+1][0];betatab[m][n-1]=v/2;}}printf("%d\t%.17e\t%a\n",m-1,betatab[m][0],betatab[m][0]);}}
Maxima source code
/* batch file for maxima
uses :
- symmetry around horizontal ( 0X ) axis
- Psi_M function to map conjugate plane to parameter plane
- jungreis algorithm to
time :3818
*/
start:elapsed_run_time ();
jMax:50; /* precision = proportional to details and time of computations */
iMax:200; /* number of points to draw */
iMaxBig:400;
/* computes b coefficient of Jungreis function*/
betaF[n,m]:=block
(
[nnn:2^(n+1)-1],
if m=0
then 1.0
else if ((n>0) and (m < nnn))
then 0.0
else (betaF[n+1,m]- sum(betaF[n,k]*betaF[n,m-k],k,nnn,m-nnn)-betaF[0,m-nnn])/2.0
)$
b[m]:=betaF[0,m+1]$
/* -------------------------------*/
/* Power of w to j */
wn[w,j]:= if j=0 then 1 else w*wn[w,j-1]$
/* ---------Jungreis function ; c = Psi_M(w) ----------------------------- */
Psi_M(w):=w + sum(b[j]/wn[w,j],j,0,jMax)$
/* exponential for of complex number with angle in turns */
GiveCirclePoint(t):=R*%e^(%i*t*2*%pi)$ /* gives point of unit circle for angle t in turns */
GiveWRayPoint(R):=R*%e^(%i*tRay*2*%pi)$ /* gives point of external ray for radius R and angle tRay in turns */
NmbrOfCurves:9;
/* coordinate of w-plane not c-plane */
R_max:1.5;
R_min:1;
dR:(R_max-R_min)/NmbrOfCurves; /* for circles */
dRR:(R_max-R_min)/iMax; /* for rays */
/* --------------------------------------f_0 plane = w-plane -----------------------------------------*/
/*-------------- unit circle ------------*/
R:1;
circle_angles:makelist(i/iMax,i,0,iMax/2)$
CirclePoints:map(GiveCirclePoint,circle_angles)$
/* ---------------external circles ---------*/
circle_radii: makelist(R_min+i*dR,i,1,NmbrOfCurves)$
circle_angles:makelist(i/iMaxBig,i,0,iMaxBig/2)$
WCirclesPoints:[]$
for R in circle_radii do
WCirclesPoints:append(WCirclesPoints,map(GiveCirclePoint,circle_angles))$
/* -------------- external w rays -------------*/
ray_radii:makelist(R_min+dRR*i,i,1,iMax);
ray_angles:[0,1/3,1/7 , 2/7 ,3/7 ]; /* list of angles < 1/2 of root points */
WRaysPoints:[];
for tRay in ray_angles do
WRaysPoints:append(WRaysPoints,map(GiveWRayPoint,ray_radii));
/* -------------------------parameter plane = c plane -----------------------------------*/
MPoints:map(Psi_M,CirclePoints); /* Mandelbrot set points */
CRaysPoints:map(Psi_M,WRaysPoints); /* external z rays */
Equipotentials:map(Psi_M,WCirclesPoints);
/* add points below horizontal axis */
for w in CirclePoints do CirclePoints:cons(conjugate(w),CirclePoints);
for w in WRaysPoints do WRaysPoints:cons(conjugate(w),WRaysPoints);
for w in WCirclesPoints do WCirclesPoints:cons(conjugate(w),WCirclesPoints);
for c in MPoints do MPoints:cons(conjugate(c),MPoints);
for c in CRaysPoints do CRaysPoints:cons(conjugate(c),CRaysPoints);
for c in Equipotentials do Equipotentials:cons(conjugate(c),Equipotentials);
/* time */
stop:elapsed_run_time ();
time:fix(stop-start);
/* ---------------- draw *--------------------------------------------------------------------------*/
load(draw); /* Mario Rodríguez Riotorto http://www.telefonica.net/web2/biomates/maxima/gpdraw/index.html */
draw(file_name = "jung50es_2",
pic_width=1000,
pic_height= 500,
terminal = 'png,
columns = 2,
gr2d(title = " unit circle with external rays & circles ",
point_type = filled_circle,
points_joined =true,
point_size = 0.34,
color = red,
points(map(realpart, CirclePoints),map(imagpart, CirclePoints)),
points_joined =false,
color = green,
points(map(realpart, WCirclesPoints),map(imagpart, WCirclesPoints)),
color = black,
points(map(realpart, WRaysPoints),map(imagpart, WRaysPoints))
),
gr2d(title = "Parameter plane : Image under Psi_M(w) ",
points_joined =true,
point_type = filled_circle,
point_size =0.34,
color = blue,
points(map(realpart, MPoints),map(imagpart, MPoints)),
points_joined =false,
color = green,
points(map(realpart, Equipotentials),map(imagpart, Equipotentials)),
color = black,
points(map(realpart, CRaysPoints),map(imagpart, CRaysPoints))
)
);
Αδειοδότηση
Εγώ, ο κάτοχος των πνευματικών δικαιωμάτων αυτού του έργου, το δημοσιεύω δια του παρόντος υπό τις εξής άδειες χρήσης:
να μοιραστείτε – να αντιγράψετε, διανέμετε και να μεταδώσετε το έργο
να διασκευάσετε – να τροποποιήσετε το έργο
Υπό τις ακόλουθες προϋποθέσεις:
αναφορά προέλευσης – Θα πρέπει να κάνετε κατάλληλη αναφορά, να παρέχετε σύνδεσμο για την άδεια και να επισημάνετε εάν έγιναν αλλαγές. Μπορείτε να το κάνετε με οποιοδήποτε αιτιολογήσιμο λόγο, χωρίς όμως να εννοείται με οποιονδήποτε τρόπο ότι εγκρίνουν εσάς ή τη χρήση του έργου από εσάς.
παρόμοια διανομή – Εάν αλλάξετε, τροποποιήσετε ή δημιουργήσετε πάνω στο έργο αυτό, μπορείτε να διανείμετε αυτό που θα προκύψει μόνο υπό τους όρους της ίδιας ή συμβατής άδειας με το πρωτότυπο.
Παραχωρείται η άδεια προς αντιγραφή, διανομή και/ή τροποποίηση αυτού του εγγράφου υπό τους όρους της Άδειας Ελεύθερης Τεκμηρίωσης GNU, Έκδοση 1.2 ή οποιασδήποτε νεότερης έκδοσης δημοσιευμένης από το Ίδρυμα Ελεύθερου Λογισμικού· χωρίς Απαράλαχτους Τομείς, χωρίς Κείμενα Εξωφύλλου, και χωρίς Κείμενα Οπισθοφύλλου. Αντίγραφο της άδειας περιλαμβάνεται στην σελίδα με τίτλο GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue
Μπορείτε να επιλέξετε την άδεια της προτίμησής σας.
{{Information |Description=Better version made by Robert Dodier using Maxima/Clisp and jMax=100 |Source= |Date= |Author= |Permission= |other_versions= }}