跳转到内容

分形/复平面迭代/曼德勃罗集外部复势

来自维基教科书,开放世界开放书籍
一致化 曼德勃罗集补集

参数平面上的复势

绿色过程以英国数学家乔治·格林命名


复势是一个复数,所以它有 2 部分

  • 一个实部 = 实势 = 绝对值
  • 一个虚部 = 外角

人们也可以取其

  • 旋度
  • 散度


因此在一张图像上,人们可以使用一个以上的变量来对图像进行着色。[1]


实现


名称

实势 = CPM/M

[编辑 | 编辑源代码]

名称

  • 同名
    • Douady-Hubbard 势[3]
    • Hubbard-Douady 势 [4]
  • 格林函数 = G(c)




在 Fractint 中

potential =  log(modulus)/2^iterations

人们可以使用实势来

  • 平滑(连续)着色[7]
  • 离散着色(势能的等值线)
  • 3D 视图

代码


这是一个 Delphi 函数,它给出了势能的级别

 Function GiveLevelOfPotential(potential:extended):integer;
  var r:extended;
  begin
     r:= log2(abs(potential));
     result:=ceil(r);
  end;
/******************************************************************/
// /fractint/common/calcfrac.c
/*
CALCFRAC.C contains the high level ("engine") code for calculating the
fractal images (well, SOMEBODY had to do it!).
Original author Tim Wegner, but just about ALL the authors have contributed
SOME code to this routine at one time or another, or contributed to one of
the many massive restructurings.
The following modules work very closely with CALCFRAC.C:
  FRACTALS.C    the fractal-specific code for escape-time fractals.
  FRACSUBR.C    assorted subroutines belonging mainly to calcfrac.
  CALCMAND.ASM  fast Mandelbrot/Julia integer implementation
Additional fractal-specific modules are also invoked from CALCFRAC:
  LORENZ.C      engine level and fractal specific code for attractors.
  JB.C          julibrot logic
  PARSER.C      formula fractals
  and more
 -------------------------------------------------------------------- */
/* Continuous potential calculation for Mandelbrot and Julia      */
/* Reference: Science of Fractal Images p. 190.                   */
/* Special thanks to Mark Peterson for his "MtMand" program that  */
/* beautifully approximates plate 25 (same reference) and spurred */
/* on the inclusion of similar capabilities in FRACTINT.          */
/*                                                                */
/* The purpose of this function is to calculate a color value     */
/* for a fractal that varies continuously with the screen pixels  */
/* locations for better rendering in 3D.                          */
/*                                                                */
/* Here "magnitude" is the modulus of the orbit value at          */
/* "iterations". The potparms[] are user-entered paramters        */
/* controlling the level and slope of the continuous potential    */
/* surface. Returns color.  - Tim Wegner 6/25/89                  */
/*                                                                */
/*                     -- Change history --                       */
/*                                                                */
/* 09/12/89   - added floatflag support and fixed float underflow */
/*                                                                */
/******************************************************************/

static int _fastcall potential(double mag, long iterations)
{
   float f_mag,f_tmp,pot;
   double d_tmp;
   int i_pot;
   long l_pot;

   if(iterations < maxit)
   {
      pot = (float)(l_pot = iterations+2);
      if(l_pot <= 0 || mag <= 1.0)
         pot = (float)0.0;
      else /* pot = log(mag) / pow(2.0, (double)pot); */
      {
         if(l_pot < 120 && !floatflag) /* empirically determined limit of fShift */
         {
            f_mag = (float)mag;
            fLog14(f_mag,f_tmp); /* this SHOULD be non-negative */
            fShift(f_tmp,(char)-l_pot,pot);
         }
         else
         {
            d_tmp = log(mag)/(double)pow(2.0,(double)pot);
            if(d_tmp > FLT_MIN) /* prevent float type underflow */
               pot = (float)d_tmp;
            else
               pot = (float)0.0;
         }
      }
      /* following transformation strictly for aesthetic reasons */
      /* meaning of parameters:
            potparam[0] -- zero potential level - highest color -
            potparam[1] -- slope multiplier -- higher is steeper
            potparam[2] -- rqlim value if changeable (bailout for modulus) */

      if(pot > 0.0)
      {
         if(floatflag)
            pot = (float)sqrt((double)pot);
         else
         {
            fSqrt14(pot,f_tmp);
            pot = f_tmp;
         }
         pot = (float)(potparam[0] - pot*potparam[1] - 1.0);
      }
      else
         pot = (float)(potparam[0] - 1.0);
      if(pot < 1.0)
         pot = (float)1.0; /* avoid color 0 */
   }
   else if(inside >= 0)
      pot = inside;
   else /* inside < 0 implies inside=maxit, so use 1st pot param instead */
      pot = (float)potparam[0];

   i_pot = (int)((l_pot = (long)(pot * 256)) >> 8);
   if(i_pot >= colors)
   {
      i_pot = colors - 1;
      l_pot = 255;
   }

   if(pot16bit)
   {
      if (dotmode != 11) /* if putcolor won't be doing it for us */
         writedisk(col+sxoffs,row+syoffs,i_pot);
      writedisk(col+sxoffs,row+sydots+syoffs,(int)l_pot);
   }

   return(i_pot);
}

外部角和外部(参数)射线

[编辑 | 编辑源代码]

示例代码(Mathematica)

Image[Table[If[ColorQ@#,#,Black]&@Hue[(Arg[MandelbrotSetBoettcher[x+I y]]+Pi)/(2Pi)],{y,-2,2,.005},{x,-2,2,.005}]]

共轭角

[编辑 | 编辑源代码]

共轭角

  • 尾流的角


对于曼德勃罗集,考虑周期大于等于 2 的严格周期射线,对中另一条可以利用Henk Bruin 和 Dierk Schleicher 的二次多项式的符号动力学 的算法 13.3 在 O(period^2) 时间内找到。

代码



首先找到最后一次迭代的角度。它很容易计算,并显示一些外部射线作为等值线的边界。

然后人们走得更远。

  • 由 Claude Heiland-Allen 自动计算核和周期的外部角[9]

方法

沃尔夫·容测试
[编辑 | 编辑源代码]
参数平面的部分,其中外部射线 1/7、321685687669320/2251799813685247 和 321685687669322/2251799813685247 落在曼德勃罗集上

角度为(以圈为单位)的外部参数射线

  • 321685687669320/2251799813685247(周期为 51,落在 c1 = -0.088891642419446 +0.650955631292636i 上)
  • 321685687669322/2251799813685247(周期为 51,落在 c2 = -0.090588078906990 +0.655983860334813i 上)
  • 1/7(周期为 3,落在 c3 = -0.125000000000000 +0.649519052838329i 上)

角度相差约 ,但相应参数射线的着陆点相差约 0.035。[16] 它可以使用 Maxima CAS 计算

(%i1) c1: -0.088891642419446  +0.650955631292636*%i;
(%o1) 0.650955631292636*%i−0.088891642419446
(%i2) c2:-0.090588078906990  +0.655983860334813*%i;
(%o2) 0.655983860334813*%i−0.09058807890699
(%i3) abs(c2-c1);
(%o3) .005306692383854863
(%i4) c3: -0.125000000000000  +0.649519052838329*%i$
(%i5) abs(c3-c1);
(%o5) .03613692356607755
(%i6) a3:1/7$
(%i7) float(abs(a3-a1));
(%o7) 4.440892098500628*10^−16

来自 W Jung 程序的信息

The angle  1/7  or  p001 has  preperiod = 0  and  period = 3.
The conjugate angle is  2/7  or  p010 .
The kneading sequence is  AA*  and the internal address is  1-3 .
The corresponding parameter rays are landing at the root of a satellite component of period 3.
It is bifurcating from period 1.
The angle  321685687669320/2251799813685247  or  p001001001001001001001001001001001001001001001001000 has  preperiod = 0  and  period = 51.
The conjugate angle is  321685687669319/2251799813685247  or  p001001001001001001001001001001001001001001001000111 .
The kneading sequence is  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB*  and the internal address is  1-49-50-51 .
The corresponding parameter rays are landing at the root of a primitive component of period 51.
The angle  321685687669322/2251799813685247  or  p001001001001001001001001001001001001001001001001010 has  preperiod = 0  and  period = 51.
The conjugate angle is  321685687669329/2251799813685247  or  p001001001001001001001001001001001001001001001010001 .
The kneading sequence is  AABAABAABAABAABAABAABAABAABAABAABAABAABAABAABAABAA*  and the internal address is  1-3-51 .
The corresponding parameter rays are landing at the root of a satellite component of period 51.
It is bifurcating from period 3.
G. Pastor 和 Miguel Romera 的测试
[编辑 | 编辑源代码]

角度为(以圈为单位)的外部参数射线

  • 6871947673/34359738367(周期 35)
  • 9162596898/34359738367(周期 35)

位于 -0.153756141 + 1.030383223i 的花椰菜中心婴儿曼德布罗集

(不是 34359738367 = 2^35 - 1)

M. Romera、1 G. Pastor、A. B. Orue、1 A. Martin、M.-F. Danca 和 F. Montoya 的测试
[编辑 | 编辑源代码]
参数平面的一部分,其中 5 条外部射线落在曼德布罗集上。png

G Pastor 给出了一个外部射线的例子,对于这个例子,IEEE 754 的精度不够:[17]

  • (周期 3,落在周期 3 分量 c3 = -0.125000000000000 +0.649519052838329i 的根点上)

可以使用 Claude Heiland-Allen 编写的程序 分析这些角度。

./bin/mandelbrot_describe_external_angle ".(001)"
binary: .(001)
decimal: 1/7
preperiod: 0
period: 3

 
./bin/mandelbrot_describe_external_angle 
".(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010)"
binary: 
.(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010)
decimal: 
33877456965431938318210482471113262183356704085033125021829876006886584214655562/237142198758023568227473377297792835283496928595231875152809132048206089502588927
preperiod: 0
period: 267

./bin/mandelbrot_describe_external_angle 
".(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010001)"
binary: 
.(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010001)
decimal: 
33877456965431938318210482471113262183356704085033125021829876006886584214655569/237142198758023568227473377297792835283496928595231875152809132048206089502588927
preperiod: 0
period: 267

./bin/mandelbrot_describe_external_angle 
".(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010001)"
binary: 
.(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010001)
decimal: 
67754913930863876636420964942226524366713408170066250043659752013773168429311121/474284397516047136454946754595585670566993857190463750305618264096412179005177855
preperiod: 0
period: 268

 
./bin/mandelbrot_describe_external_angle 
".(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010)"
binary: 
.(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010)
decimal: 
67754913930863876636420964942226524366713408170066250043659752013773168429311122/474284397516047136454946754595585670566993857190463750305618264096412179005177855
preperiod: 0
period: 268

上面射线的着陆点是具有角度内部地址的根(Claude Heiland-Allen 的描述)。

  • 上面的那个将是 1 -> 1/3 -> 3 -> 1/(周期/3) -> 周期,因为它是最靠近 1/3 球根的下方尖点的球根,并且 1/3 球根的子球根具有周期 3 * 分母(内部角度),即 1 -> 1/3 -> 3 -> 1/89 -> 267
  • 下面的那个将是 1 -> floor(周期/3)/周期 -> 周期,因为它是最靠近 1/3 尖点下方的球根,即 1 -> 89/268 -> 268
  • 中间射线 .(001) 落在 1 -> 1/3 -> 3 的根点上,来自下方尖点(在标准未旋转视图中位于右侧)

参考文献

[编辑 | 编辑源代码]
  1. John J. G. Savard 的曼德布罗函数
  2. Wolfram 参考资料:MandelbrotSetBoettcher
  3. Linas Vepstas 的 Douady Hubbard 势
  4. i quilezles : 距离分形
  5. Douglas C. Ravenel 教授的第 10 课
  6. 用于绘制曼德布罗集和朱利亚集的距离估计方法 Lindsay Robert Wilson 博士
  7. Tony Finch 的平滑着色是曼德布罗集的关键
  8. fractalforums.org : 曼德布罗外部角度
  9. 由 Claude Heiland-Allen 自动计算外部角
  10. 绘制曼德勃罗集外部射线的算法,作者:川平知树
  11. 沃尔夫·容解释
  12. 作者:Claude Heiland-Allenmandelbrot_set_newton_basins
  13. 解决绘制曼德勃罗集外部射线限制的一种方法,作者:M. Romera,1 G. Pastor, A. B. Orue,1 A. Martin, M.-F. Danca 和 F. Montoya
  14. 分形论坛 : 迭代期间绘制场线...
  15. 分形论坛 : 曼德勃罗集的平滑外部角
  16. 沃尔夫·容关于绘制参数射线精度的测试
  17. 解决绘制曼德勃罗集外部射线限制的一种方法,作者:M. Romera,1 G. Pastor, A. B. Orue,1 A. Martin, M.-F. Danca 和 F. Montoya
华夏公益教科书