11 votos

Mandelbrot límite

Hay una secuencia de parametrizada expresiones de la frontera de todos los principales focos de la conjunto de mandelbrot? Por el importante significado de todas las bombillas con un diámetro mayor que 0.01, por ejemplo. Estoy interesado en la generación de las características principales del conjunto de aplicar transformaciones. Quiero crear un vector de puntos de la frontera (para las principales características solamente) para una Matlab tipo de lenguaje. Sé el parametrizada expresión para el principal patrón polar cardioide y el período 2 de la bombilla centrado en -1.

9voto

zeroasterisk Puntos 165

Edit: he respondido a la pregunta de dónde están los centros de la mayor de las bombillas. Creo que el OP quiere una aproximación de los límites de las bombillas, que puede requerir una más exacta de la radio (tamaño/2), y una mejor aproximación de tamaño; véase mi edición de abajo.

Todas las bombillas son periódicas. Si n es el período de $f^{n}(0)=0$ donde $f^{n}=(f^{n-1})^2+c$, e $f^{0}=0$. Por lo que el centro de todas las bombillas (y cardiods), son todas las raíces de ecuaciones algebraicas. Para n=2, los dos centros mencionados: $c^2+c=0$, cuyos dos raíces son $c=0$$c=-1$. Por todas estas ecuaciones, se obtiene el trivial de la raíz c=0, que puede ser trivialmente deja fuera. Así, para n=3, después de excluir c=0, se obtiene una ecuación cúbica, $x^3+2x^2+x+1$, con una raíz real y dos raíces complejas. Para n=4, se obtiene un 8 de la orden de la ecuación. Factorizando los ceros triviales, c=0 y c=-1, se obtiene un sexto de la orden de la ecuación, $c^6 + 3c^5 + 3c^4 + 3c^3 + 2c^2 + 1$, con dos raíces reales, y dos pares de complejo conjugado raíces. Este proceso puede continuar hasta la saciedad, encontrar todos los valores de c que son los centros de las bombillas. Una forma de encontrar el aproximado de la bombilla de tamaño, es decir que si $f^{n}=0$, $f^{2n}=0$ así, pero también hay otra cercanos a cero para $f^{2n}=0$, lo que le da el tamaño aproximado de la bombilla.

He implementado el algoritmo anterior. Aquí están los resultados, para el periodo(n)=2 a 19, para un tamaño de 0.01. El tamaño de la bombilla se imprime en primer lugar, seguido por el hiperbólico centro para que el bulbo, que es un cero de la ecuación algebraica descrito anteriormente. El pari-gp código se publica a continuación estos resultados. No hay muchos grandes bulbos, y yo no encuentro ninguna con un periodo de>14! El algoritmo utiliza la aproximación de que el tamaño de una bombilla es $1.6(z^n-z^{2n})$ donde $z^{2n}$ es la más cercana periodo 2n cero no es igual a la $z^n$ cero. Edición de $1.647(z^n-z^{2n})$ podría ser más precisos, basados en la constante de Feigenbaum, a pesar de que es una limitación de la bifurcación de valor, así que tal vez 1.61 sería mejor. He utilizado una interesante rutina, para calcular dónde está el más cercano 2n cero es un polinomio cúbico que los factores en una ecuación cuadrática, y luego se usa el método de Newton para obtener una exacta ubicación de la oficina más cercana 2n bombilla. En el pari-gp código, si $f^n(c)$ es un cero, que la "y=estim2nzero(c,n); y=invzero(y,n*2);" devuelve el más cercano 2n cero.

Puede ejecutar con el radio más pequeño, como un segundo parámetro opcional en el periodnzero(n,l) de rutina. El periodnzero rutina es exacta, pero no he corrido para n>10 debido a los requisitos de memoria. El randomperiodn rutina de los partidos de la periodnzero rutina de los resultados para n=5 a n=10, para un radio de 0.01, cuando se utiliza con 50 iteraciones. El randomperiodn rutina sólo busca cerca de la frontera de los principales error y el 2n error, por lo que no puede encontrar todos los bulbos más pequeños. Por ejemplo, hay un periodo de(6) mini-mandelbrot en -1.723, con un tamaño de 0.0086, que la randomperiodn(6,50,0.005) no encuentra, que periodnzero(6,0.005) no se entera.

periodnzero(2)
0.497124226138932614 -1.00000000000000000
periodnzero(3)
0.0288243794158896630 -1.75487766624669276
0.185709338183664371 -0.122561166876653620 + 0.744861766619744237*I
periodnzero(4)
0.113351748952365738 -1.31070264133683288
0.0129942224028632946 -0.156520166833755062 + 1.03224710892283180*I
0.0868986952447806464 0.282271390766913880 + 0.530060617578525299*I
periodnzero(5)
0.0782244856281390343 -0.504340175446244000 + 0.562765761452981964*I
0.0471208943401874649 0.379513588015923745 + 0.334932305597497587*I
periodnzero(6)
0.0511889369361296355 -1.13800066665096451 + 0.240332401262098302*I
0.0282242861365737314 0.389006840569771235 + 0.215850650870819108*I
0.0433219915118591584 -0.113418655949436572 + 0.860569472501573055*I
periodnzero(7)
0.0426479226891188707 -0.622436295041293588 + 0.424878436475629184*I
0.0181617636688071151 0.376008681846767560 + 0.144749371321632865*I
0.0345136362674653694 0.121192786105906486 + 0.610611692210754212*I
periodnzero(8)
0.0246366004359986754 -1.38154748443206147
0.0294627655353046600 -0.999442387206567375 + 0.265387532468407285*I
0.0318189851964300712 -0.359102390112449160 + 0.617353453398826859*I
0.0208607361162561978 0.324819701465459679 + 0.563815622140333520*I
0.0123381391559926738 0.359031062836614452 + 0.100934876864297563*I
periodnzero(9)
0.0265592163668188400 -0.672333174859118535 + 0.337714901737740193*I
0.0177260936911318770 0.328902947296482145 + 0.410912590892970139*I
0.0185193079849810855 -0.0315529748129236492 + 0.790783175406400223*I
0.0203944122420907310 -0.210705526779016425 + 0.804635638170098617*I
randomperiodn(10,50)
0.0191394909327384273 -0.919278545244102030 + 0.247048121273991288*I
0.0203674647559298651 -1.21039963741797970 + 0.152874772077754334*I
0.0182000934472523787 0.0502718348233550644 + 0.630468552293935962*I
0.0195932658053389602 -0.533089681450721463 + 0.602309758248200881*I
0.0115562613503280188 0.408518185116081373 + 0.340038064137432468*I
randomperiodn(11,50)
0.0179922313096332877 -0.697838195122424838 + 0.279304134101365780*I
0.0101876737961521636 0.376030292897131701 + 0.266467605276236516*I
0.0142926479408153391 0.172311886095790515 + 0.570759959055939233*I
0.0170058824618214608 -0.293902905530376044 + 0.632861961802271055*I
randomperiodn(12,50)
0.0116593892097745116 -1.15193862345878364 + 0.269129812348473540*I
0.0134209900466310253 -0.871266416358976791 + 0.222317914834670266*I
0.0155654577554219361 -0.562959829953243594 + 0.471465232041119193*I
0.0116746885689485088 -1.34419625941643939 + 0.0549457739045995046*I
randomperiodn(13,50)
0.0129307773546223782 -0.712577592671273148 + 0.237792568209519750*I
0.0110764626149245331 0.0109444639810614271 + 0.638228893362735870*I
0.0129409256506876911 -0.407104083085098332 + 0.584852842868102271*I
randomperiodn(14,50)
0.0109194116271260426 -1.22997158539723289 + 0.110671419951984272*I
0.0109394099532368402 -1.05674050872754759 + 0.248827389019942445*I
0.0104598592537462953 -0.257053859166882025 + 0.639339268776504382*I
0.0111324718829115060 -0.644083434218572230 + 0.440431179466495531*I
randomperiodn(15,50)
randomperiodn(16,50)
randomperiodn(17,50)
randomperiodn(18,50)
randomperiodn(19,50)

Este es el pari-gp programa que genera los resultados anteriores.

default(format,"g0.18");
z=1.0;
precis=precision(z);
plim=10^(-precis/2); /* precision limit */
periodnzero(j,l) = {
  print("periodnzero("j")");
  C0=croot(j);
  for (n=1,length(C0),estimz2(C0[n],j,l));
}
/* return all the imag>0 roots of zn, iterating zn<=zn^2+x */
croot(m) = {
  local(zn,Cr,n,i,v);
  zn=x;
  for (n=1,m-1, zn=zn^2+x; );
  Cr=polroots(zn);
  i=0;
  v=vector(length(Cr));
  for (n=1,length(Cr),
    z=Cr[n];
    if (((real(z)<>0) || (imag(z)<>0)) && (imag(z)>=0),
      if (imag(z)==0, z=real(z));
      i++;
      v[i]=z;
    );
  );
  return(v);
}
estimz2(c,n,l) = {
  local(z,y,i);
  z=0;
  y=0;
  if (l==0,l=0.01);
  /* check to make sure that the z_n root is not repeating by a factor of n */
  for (i=1,n-1,z=z^2+c;if (abs(z)<plim,y=i));
  if (y==0,
    y=estim2nzero(c,n);  /* estimate for 2n zero */
    y=invzero(y,n*2); /* refinement for estimate */
    /* 1.6(zn-z2n) is the approximate size of the bug or bulb */
    if (abs(c-y)>l/1.6,
      print(1.6*abs(c-y)" "c );
      return(y);
    );
    return(0);
  ,
    return(0);
  );
}
/* use newton's method, centered at c */
/* iterating z=z^2+x+c with z only needing a0 and a1 terms */
invzero(c,n)={
  local(z,i,a1);
  z=1;
  while ((abs(z)>plim) && (abs(z)<2),
    z=0;
    i=0;
    while ((i<n) && (abs(z)<2), a1=2*a1*z+1;z=z^2+c;i++);
    c=c-z/a1;
  );
  if (abs(z)>plim, print("invzero covergence error "c" "c+z));
  return(c);
}
/* find nearest 2n zero, assuming that n is a zero */
estim2nzero(c,n) = {
  local(z1,z2,y,i,a0,a1,a2,a3);
  a0=0;a1=0;a2=0;a3=0;
  /* iterating 2n times, centered at c, */
  /* starting with z=0; z<=z^2+x+c, truncating to x^3 terms */
  for (i=1,2*n,
    a3=2*a3*a0+2*a1*a2;
    a2=2*a2*a0+a1^2;
    a1=2*a1*a0+1;
    a0=a0^2+c;
  );
  /* assume zn=0, so z2n=0, so a0=0, */
  /* divide by x, solve quadratic root closest to zero */
  a0=a1;
  a1=a2;
  a2=a3;
  y=a1^2-4*a0*a2;
  z1=(-a1+sqrt(y))/(2*a2);
  z2=(-a1-sqrt(y))/(2*a2);
  if (abs(z1)>abs(z2),z1=z2);
  return(c+z1);
}

shortperiodn(nt,nc,cnt,il) = {
  local(z);
  if (il==0,il=0.01,j);
  z=0;for (i=1,nt,z=truncs(z^2-0+x+nc,cnt+1));
  v=polroots(z);
  for (n=1,cnt,
    z=v[n]+nc;
    y=abs(gfunc(z,nt));
    if (y<0.04,
      z=invzero(z,nt);
      if (abs(imag(z))<1E-21, z=real(z));
      if (((real(z)<>0) || (imag(z)<>0)) && (imag(z)>=0),
        j=1;
        while (abs(oj[j]-z)>1E-21 && (oj[j]<>0), j++);
        if (oj[j]==0,
          if (estimz2(z,nt,il)<>0, oj[j]=z);
        );
      );
    );
  )
}
randomperiodn(nt,n,il)= {
  local(i,j);
  oj=vector(128);
  print("randomperiodn("nt","n")");
  for (i=1,n,
    shortperiodn(nt,cfromz(goldr^i),16,il); /* main cardiod */
    shortperiodn(nt,-1+0.25*(goldr^i),16,il); /* period2 bulb */
  );
}
/* truncate series */
truncs(z,n)={
  local(y,i);
  y=0;
  if (n==0,n=8);
  for (i=0,n-1,y=y+polcoeff(z,i)*x^i);
  return(y);
}
gfunc(c,n)={local(i,z);z=0;for (i=1,n,z=z^2+c);z}
cfromz(z) = {z=z/2-1/2;z=-(z^2-1/4);}
lfromc(c) = {1/2-sqrt(1/4-c);}
gold=2/(sqrt(5)+1);
goldr=exp(2*Pi*I*gold);

8voto

zeroasterisk Puntos 165

En la discusión, el op preguntó si las bombillas son exactamente circular, y si podía publicar el código para generar la serie de Taylor para las bombillas. La respuesta rápida es que sólo el periodo2 bombilla centrado en el -1 es exactamente circular. Mi primera respuesta que dio el centro y el tamaño de algunas de las bombillas y cardioids. El el tamaño es bastante crudo aproximación de una bombilla o patrón polar cardioide, ya que todos, pero uno de los bombillas no es exactamente circular, y desde el cardioids también la necesidad de una dirección. He mejorado el original de pari-gp código para calcular la asignación de los bulbos/cardioide para la círculo unidad. El pari-gp código a continuación. islopetaylor(c,n) devuelve la serie de taylor para el período n patrón polar cardioide o bulbo cerca de c.

Todos estos hiperbólico centros pueden tener sus bombillas y/o cardioids asignada para el círculo unidad, donde el límite del círculo unitario correspondiente a la $|\text{slope}|=1$. El interior del círculo, se asigna a los puntos en el interior de la hiperbólico de la región, donde la región tiene una atracción de punto fijo de periodo n.

Encontrar a esa región consiste en conseguir una aproximación para el más cercano de punto fijo, en el barrio de la hiperbólico centro. El punto fijo es la atracción, así que puede recorrer, comenzando con z=0 con periodo n, $z \mapsto f^{n}(z)$ donde $f(z)=z^2+c$, y c es el punto cuyas punto fijo es la deseada, por lo que en el límite, el punto fijo es $l=\lim_{k \to \infty} f^{kn}(0)$, $f^{n}(l)=l$.

En el punto fijo l, calcular el derivitive. $\frac{dy}{dx}f^{n}(l+x)$, donde l es la punto fijo, como se describió anteriormente. Si llamamos a este derivitive punto fijo de la función g(c), entonces la función de asignación de la bombilla/cariod para el círculo unitario es $g^{-1}(z)$. Para un dada la bombilla, $g^{-1}(0)$ es hiperbólica centro de la bombilla o patrón polar cardioide. Yo generado la serie de Taylor mediante una circular de Cauchy de la integral aproximación numérica en un radio de 0.5, con 50 puntos de muestreo; lo que da resultados exactos a aproximadamente 20 dígitos decimales o así, con un plazo de 25 series de Taylor.

Aquí está un ejemplo de cómo utilizar el pari-gp de código, a continuación, imprimir la serie de taylor para el period4 bombillas y cardioids. EDIT: yo también se incluyen los resultados para todos los años3 y period5 bombillas y cardioids. Similares código de trabajo para otros períodos, y tamaños. El prtpoly rutina es sólo para la impresión de los primeros términos; El polinomio de salida de de islopetaylor puede ser utilizado directamente. Para los bulbos, el diámetro es aproximadamente el doble del valor absoluto de x coeficiente; la serie de Taylor es, obviamente, mucho más exacta. Mi primera respuesta estimado de 1,6 x la distancia más cercana a la 2n bombilla es también una buena aproximación. p=periodnzero(n,l); también funciona para n=6..10. Hay un total de dieciséis period6 bombillas y cardioids, la mayoría de los cuales son bastante pequeñas. p=randomperiodn(n,l) las obras de los bulbos más grandes, para p>=5.

p=periodnzero(3,0.001); /* rtn period3 bulbs size>0.001 */
/* taylor series for p3 bulbs, first 7 terms of gt poly  */
for (n=1,length(p),gt=islopetaylor(p[n]); prtpoly(gt,7));
p=periodnzero(4,0.001); /* rtn period4 bulbs size>0.001 */
for (n=1,length(p),gt=islopetaylor(p[n]); prtpoly(gt,7));
p=periodnzero(5,0.001); /* rtn period5 bulbs size>0.001 */

---- below is the output ----

(08:49) gp > p=periodnzero(3,0.001); /* rtn period3 bulbs size>0.001 */
periodnzero(3);
0.0288243794158896630 -1.75487766624669276
0.185709338183664371 -0.122561166876653620 + 0.744861766619744237*I
(09:06) gp > /* taylor series for p3 bulbs, first 7 terms of gt poly  */
(09:06) gp > for (n=1,length(p),gt=islopetaylor(p[n]); prtpoly(gt,7));
{z=   -1.75487766624669276
+x^ 1* 0.00951775795656622345
+x^ 2*-0.00439215019285891483
+x^ 3*-0.000255593673326239667
+x^ 4* 0.00000507529911656475223
+x^ 5* 0.00000242235932732248524
+x^ 6* 0.000000167831763783128979
}
{z=   (-0.122561166876653620 + 0.744861766619744237*I)
+x^ 1*(-0.00475887897828311173 - 0.0943369626738123763*I)
+x^ 2*( 0.00219607509642945741 - 0.00111573891029371424*I)
+x^ 3*( 0.000127796836663119834 + 0.0000966580666527584112*I)
+x^ 4*(-0.00000253764955828237611 + 0.0000131076055547205131*I)
+x^ 5*(-0.00000121117966366124262 + 0.000000329634003020475535*I)
+x^ 6*(-0.0000000839158818915644933 - 0.0000000951268060412508001*I)
}
(09:06) gp > p=periodnzero(4,0.001); /* rtn period4 bulbs size>0.001 */
periodnzero(4);
0.00157165406194145265 -1.94079980652948475
0.113351748952365738 -1.31070264133683288
0.0129942224028632946 -0.156520166833755062 + 1.03224710892283180*I
0.0868986952447806464 0.282271390766913880 + 0.530060617578525299*I
(09:06) gp > for (n=1,length(p),gt=islopetaylor(p[n]); prtpoly(gt,7));
{z=   -1.94079980652948475
+x^ 1* 0.000495813881701186015
+x^ 2*-0.000244518035475789364
+x^ 3*-0.00000233355263604428247
+x^ 4* 0.0000000534459067501123460
+x^ 5* 0.00000000181828170546195257
+x^ 6*-3.23710018614877151 E-12
}
{z=   -1.31070264133683288
+x^ 1* 0.0589801138156112997
+x^ 2* 0.00165047843656841052
+x^ 3* 0.0000693045614883186867
+x^ 4* 0.00000269896930057060465
+x^ 5* 0.0000000523314280419260434
+x^ 6*-0.00000000565936605551606439
}
{z=   (-0.156520166833755062 + 1.03224710892283180*I)
+x^ 1*( 0.00345889762902884997 - 0.00245474033761904195*I)
+x^ 2*(-0.00152469430548367362 + 0.00130179544716022133*I)
+x^ 3*(-0.000143828841409685183 - 0.0000378568944213399944*I)
+x^ 4*( 0.00000385828834515733905 - 0.00000994102399364532939*I)
+x^ 5*( 0.00000140472771445005478 + 0.000000673772055503541835*I)
+x^ 6*(-0.0000000523614237035883056 + 0.000000196431825642151357*I)
}
{z=   ( 0.282271390766913880 + 0.530060617578525299*I)
+x^ 1*(-0.0331968614776850928 - 0.0287926429442936276*I)
+x^ 2*( 0.000821714104937363043 - 0.00133634537333004157*I)
+x^ 3*( 0.000110343336983547981 + 0.0000572780596940444853*I)
+x^ 4*(-0.00000523449594881769755 + 0.0000117988699179895988*I)
+x^ 5*(-0.00000143180256932374878 - 0.000000528764025646146377*I)
+x^ 6*( 0.0000000551927252814394115 - 0.000000186571532024463594*I)
}
(09:06) gp > p=periodnzero(5,0.001); /* rtn period5 bulbs size>0.001 */
periodnzero(5);
0.00124142647819312318 -1.86078252220485487
0.00643004051683055908 -1.62541372512330374
0.0782244856281390343 -0.504340175446244000 + 0.562765761452981964*I
0.00750234541167943880 0.359259224758007439 + 0.642513737138542349*I
0.0471208943401874649 0.379513588015923745 + 0.334932305597497587*I
0.00540957192966561334 -0.0442123577040706231 + 0.986580976280892768*I
0.00109467916151353002 -0.198042099364253840 + 1.10026953729269853*I
0.00454737524002394192 -1.25636793006818076 + 0.380320963472722507*I
(09:06) gp > for (n=1,length(p),gt=islopetaylor(p[n]); prtpoly(gt,7));
{z=   -1.86078252220485487
+x^ 1* 0.000390175993253921407
+x^ 2*-0.000193606895721835075
+x^ 3*-0.00000111641882446931317
+x^ 4* 0.0000000945861637002427640
+x^ 5* 0.00000000182079818330302844
+x^ 6*-6.26858107084452022 E-11
}
{z=   -1.62541372512330374
+x^ 1* 0.00202943297897757605
+x^ 2*-0.00100562087600704118
+x^ 3*-0.0000100969021567375794
+x^ 4* 0.00000299007153447035234
+x^ 5* 0.0000000448549883194611938
+x^ 6*-0.0000000140393194397544057
}
{z=   (-0.504340175446244000 + 0.562765761452981964*I)
+x^ 1*( 0.0227804277538978753 - 0.0313962947316761485*I)
+x^ 2*(-0.000187493753264388258 + 0.000240573004638874982*I)
+x^ 3*(-0.0000173170154681859400 + 0.0000483439272385087499*I)
+x^ 4*( 0.00000186140591725642208 - 0.00000140612260499651276*I)
+x^ 5*(-0.0000000359687742865028775 - 0.000000238921821822236246*I)
+x^ 6*(-0.0000000140479390745627075 + 0.0000000154228924213440731*I)
}
{z=   ( 0.359259224758007439 + 0.642513737138542349*I)
+x^ 1*( 0.00125062477418773157 - 0.00205512908763713047*I)
+x^ 2*(-0.000473500958540455897 + 0.00108015520081310997*I)
+x^ 3*(-0.000108144537904337611 - 0.0000221136751964296838*I)
+x^ 4*( 0.00000365352385186322974 - 0.0000109205152171821385*I)
+x^ 5*( 0.00000143644262907468698 + 0.000000753636636313957017*I)
+x^ 6*(-0.000000133837667274211728 + 0.000000211504575842695306*I)
}
{z=   ( 0.379513588015923745 + 0.334932305597497587*I)
+x^ 1*(-0.0230612323455722479 - 0.00538785818574664379*I)
+x^ 2*( 0.000223715667692254576 - 0.00100096226615781152*I)
+x^ 3*( 0.0000924390752585046801 + 0.0000283948327212593745*I)
+x^ 4*(-0.00000444777220263711731 + 0.0000109991366640167731*I)
+x^ 5*(-0.00000147488363872001793 - 0.000000750149091456313290*I)
+x^ 6*( 0.000000131362683170454543 - 0.000000211363105809565828*I)
}
{z=   (-0.0442123577040706231 + 0.986580976280892768*I)
+x^ 1*(-0.00168631410697906826 + 0.000419905880430706866*I)
+x^ 2*( 0.000824122737737012684 - 0.000147452933665481287*I)
+x^ 3*( 0.0000148294436540590271 - 0.0000423012304388835166*I)
+x^ 4*(-0.00000179611219530982926 + 0.000000252886482712731910*I)
+x^ 5*( 0.000000132428561354388846 + 0.000000194421657850058569*I)
+x^ 6*( 0.0000000186904817675855266 - 0.0000000121128281556966309*I)
}
{z=   (-0.198042099364253840 + 1.10026953729269853*I)
+x^ 1*( 0.000338411530274354574 + 0.0000551258574846720436*I)
+x^ 2*(-0.000169328304150344563 - 0.0000234867261464734632*I)
+x^ 3*( 0.0000000298451123227361170 - 0.00000280280755567260578*I)
+x^ 4*( 0.0000000425917226359921085 + 0.0000000627926935964822686*I)
+x^ 5*(-0.00000000297733729350064710 + 0.00000000108485294983731985*I)
+x^ 6*( 6.65684728185643910 E-12 - 9.88920256175429103 E-11*I)
}
{z=   (-1.25636793006818076 + 0.380320963472722507*I)
+x^ 1*(-0.000846269215461327949 - 0.00116600657512957892*I)
+x^ 2*( 0.000389349729034723316 + 0.000591786929496725821*I)
+x^ 3*( 0.0000237849154393727229 - 0.00000452582161657443604*I)
+x^ 4*(-0.000000856099479577055100 - 0.00000108478239958016467*I)
+x^ 5*(-0.0000000783802180386627187 + 0.0000000644312584363213421*I)
+x^ 6*( 0.00000000487678960666910970 + 0.00000000500884893452725251*I)
}
(09:06) gp > p=periodnzero(5,0.001); /* rtn period3 bulbs size>0.001 */
periodnzero(5);
0.00124142647819312318 -1.86078252220485487
0.00643004051683055908 -1.62541372512330374
0.0782244856281390343 -0.504340175446244000 + 0.562765761452981964*I
0.00750234541167943880 0.359259224758007439 + 0.642513737138542349*I
0.0471208943401874649 0.379513588015923745 + 0.334932305597497587*I
0.00540957192966561334 -0.0442123577040706231 + 0.986580976280892768*I
0.00109467916151353002 -0.198042099364253840 + 1.10026953729269853*I
0.00454737524002394192 -1.25636793006818076 + 0.380320963472722507*I

Aquí está el pari-gp programa para generar este. Este código también incluye actualizaciones para el código de la respuesta original. Más actualizaciones, incluyendo la plotsetup rutina, y maketheplot rutina; ver la imagen de abajo.

print ("periodnzero(n,l); /* calculate all periodn bulbs size>l, returns vector */");
print ("randomperiodn(n,l); /* n>4 approximate all periodn bulbs size>l rtn vect */");
print ("invzero(c,n); /* use Newton's method */");
print ("estim2nzero(c,n); /* find nearest 2n zero */");
print ("gt=islopetaylor(c,n); /* taylor series for c, n iterations */ ");
print ("prtpoly(gt,10); /* print taylor series for islopetaylor */ ");
print ("plotsetup(low,high,numb,radius,randn);   maketheplot;");
default(format,"g0.18");
z=1.0;
precis=precision(z);
plim=10^(-0.5*precis); /* precision limit */
/* plim=10^(-0.65*precis); */ /* precision limit */
periodnzero(n,l) = {
  local(z,i,pcur,otemp,Cp,oout);
  otemp=vector(2^(n-1));
  pcur=0;
  zn=0;
  print("periodnzero("n");");
  Cp=croot(n);
  for (i=1,length(Cp),
    z=estimz2(Cp[i],n,l);
    if (z<>0,pcur++;otemp[pcur]=Cp[i]);
  );
  oout=vector(pcur);
  i=1;while (otemp[i]<>0,oout[i]=otemp[i];i++);
  return(oout);
}
/* return all the imag>0 roots of zn, iterating zn<=zn^2+x */
croot(m) = {
  local(zn,Cr,n,i,v);
  zn=x;
  for (n=1,m-1, zn=zn^2+x; );
  Cr=polroots(zn);
  i=0;
  v=vector(length(Cr));
  for (n=1,length(Cr),
    z=Cr[n];
    if (((real(z)<>0) || (imag(z)<>0)) && (imag(z)>=0),
      if (imag(z)==0, z=real(z));
      i++;
      v[i]=z;
    );
  );
  return(v);
}
estimz2(C0,n,l) = {
  local(z,y,i);
  z=0;
  y=0;
  if (l==0,l=0.01);
  /* check to make sure that the z_n root is not repeating by a factor of n */
  for (i=1,n-1,z=z^2+C0;if (abs(z)<plim,y=i));
  if (y==0,
    y=estim2nzero(C0,n);  /* estimate for 2n zero */
    y=invzero(y,n*2); /* refinement for estimate */
    /* 1.647(zn-z2n) is approx size of the bug or bulb, based on Feignenbaum limit */
    if (1.6*abs(C0-y)>l,
      print(1.6*abs(C0-y)" "C0 );
      return(y);
    );
    return(0);
  ,
    return(0);
  );
}
sizez2(C0,n) = {
  1.6*abs(C0-invzero(estim2nzero(C0,n),n*2));
}
/* use newton's method, centered at C0 */
/* iterating z=z^2+x+C0 with z only needing a0 and a1 terms */
/* s<>0 is used to calculate inv(s) instead of inv(0) */
/* m<>0 is used to calculate Misiurewicz point near C0,n,m */
invzero(C0,n,s,m)={
  local(z,i,j,a1,sz,sa1);
  z=1;
  j=0;
  while ( ((abs(z)>plim)||(j<1)) && (abs(z)<2) && (j<50),
    j++;
    z=0;  a1=0;
    sz=0; sa1=0; /* Misiu */
    i=0;
    while ((i<n) && (abs(z)<2),
      a1=2*a1*z+1;
      z=z^2+C0;
      i++;
      if (i==m, sz=z; sa1=a1; ); /* Misiu */
    );
    z=z+sz-s;
    a1=a1+sa1;
    C0=C0-z/a1;
/*  if (j<3, C0=C0-z/(2*a1), C0=C0-z/a1); */
/*  C0=C0-(z-s)/a1; */
/*  if ((abs(z-s)>plim),print(z-s)); */
  );
  jm=0.001*a1^-2;
  if (abs(z)>plim, return(0));
  return(C0);
}
/* find nearest 2n zero, assuming that n is a zero */
estim2nzero(C0,n) = {
  local(z1,z2,y,i,a0,a1,a2,a3);
  if (C0==0,return(-1));
  a0=0;a1=0;a2=0;a3=0;
  /* iterating 2n times, centered at C0, */
  /* starting with z=0; z<=z^2+x+C0, truncating to x^3 terms */
  for (i=1,2*n,
    a3=2*a3*a0+2*a1*a2;
    a2=2*a2*a0+a1^2;
    a1=2*a1*a0+1;
    a0=a0^2+C0;
  );
  /* assume zn=0, so z2n=0, so a0=0, */
  /* divide by x, solve quadratic root closest to zero */
  a0=a1;
  a1=a2;
  a2=a3;
  y=a1^2-4*a0*a2;
  z1=(-a1+sqrt(y))/(2*a2);
  z2=(-a1-sqrt(y))/(2*a2);
  if (abs(z1)>abs(z2),z1=z2);
  return(C0+z1);
}

shortperiodn(n,nc,cnt,l) = {
  local(z,y,i,j);
  z=0;for (i=1,n,z=truncs(z^2-0+x+nc,cnt+1));
  v=polroots(z);
  for (i=1,cnt,
    z=v[i]+nc;
    y=0;
    for (j=1,n,y=y^2+z);
    y=abs(y);
    if (y<0.04,
      z=invzero(z,n);
      if (abs(imag(z))<1E-21, z=real(z));
      if (imag(z)<0,z=conj(z));
      if (((real(z)<>0) || (imag(z)<>0)) && (imag(z)>=0),
        j=1;
        while (abs(oj[j]-z)>1E-21 && (oj[j]<>0), j++);
        if (oj[j]==0,
          if (estimz2(z,n,l)<>0, oj[j]=z; if (j==15, oj[j]=v[i]+nc));
        );
      );
    );
  )
}
randomperiodn(n,l,j)= {
  local(i,y,oout);
  if (l==0,l=0.01);
  if (j==0, j=50);
  oj=vector(128);
  print("randomperiodn("n");");
  for (i=1,j,
    shortperiodn(n,cfromz(goldr^i),16,l);    /* main cardiod */
    shortperiodn(n,-1+0.25*(goldr^i),16,l);  /* 2n bulb */
    shortperiodn(n,-2+fwidth*((gold*i)%1),16,l); /* tip */
  );
  i=1;while (oj[i]<>0,i++);
  oout=vector(i-1);
  i=1;while (oj[i]<>0,oout[i]=oj[i];i++);
  return(oout);
}
/* truncate series */
truncs(z,n)={
  local(y,i);
  y=0;
  if (n==0,n=8);
  for (i=0,n-1,y=y+polcoeff(z,i)*x^i);
  return(y);
}
gfunc(C0,n)={local(i,z);z=0;for (i=1,n,z=z^2+C0);z}
cfromz(z) = subst(x/2-x^2/4,x,z);
lfromc(C0) = {1/2-sqrt(1/4-C0);}
gold=2/(sqrt(5)+1);
goldr=conj(exp(2*Pi*I*gold));
/* feigenbaum point+2, and feigenbaum ratio */
fwidth= 0.598844810907949399476173212106138707773702;
feign = 4.669201609102990671853203820466201617258186;

/* slope at the fixed point of C0, using n iterations */
slopeh(C0,n)={
  local(l,l0,l1,i,j,co,s);
  s=1;
  co=0;
  while (abs(s)>plim, /* one past plim */
    l0=co;l1=1; /* l1=slope */
    for (i=1,n,l0=l0^2+C0;l1=l1*2*l0);
    s=l0-co; /* as co approaches fixed point, (l0-co) approaches zero */
    co=co-(l0-co)/(l1-1); /* co=updated approximation for fixed point */
  );
  l0=co;l1=1; /* one more iteration to improve l1 slope approximation */
  for (i=1,n,l0=l0^2+C0;l1=l1*2*l0);
  return(l1);
}
invslopeh(z,C0,n,est) = {
  local (y,s,slop,lastyz,curyz,lest,ly,pgoal);
  lastyz=100;
  y=slopeh(C0+est,n);
  curyz=abs(y-z);
  lest=est+curyz*jm;
  ly=slopeh(C0+lest,n);
  pgoal=10^(-precis/1.3);
  /* generate the fixed point for pentation by iteration slog */
  s=1;
  while ((curyz>pgoal) && ((curyz<lastyz) || (s<3)),
    est=precision(est,precis);
    y=precision(y,precis);
    slop=(y-ly)/(est-lest);
    lest=est;
    ly=y;
    est=est+(z-y)/slop;
    lastyz=curyz;
    y=slopeh(C0+est,n);
    curyz=abs(y-z);
    s++;
  );
  if (curyz>0.1, print (curyz " bad result, need better initial est"));
  return(est);
}
/* default use r=0.5, samples=50 */
islopetaylor(C0,n,r,samples) = {
  local(rinv,s,t,x1,y,z,tot,t_est,tcrc,halfsamples,wtaylor,terms);
  if (n==0,
    n=1;
    z=C0;
    while (abs(z)>plim,z=z^2+C0;n++);
  );
  if (r==0,r=0.5);
  C0=invzero(C0,n);
  if (samples==0, samples=50); 
  halfsamples=samples/2;
  terms = floor(samples*0.51);
  t_est    = vector (samples,i,0);
  tcrc     = vector (samples,i,0);
  if (r==0,r=1);
  rinv = 1/r;
  wtaylor=C0;
  for(s=1, samples, x1=-1/(samples)+(s/halfsamples); tcrc[s]=exp(Pi*I*x1); );

  for (t=1,samples, t_est[t] = invslopeh(r*tcrc[t],C0,n); );

  for (s=0,terms-1,
    tot=0;
    for (t=1,samples,
      tot=tot+t_est[t];
      t_est[t]=t_est[t]*conj(tcrc[t]);
    );
    tot=tot/samples;
    if (s>=1, tot=tot*(rinv)^s);
    wtaylor=wtaylor+tot*x^s;
  );
  wtaylor=precision(wtaylor,precis);
  if (imag(C0)==0, wtaylor=real(wtaylor));
  return(wtaylor);
}
prtpoly(wtaylor,t) = {
  local(s,z,iprt);
  if (t==0,t=7);
  z=polcoeff(wtaylor,0);
  if (imag(z)<>0,iprt=1,iprt=0);
  print1 ("{z=   ");
  if (iprt,print1("("));
  if (real(z)<0, print1(z), print1(" " z));
  if (iprt,print(")"),print() );
  for (s=1,t-1,
    z=polcoeff(wtaylor,s);
    if (s>9, print1("+x^" s), print1("+x^ " s));
    if (iprt,print1("*("),print1("*") );
    if (real(z)<0, print1(z), print1(" " z));
    if (iprt,print(")"),print() );
  );
  print("}");
}

plotsetup(low,high,numb,radius,randn) = {
local(n,i,zeros,zeron);
  zp=0;
  if (numb==0,numb=85);
  zeros=vector(numb);zeron=vector(numb);zerov=vector(numb);
  if (low==0,low=1);
  if (high==0, high=14);
  for (n=low,high,
    if (n>7,C=randomperiodn(n,radius,randn),C=periodnzero(n,radius));
    for (i=1,length(C),
      zp++;
      zeros[zp]=C[i];
      zeron[zp]=n;
    );
  );
  ip=0;
  print(zp);
  for (i=1,zp,
    ip++;
    zerov[ip]=truncs(islopetaylor(zeros[i],zeron[i]),7);
    if (imag(zeros[i])<>0,
      ip++;
      zerov[ip]=conj(zerov[ip-1]);
    );
  );
}
evaln(z)={local(y,s,i);
  y=vector(ip*2);
  for (i=1,ip,
    s=subst(zerov[i],x,z);
    y[i*2-1]=real(s);
    y[i*2]=imag(s);
  );
  return(y)
}
maketheplot(w) = local(t,z); { ploth(t=0,2*Pi,z=exp(t*I);evaln(z),1); }

Mandelbrot gráfico mediante la utilización de bombillas/cardioids del período 1..20, más grande que la de 0.004. Yo truncar la serie de Taylor a siete términos, y se representan 215 diferentes bombillas y cardioids; 112 son únicos, si no contar complejos conjugados dos veces. Para el randomperiodn, he utilizado (n,0.004,350). Tomó 350 azar intenta obtener tanto del período(15) sub-bombillas en el período(5) de la bombilla; algunos bulbos aún están desaparecidos. Directamente buscando bulbos cerca de $\frac{k\pi i}{n}$ y otros algoritmos probablemente funcionaría mejor, yo soy muy nuevo en esto. mandelbrot using bulbs/cardiods from 1..20

2voto

Adam Puntos 639

Las soluciones algebraicas se pueden encontrar : John Stephenson : "Fórmulas de ciclos en el conjunto de Mandelbrot", Physica Un 177, 416-420 (1991); "las Fórmulas de los ciclos en el conjunto de Mandelbrot II", Physica a 190, 104-116 (1992); "las Fórmulas de los ciclos en el conjunto de Mandelbrot III", Physica a 190, 117-129 (1992)

Imagen de ejemplo del uso de esta técnica está aquí :

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X