讲解
规则只有一行,结果却有无限的复杂度:边界上处处是新的结构,还到处藏着整体的缩小副本。
01只有一条规则
取一个复数 ,从 开始反复计算
得到一串数 ,叫做 的轨道。如果这串数永远不会跑到无穷远, 就属于曼德博集合。
判断"跑没跑掉"有一条捷径:只要某一步 ,后面就一定越跑越远。所以画图时只需算到 超过 2,或者算满一个步数上限为止。
故事里的第一个点 很特别:三步之后正好回到 0,轨道是一个永远重复的三角形。第二个点 离集合只差一点点,第 33 步才逃出去。
02颜色从哪来
集合里的点涂成黑色。集合外的点都会逃走,只是快慢不同:离集合越近,逃得越慢。颜色就表示"第几步逃走"。
为了让颜色连续过渡、没有一圈圈的台阶,这里用的是平滑逃逸值
其中 是逃出半径 16 时的步数。离边界越近, 越大,颜色越亮。
故事第三段里,步数上限从 1 慢慢加到 220:上限很小时,很多"迟早会逃"的点还没来得及逃,被错算成集合里的点,所以轮廓一开始是一大团,然后一圈圈收紧。
03没有尽头的边界
集合内部是实心的,复杂的是边界。放大任何一段边界,都会出现新的螺旋、触须和花纹,而且放大多少倍都是这样。
- Douady 和 Hubbard 在 1982 年证明:曼德博集合是连通的,看起来散落的小岛其实都由细丝连在一起;
- 宍仓光广在 1998 年证明:它的边界的豪斯多夫维数是 2,一条"线"复杂到和一块面积一样"厚";
- 它的面积约为 1.5066,但精确值至今不知道。
04到处都是自己的副本
故事最后看到的副本,在海马谷深处 ,只有约百万分之一宽,要放大三十多万倍才看得清。它有同样的心形主体、同样的圆盘、同样的边界,但不是简单复制:周围的螺旋和细丝与原图并不相同。主体左边伸出去的"天线"上, 附近还有一个大得多的副本,在"去哪看"里可以直接飞过去。
这样的小副本有无穷多个,散布在边界的各个地方。它们的中心叫作核:从 0 出发,若干步后会精确地回到 0。海马谷里那个副本的核每 78 步回到 0 一次;故事开头那个三步一循环的点,则是一个圆盘的核。
05为什么能放大这么多倍
显卡算得快,但只有 32 位浮点数,大约 7 位有效数字。放大到一万倍左右,相邻像素对应的 就已经分不清了,画面会碎成色块。
这里用的是扰动法:先用 64 位精度在画面中心算一条参考轨道 ,每个像素只计算自己和它的差 :
很小,32 位也能存得很准。当 或者参考轨道用完时,就把当前值当作新的起点,从参考轨道开头重新对齐,避免误差积累。
这样,网页上最多能放大到约十六万亿倍,再往下就到了 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