FractalPark
经典入门

曼德布罗特集

二次映射 z² + c 的参数地图:选定一个点,从零出发,轨道会给出答案。

在探索器中打开
暖金色背景上的黑色曼德布罗特集,边界泛着细窄的蓝白光带
曼德布罗特集全景:心形主区域、相连圆瓣,以及逃逸时间颜色勾出的分枝边界。

概览

曼德布罗特集不是一条方程画出的轨迹,而是一整族方程的地图。在复平面上选一个 c,从 z = 0 起步;把当前值平方,再加回同一个 c,如此反复。轨道就是这一串数。有些始终待在有限范围,有些直奔无穷。前者对应的 c 合起来,就是这个集合。

它也是二次 Julia 集的索引图。固定一个 c,便得到一个 Julia 集;它是否连成一体,恰好由 c 是否落在曼德布罗特集中决定。在参数平面上挪动几步,稳定循环就可能变成突然逃逸。

常见图像里,集合本身是黑色的。外围颜色不是集合的延伸,只记下轨道多快越过逃逸阈值。计算因而像有了等高线。

数学原理

给一个参数一次机会

z(n+1) = z(n)^2 + c, with z(0) = 0

选定一个复数 c,之后不再改它。轨道从 z₀ = 0 出发;每个新值都是前一个值平方后再加 c。

拿两个点试试。当 c = 0 时,轨道永远停在 0,0 因而属于曼德布罗特集。当 c = 1 时,轨道依次得到 0、1、2、5、26……并逃向无穷,1 就不属于集合。对这个二次映射,一旦 |z| 超过 2,轨道便回不来了。渲染器据此判定逃逸,实际计算则在设定的迭代次数处停下。

历史

曼德布罗特集的故事要从更早的复函数迭代理论说起。1917 至 1918 年前后,Pierre Fatou 与 Gaston Julia 奠定了这一领域的基础,那时距离计算机画出精细参数图还有几十年。Fatou 是法国数学家和巴黎天文台的天文学家;Julia 在 1918 年发表的有理函数迭代长篇论文,成为这个领域早期的代表作。

它没有一个毫无争议的“发现时刻”。Robert W. Brooks 与 J. Peter Matelski 在研究克莱因群时,于 1978 年的石溪会议论文中发表了一幅如今被视为同一参数集合的早期图像。他们关心的是另一个问题,粗糙的图像也还没有获得后来那套解释。

在 IBM 托马斯·J·沃森研究中心工作的 Benoit B. Mandelbrot 随后利用计算机图形研究相关的二次参数空间,并于 1980 年发表论文。他把这些图像放进更广阔的分形几何视野中,让人们开始把这个对象本身当作值得研究的主题。Mandelbrot 出生于华沙,在法国接受教育,在 IBM 工作了 35 年,晚年任教于耶鲁大学。

20 世纪 80 年代初,Adrien Douady 与 John H. Hubbard 建立了这套集合的现代数学理论,其中包括它是连通集的证明;“曼德布罗特集”这一名称也在他们的工作中固定下来。Douady 是法国复动力系统领域的重要数学家,2006 年去世;Hubbard 的康奈尔大学教师主页仍可访问,其中介绍了他对迭代系统和计算机辅助数学探索的兴趣。

视觉特征

拉远看,先是心形主区域,随后是一圈圆瓣。最大的圆瓣对应稳定的二周期,更小的圆瓣聚着其他重复周期。沿边缘走,平滑弧线会散成天线、螺旋、分枝细丝,还有微小的曼德布罗特副本。

看不尽的是边界。每次放大都有新结构,却不是机械复印;局部动力学会把重复拉伸、扭弯。大片黑色内部相对安静,细密边缘上,一个极小的参数变化就能把轨道带往别处。

再创作与示例

从 canonical Document 开始

打开本指南使用的同一份已审定公式状态,再在交互式探索器中调整视图、着色、变换或动画。

常见问题

一个点凭什么算在集合里?

从零出发的轨道反复迭代后仍有界,参数 c 就在集合里。计算时,|z| 一旦超过 2,逃逸已成定局。到达迭代上限还没逃的点会被画进集合;但贴着边界的点,常常得多算很久才好下结论。

Julia 集和它怎么连上?

画 Julia 集时,c 固定,图上的每个点换一个初值 z₀;画曼德布罗特集时,初值固定为零,变化的是 c。对 z² + c 这一族映射,两者严格相连:对应 Julia 集连通,当且仅当 c 位于曼德布罗特集中。

参考资料

源码导读

  1. frm-v1:e4d2259a5dd3fe7b3af646514a4313e83efcc80e887e04c07b7469bb27a66b90:init/0

    在 mandelbrot,此节点执行 if ismand: z = 0; 否则 z = pixel。

  2. frm-v1:e4d2259a5dd3fe7b3af646514a4313e83efcc80e887e04c07b7469bb27a66b90:loop/0

    在 mandelbrot,此节点执行 if power == 2: z = z * z + c; 否则 z = z ^ power + c。

  3. frm-v1:e4d2259a5dd3fe7b3af646514a4313e83efcc80e887e04c07b7469bb27a66b90:bailout

    在 mandelbrot,此节点执行 |z| <= 256。

语法特征

state-flow

状态流具体为:若 ismand, z = 0; 否则 z = pixel, 随后 power 分支更新 z。

stopping-test

停止测试只判断 |z| <= 256,不会给状态变量赋值。

参数实验

power

步骤

  1. 先按固定配置 运行 mandelbrot 并记录结果。
  2. 只改变 power,其余 运行时槽位和配置项保持固定后再次运行,并记录是否有差异。

观察要点

记录 if power == 2, z = z * z + c; 否则 z = z ^ power + c 相比基线是否改变可见结果或 |z| <= 256 的停止判断;源定义不保证差异。

练习

追踪 mandelbrot 的标注,并说明 if power == 2, z = z * z + c; 否则 z = z ^ power + c 在每个相关操作中如何执行。

完成检查

答案准确解释全部 3 个标注,指出 if power == 2, z = z * z + c; 否则 z = z ^ power + c,并将 |z| <= 256 识别为停止测试而非状态赋值。

提示

状态流按顺序执行 若 ismand: z = 0; 否则 z = pixel → 若 power == 2: z = z * z + c; 否则 z = z ^ power + c,其结果供下一步使用。

来源与权利

来源:固定的运行时定义与发布决定。

权利信息见英文事实单元的固定决定。

公式档案

mandelbrot

该 FractalPark 规范实现已发布并可运行。

mandelbrot 的确定性预览

规范源码

语言
frm-like/1
标准库
1
Profile 模式
parameter-plane
Profile 中心
-0.5, 0
Profile 缩放
0.4
Profile 迭代次数
96
Profile 证据等级
mechanical

参数

  • power: real

规范源码

这是经过验证的只读规范版本。Remix 会创建一份独立的可编辑分支。

正在加载规范源码…

来源与当前实现

公式 ID
00e14aa8-b766-54ea-a359-3f5d20d329b7
规范名称
mandelbrot
原始名称
mandelbrot
历史来源
FractalPark
当前实现
项目自有

这是 FractalPark 项目自有实现。所链接文件是固定版本的规范 Definition。

对权利或署名有异议?

请附上公式 ID 和支持证据。维护者可在复核期间暂缓或撤下该实现。 contact@fractalpark.com