CurvG
登录

第 2 个 · 复数 · 分形

一条 z² + c,为什么能长出无穷无尽的细节?

在平面上每个点反复算 z → z² + c,看它跑不跑得掉。把跑不掉的点涂黑,就得到曼德博集合:边界上永远有新的螺旋,还藏着缩小的自己。拖动、放大,亲手去找。

为什么?

讲解

规则只有一行,结果却有无限的复杂度:边界上处处是新的结构,还到处藏着整体的缩小副本。

01只有一条规则

取一个复数 cc,从 z0=0z_0=0 开始反复计算

zn+1=zn2+cz_{n+1}=z_n^2+c

得到一串数 0, c, c2+c, …0,\ c,\ c^2+c,\ \dots,叫做 cc 的轨道。如果这串数永远不会跑到无穷远,cc 就属于曼德博集合。

判断"跑没跑掉"有一条捷径:只要某一步 ∣zn∣>2|z_n|>2,后面就一定越跑越远。所以画图时只需算到 ∣z∣|z| 超过 2,或者算满一个步数上限为止。

故事里的第一个点 c≈−0.1226+0.7449ic\approx-0.1226+0.7449i 很特别:三步之后正好回到 0,轨道是一个永远重复的三角形。第二个点 c=−0.75+0.1ic=-0.75+0.1i 离集合只差一点点,第 33 步才逃出去。

02颜色从哪来

集合里的点涂成黑色。集合外的点都会逃走,只是快慢不同:离集合越近,逃得越慢。颜色就表示"第几步逃走"。

为了让颜色连续过渡、没有一圈圈的台阶,这里用的是平滑逃逸值

μ=n+1−log⁡2log⁡∣zn∣\mu=n+1-\log_2\log|z_n|

其中 nn 是逃出半径 16 时的步数。离边界越近,μ\mu 越大,颜色越亮。

故事第三段里,步数上限从 1 慢慢加到 220:上限很小时,很多"迟早会逃"的点还没来得及逃,被错算成集合里的点,所以轮廓一开始是一大团,然后一圈圈收紧。

03没有尽头的边界

集合内部是实心的,复杂的是边界。放大任何一段边界,都会出现新的螺旋、触须和花纹,而且放大多少倍都是这样。

  • Douady 和 Hubbard 在 1982 年证明:曼德博集合是连通的,看起来散落的小岛其实都由细丝连在一起;
  • 宍仓光广在 1998 年证明:它的边界的豪斯多夫维数是 2,一条"线"复杂到和一块面积一样"厚";
  • 它的面积约为 1.5066,但精确值至今不知道。

04到处都是自己的副本

故事最后看到的副本,在海马谷深处 c≈−0.7436442+0.1318254ic\approx-0.7436442+0.1318254i,只有约百万分之一宽,要放大三十多万倍才看得清。它有同样的心形主体、同样的圆盘、同样的边界,但不是简单复制:周围的螺旋和细丝与原图并不相同。主体左边伸出去的"天线"上,c≈−1.7549c\approx-1.7549 附近还有一个大得多的副本,在"去哪看"里可以直接飞过去。

这样的小副本有无穷多个,散布在边界的各个地方。它们的中心叫作核:从 0 出发,若干步后会精确地回到 0。海马谷里那个副本的核每 78 步回到 0 一次;故事开头那个三步一循环的点,则是一个圆盘的核。

05为什么能放大这么多倍

显卡算得快,但只有 32 位浮点数,大约 7 位有效数字。放大到一万倍左右,相邻像素对应的 cc 就已经分不清了,画面会碎成色块。

这里用的是扰动法:先用 64 位精度在画面中心算一条参考轨道 ZnZ_n,每个像素只计算自己和它的差 δn\delta_n:

δn+1=(2Zn+δn) δn+δc\delta_{n+1}=(2Z_n+\delta_n)\,\delta_n+\delta c

δ\delta 很小,32 位也能存得很准。当 ∣Zn+δn∣<∣δn∣|Z_n+\delta_n|<|\delta_n| 或者参考轨道用完时,就把当前值当作新的起点,从参考轨道开头重新对齐,避免误差积累。

这样,网页上最多能放大到约十六万亿倍,再往下就到了 64 位精度的极限。

常见问题

为什么判断标准是半径 2?

如果 $|z|>2$ 且 $|z|\ge|c|$,那么 $|z^2+c|\ge|z|^2-|c|\ge|z|(|z|-1)>|z|$,而且每一步放大的倍数越来越大,所以一定会跑到无穷远。集合本身也完全落在半径 2 的圆里。

能一直放大下去吗?

数学上可以,边界在任何倍数下都有新结构。这个页面受 64 位浮点精度限制,最多放大约十六万亿倍;更深的放大要用任意精度的参考轨道。

它和朱利亚集有什么关系?

固定 $c$、让起点 $z_0$ 变化,得到的是朱利亚集。$c$ 在曼德博集合里,当且仅当对应的朱利亚集是连成一片的。所以曼德博集合可以看作所有朱利亚集的"目录"。

黑色区域里的点在做什么?

它们的轨道永远困在一个范围内。主体心形里的点最终会稳定到一个固定点;挂在旁边的圆盘里,轨道会在 2 个、3 个……位置之间循环,故事里那个三角形轨道就是例子。

课本里的这部分

相关曲线

资料: Mandelbrot set — Wikipedia · Plotting algorithms for the Mandelbrot set — Wikipedia