跳转到内容

分形/复平面中的迭代/pcheckerboard

来自 Wikibooks,开放世界中的开放书籍

如何展示抛物线盆地内的动力学 ?


参数 c 是一个抛物点

吸引子(极限集,吸引循环/不动点)

  • 属于 Julia 集(不像其他情况)
  • 是弱吸引的(懒惰动力学)


星形 = 具有 5 个不同颜色臂的抛物临界轨道

颜色取决于

  • 数值逼近的 Fatou 坐标的虚部的符号(数值解释)
  • 的位置 在...下 关系到临界轨道星的一个臂:上方或下方(几何解释)


吸引(临界轨道)和排斥轴(外部射线落在抛物线不动点上)将不动点附近的邻域划分为扇区

算法名称

[编辑 | 编辑源代码]

首先选择

  • 选择目标集,它是一个圆,具有 
    • 中心位于抛物线 不动点
    • 半径非常小,以至于分量之间的外部宽度小于 像素宽度
  • 目标集由 p 个分量(扇区)的片段组成。将目标集的每个部分划分为 2 个子扇区(高于和低于 临界轨道)= 二进制分解

步骤

  • = 轨道的初始点(像素)
  • 进行正向迭代
    • 如果点逃逸 = 外部
    • 如果点没有逃逸,那么检查点是否靠近不动点(在目标集中)
      • 如果不是,则进行一些额外的迭代
      • 如果是,则检查它在目标集的哪一半(二进制分解)

如何找到陷阱 ?

[编辑 | 编辑源代码]

抛物线盆地的步骤

  • 选择包含临界点的分量
  • 选择陷阱
  • 将陷阱磁盘分解为二进制分解 = 划分为两部分 :高于和低于临界轨道


陷阱特征

  • 在包含临界点的分量内
  • 陷阱在其边界上有一个抛物点
  • 陷阱的中心是临界轨道最后一个点和不动点之间的中点
  • 陷阱的半径是不动点和临界轨道最后一个点之间的距离的一半



目标集

  • 对于复二次多项式的情况,周期为 1 和 2 :圆形
  • 对于周期 >2:围绕不动点的圆的曲线扇区,2 个三角形由 



注意,分量的陷阱大于BDM 的两个陷阱

  • 分量陷阱 :三角形
  • BDM 陷阱 :三角形

其中

  • z1、z2 是边界分量(通常是最大的,包含临界点)的外部射线的最后一个点
  • 是临界点,或者如果临界轨道臂不是直线,则是它的正向图像
  • 是抛物线不动点

由于懒惰动力学,计算在临界轨道和外部射线落在抛物线不动点之前停止。剩余的间隙用从最后一点到着陆点的直线填充(近似)。

如何计算临界点的原像?

[edit | edit source]

这里 a 和 b 是 2 个逆(或反向)迭代(参数调整后的多值),在 Wolf Jung 的 Mandel 程序 中使用

  • 第 1 个逆函数 = 键 a =
  • 第 2 个逆函数 = 键 b =
   "Use the keys a and b for the inverse mapping. (The two branches are approximately mapping to the parts A and B of the itinerary.)


 
/* *****************************************************************************************
 *************************** inverse function of f(z) = z^2 + c ****************************
 *******************************************************************************************
*/

 /*f^{-1}(z) =  inverse with argument adjusted
    "When you write the real and imaginary parts in the formulas as complex numbers again,
       you see that it is sqrt( -c / |c|^2 )  *  sqrt( |c|^2 - conj(c)*z ) ,
     so this is just sqrt( z - c )  except for the overall sign:
    the standard square-root takes values in the right halfplane,  but this is rotated by the squareroot of -c .
    The new line between the two planes has half the argument of -c .
    (It is not orthogonal to c ...  )" 
    ...
    "the argument adjusting in the inverse branch has nothing to do with computing external arguments.  It is related to itineraries and kneading sequences,  ...
    Kneading sequences are explained in demo 4 or 5, in my slides on the stripping algorithm, and in several papers by Bruin and Schleicher.
 
    W Jung " */
complex double fa(const complex double z0){

	double t = cabs(c);
  	t = t*t;
  	complex double z =  csqrt(-c/t)*csqrt(t-z0*conj(c)); 
  	return - z;


}

complex double fb(const complex double z0){

	double t = cabs(c);
  	t = t*t;
  	complex double z =  csqrt(-c/t)*csqrt(t-z0*conj(c)); 
  	return  z;


}


complex double give_preimage_a(complex double z0){

	int i;
	int iMax = child_period;
	complex double z = z0;
	
	
	
	for (i = 0; i < iMax; ++i){
		z = fa(z); }
	return z;

}


complex double give_preimage_b(complex double z0){

	int i;
	int iMax = child_period;
	complex double z = z0;
	
	
	
	
	for (i = 0; i < iMax-1; ++i){
		z = fa(z); }
	z = fb(z);
	return z;

}


int Draw_preimages(complex double z0, unsigned char iColor, unsigned char A[]){

	complex double z = z0;
	int i;
	int iMax = 100;
	
	
	for (i = 0; i < iMax; ++i){
		z = give_preimage_a(z);
 		dDrawPoint(z, iColor, A);
 		}
 		
 	z = z0;	
 	
 	z = give_preimage_b(z);
 	dDrawPoint(z, iColor, A);
 	for (i = 0; i < iMax - 1; ++i){
		z = give_preimage_a(z);
 		dDrawPoint(z, iColor, A);
 		}
 	
	
	return 0;
}

字典

[edit | edit source]
  • 棋盘是将 A 分解为图形和方格的名称
  • 棋盘图
  • 棋盘方格:“A 中的补集的连通分量被称为棋盘方格(在一个真正的棋盘中它们被称为方格,但这里它们有无限多个角,而不仅仅是四个)。" [1]
  • 两个主要的棋盘方格
  • 陷阱 = 目标集 = 吸引花瓣

使用棋盘图可视化结构

  "An often used and very useful technique of visualization of ramified covers (and partial cover structures that are not too messy) consists in cutting the range in domains, often simply connected, along lines joining singular values, and taking the pre-image of these pieces, which gives a new set of pieces. The way they connect together and the way they map to the range give information about the structure." Arnaud Chéritat Near Parabolic Renormalization for Unicritical Holomorphic Maps by Arnaud Chéritat
f(z) = z^2 +0.25 上部主要棋盘方格内的抛物线轨道

描述

[edit | edit source]

"一个可视化扩展 Fatou 坐标的好方法是使用抛物线图和棋盘。" [2]

根据以下内容对点进行颜色编码:[3]

  • Fatou 坐标的整数部分
  • 虚部的符号

棋盘的角点(四个瓷砖交汇的地方)是临界点 [4]

或者

The parabolic chessboard for the polynomial  z + z^2  normalizing  
* each yellow tile biholomorphically maps to the upper half plane
* each blue tile biholomorphically maps to the lower half plane under 
* The pre-critical points of  or equivalently the critical points of  are located where four tiles meet"[5]

图片

[edit | edit source]

点击图片在 Commons 上查看代码和描述!




在逃逸路线 0 上的演化

  • 以周期 1 的分量核(c = 0)开始
  • 沿内部射线移动,角度 = 0
  • 抛物线点(c = 1/4)
  • 在角度为 0 的外部射线上





示例

  • 瓷砖:T Kawahira 填充 Julia 集内部的镶嵌 [6]
  • A Cheritat 的彩色花椰菜 [7]

代码

[edit | edit source]

对于内部角 0/1 和 1/2,临界轨道位于实数线上 (Im(z) = 0)。计算抛物线棋盘很容易,因为只需检查 z 的虚部。 对于其他情况,就不那么容易了

目标集是如何沿着内部射线 0 变化的

Wolf Jung 的 Cpp 代码,请参阅来自文件 mndlbrot.cpp(Mandel 程序)的抛物线函数 [8][9]

要查看效果

  • 运行 Mandel
  • (在参数平面上)找到角度为 0 的抛物线点,即 c=0.25。使用键 c 在窗口输入 0 并回车。

C 代码

  // in function uint mndlbrot::esctime(double x, double y)
  if (b == 0.0 && !drawmode && sign < 0
      && (a == 0.25 || a == -0.75)) return parabolic(x, y);
 // uint mndlbrot::parabolic(double x, double y)
 if (Zx>=0 && Zx <= 0.5 && (Zy > 0 ? Zy : -Zy)<= 0.5 - Zx) 
            { if (Zy>0) data[i]=200; // show petal
                     else data[i]=150;}

Gnuplot 代码

reset
f(x,y)=  x>=0 && x<=0.5 &&  (y > 0 ? y : -y) <= 0.5 - x
unset colorbox
set isosample 300, 300
set xlabel 'x'
set ylabel 'y'
set sample 300
set pm3d map
splot [-2:2] [-2:2] f(x,y)

1/2 或肥胖的巴西利卡

[edit | edit source]

Wolf Jung 的 Cpp 代码,请参阅来自文件 mndlbrot.cpp(Mandel 程序)的抛物线函数 [10] 要查看效果

  • 运行 Mandel
  • (在参数平面上)找到角度为 1/2 的抛物线点,即 c=-0.75。使用键 c 在窗口输入 0 并回车。

C 代码

  // in function uint mndlbrot::esctime(double x, double y)
  if (b == 0.0 && !drawmode && sign < 0
      && (a == 0.25 || a == -0.75)) return parabolic(x, y);
 // uint mndlbrot::parabolic(double x, double y)
  if (A < 0 && x >= -0.5 && x <= 0 && (y > 0 ? y : -y) <= 0.3 + 0.6*x)
      {  if (j & 1) return (y > 0 ? 65282u : 65290u);
         else return (y > 0 ? 65281u : 65289u);
      }



Numerical approximation of Julia set for fc(z)= z^2 + c 
child_period  = 3 
internal argument in turns = 1 / 3
parameter c = -0.1250000000000000 +0.6495190528383290*I 
fixed point alfa z = a = -0.2500000000000000 +0.4330127018922194*I 
external angles of rays landing on the fixed point  : t = 1/7 	t = 2/7 	t = 4/7
critical point z = zcr = 0.0000000000000000 +0.0000000000000000*I 
precritical point z = z_precritical = -0.2299551351162811 -0.1413579816050052*I  
external argument in turns of first ray landing on fixed point = 1 / 7

Julia set for fc(z)= z^2 + c 
internal argument in turns = 1/4
parameter c = 0.2500000000000000 +0.5000000000000000*I 
fixed point alfa z = a = 0.0000000000000000 +0.5000000000000000*I 
critical point z = zcr = 0.0000000000000000 +0.0000000000000000*I 
precritical point z = z_precritical = -0.2288905993372869 -0.0151096456992677*I  
external angles of rays landing on fixed point: 1/15, 2/15, 4/15, 8/15 ( in turns)
Numerical approximation of Julia set for fc(z)= z^2 + c 
parameter c = ( -0.6900598700150440 ; 0.2760264827846140 ) 
fixed point alfa z = a = ( -0.4797464868072486 ; 0.1408662784207147 ) 
external angle of ray landing on fixed point: 341/2047

另请参阅

[编辑 | 编辑源代码]

参考文献

[编辑 | 编辑源代码]
  1. Arnaud Cheritat 的单奇异全纯映射的近抛物重整化
  2. Arnaud Cheritat 关于 Inou 和 Shishikura 的近抛物重整化
  3. Mitsuhiro Shishikura 的近抛物重整化的应用
  4. Robert L. Devaney 的复杂动力系统,第
  5. Sabyasachi Mukherjee 的反全纯动力学:参数空间的拓扑和拉直的不连续性
  6. T Kawahira 的瓷砖
  7. A Cheritat 的棋盘
  8. commons:Category:用 Mandel 创建的分形
  9. Wolf Jung 的 Mandel 程序
  10. Wolf Jung 的 Mandel 程序
  11. Oleg Ivrii(特拉维夫大学),“树的形状”
华夏公益教科书