跳转到内容

Julia 集和 Mandelbrot 集的图片/Julia 集和 Fatou 域

来自维基教科书,开放世界中的开放书籍

是从复平面 到自身的可微映射。我们首先假设 作为复函数是可微的,也就是说, 是一个全纯函数,因此可以像我们想的那样多次微分。此外,我们假设 是有理的,也就是说,,其中 都是复多项式。如果 的次数分别为 m 和 n,我们称 *d = m - n* 为 的次数。

Julia 集的理论从这个问题开始:当我们迭代一个点 *z* 时会发生什么,也就是说,当我们形成序列 (*k = 0, 1, 2, ...*)时会发生什么,其中

三种可能性

[编辑 | 编辑源代码]

每个迭代序列都属于以下三类之一


1: 该序列 *收敛* 到一个有限的点循环,并且 *z* 附近所有点在足够小的邻域内都收敛到同一个循环。
2: 该序列 *进入* 一个有限的循环(有限的)多边形形状或(无限的)环形形状旋转运动,并且 *z* 附近的所有点在足够小的邻域内都进行类似的但同心运动。
3: 该序列 *进入* 一个有限的循环,但 *z* 具有这种性质是孤立的,*或者*:对于 *z* 附近所有点 *w*,*z* 和 *w* 的迭代之间的距离大于 *z* 和 *w* 之间的距离。


在第一种情况下,循环是 *吸引* 的,在第二种情况下,循环是 *中性* 的(在这种情况下,存在一个 *中心* 的有限循环),在第三种情况下,迭代序列是 *排斥* 的。

五个 Fatou 域
一个 Fatou 域

点 *z* 的集合,其迭代序列收敛到同一个吸引循环或进入同一个中性循环,是一个开集,称为 的 *Fatou 域*。这些域的并集的补集(满足条件 3 的点)是一个闭集,称为 的 *Julia 集*。

Julia 集总是非空且不可数的,并且它是*无限薄*的(没有内点)。它不受 的影响,并且这里的迭代序列表现出混沌现象(除了可数的有限序列点)。Julia 集可以是一条简单的曲线,但通常是一个分形。

关于复有理函数迭代的均值定理如下:

每个 Fatou 域都有相同的边界。

因此,共同边界就是 Julia 集。这意味着 Julia 集的*每个*点都是每个 Fatou 域的*累积点*。

如果存在两个以上的 Fatou 域,我们可以推断 Julia 集一定是一个分形,因为 Julia 集的*每个*点都有来自两个以上不同开集的点无限靠近,但这是“不可能的”,因为平面只有二维。

因此,如果我们以特定方式构建 ,我们可以确定 Julia 集是一个分形。这是求解方程 的牛顿迭代的情况。这里 ,并且可以通过迭代找到的解属于不同的 Fatou 域(由迭代到该解的点组成)。第一张图显示了求解 的牛顿迭代的 Julia 集。但 Julia 集也可以因其他原因成为分形,下一张图显示了形式为 的迭代的 Julia 集,这里只有一个 Fatou 域。

临界点

[edit | edit source]

首先,我们必须找到所有 Fatou 域。由于 Fatou 域可以通过知道其中的一个点来确定,所以我们必须找到一个点集,使得每个 Fatou 域都包含这些点中的至少一个。这很容易做到,因为

每个 Fatou 域都包含 的至少一个临界点。

的*临界点*是指满足 的(有限)点*z*,或者如果 的次数*d* 至少为 2,或者如果 对于某个*c* 和满足此条件的有理函数 则*z* = ∞。

由于我们已经预设 f(z) 是有理函数,这意味着 Fatou 域的数量是有限的。

我们可以通过牛顿迭代找到 的解:如果*z*是解,则通过 对*z*附近的点进行迭代。我们可以对平面中大量规则分布的点应用牛顿迭代,并记录不同的临界点(如果起始点属于迭代的 Julia 集,它不一定导致解,同样,我们也不能完全确定我们会捕获所有临界点,但对于我们的任务,我们应该不在乎这一点)。

这里我们只处理吸引的 Fatou 域:中性域无法以自然的方式着色,除非 特别选定,在实践中 Fatou 域不可能是中性的。

我们可以用以下方法找到不同的吸引 Fatou 域:我们对每个临界点进行大量迭代(或者如果迭代点在数值上大于给定的大数,则停止迭代),使得迭代点 z* 非常接近其终点,该终点可能是一个包含 ∞ 的循环,并且我们继续迭代直到该点再次非常接近 z*。用于此的迭代次数 r(z*) 是循环的阶数。此后,我们通过删除属于以前注册循环的点 z* 来注册不同的循环。这组点对应于 Fatou 域的集合。

一个 Fatou 域可以包含几个临界点,从 Fatou 域中的临界点数量,我们可以说一些关于 Julia 集的连通性:Fatou 域中的临界点越少,Julia 集就越连通。

循环的吸引力

[edit | edit source]

为了以自然和平滑的方式对 Fatou 域进行着色,除了循环的阶数外,我们还必须知道它的吸引力 - 一个大于 1 的实数

对于指向阶数为 r 的吸引循环的迭代,我们有,如果 z* 是循环中的一个点,那么r 次复合),吸引力是数字 。注意 = 循环的 r 个点的 的乘积。如果 w 是一个非常接近 z* 的点,而 w 迭代 r 次,我们有 limw→z*.

然而,这个数字 可以是 ∞,即如果循环包含一个临界点(意味着临界点在 *r* 次迭代后迭代到自身),在这种情况下,法图域(和循环)被称为 *超吸引*。我们现在设置 limw→z* 或者 limw→∞ 如果 *z* = ∞。

在最后一种情况下,即 ∞ 是一个临界点并且 *属于* 循环,我们有 *|d|* > 1 并且 。在这种情况下,我们假设 ∞ 是一个不动点 (*r* = 1),因此 *d* ≥ 2 并且 (因此我们忽略了像 这样的函数,其中吸引循环是 {*c*, ∞})。

在使用牛顿迭代法求解方程 (因此 )的情况下,法图域(包含解)是超吸引的,并且 (如果解不是重根)。

给法图域着色

[编辑 | 编辑源代码]

我们的着色方法基于 *实际迭代次数*,它与法图域的 *势函数* 相关联。在这三种情况下,势函数由下式给出

limk→∞ (非超吸引)
limk→∞ (超吸引)
limk→∞ (d ≥ 2 且 z* = ∞)

实际迭代次数取决于对一个非常小的数的选择 (对于趋向有限循环的迭代)和一个非常大的数 N(例如 10100,对于趋向 ∞ 的迭代),以及由 z 生成的序列,当满足以下条件时停止: 对于其中一个点 z*(对应于 Fatou 域)或 或者 当达到一个选定的最大迭代次数 M 时(这意味着我们已经命中了 Julia 集,尽管这不太可能)。

如果循环不是不动点,我们必须将迭代次数 k 除以循环的阶数 r,并取该数的整数部分。

颜色搭配的巧妙

如果我们计算 对于停止迭代的 k,并将 分别用 或 N 替换,我们必须将迭代次数 k 替换为一个实数,这就是实际迭代次数。它可以通过从 k 中减去一个在 [0, 1[ 区间内的数来找到,在三种情况下,它由以下公式给出:

 (非超吸引)
 (超吸引)
 (d ≥ 2 且 z* = ∞)

为了进行着色,我们必须选择循环颜色尺度:无论是图片还是数学或手动构造的尺度,通过选择一些颜色并以连续的方式连接它们。如果尺度包含 H 种颜色(例如 600),我们将颜色从 0 到 H-1 编号。然后,我们将实际迭代次数乘以一个决定图片中颜色密度的数,并取该积对 H 的模的整数部分。密度实际上是着色中最重要的因素,如果它选择得当,我们可以得到很好的颜色搭配。然而,一些分形图案似乎无法令人满意地着色,在这些情况下,我们必须将图片保持为黑白或中等灰色调。

着色 Julia 集

[edit | edit source]
从距离估计绘制的 Julia 集

为了得到一张漂亮的图片,我们还必须着色 Julia 集,否则 Julia 集只能通过着色 Fatou 域来观察,而这种着色在 Julia 集附近变化剧烈,给人一种模糊的感觉(可以通过仔细选择颜色尺度和密度来避免这种情况)。一个点 z 属于 Julia 集,如果迭代不停止,也就是说,如果我们已经达到选定的最大迭代次数 M。但由于 Julia 集是无限薄的,而且我们只对规则排列的点进行计算,因此在实践中我们无法用这种方式着色 Julia 集。但幸运的是,存在一个公式可以(直到一个常数因子)估计 Julia 集外部的点 z 到 Julia 集的距离。这个公式与一个 Fatou 域相关联,并且该公式给出的数字越接近 Julia 集越准确,因此偏差没有意义。

距离函数是指函数 (参见 *非复数函数的Julia集合和Mandelbrot集合* 部分),其等势线必须大致均匀分布。公式中出现了关于 *z* 的 的导数 。但由于 (k 次复合), 是数字 (*i = 0, 1, ..., k-1*)的乘积,这个序列可以通过 (*在* 计算下一个迭代 *之前*)递归地计算。在三种情况下,我们有

limk→∞ (非超吸引)
limk→∞ (超吸引)
limk→∞ (d ≥ 2 且 z* = ∞)

如果这个数字(针对最后一次迭代次数 kr 计算得出,需要除以 r)小于给定的小数字,则例如将点 z 着色为深蓝色。

灯光效果

[edit | edit source]
使用势函数的灯光效果
使用距离函数的灯光效果

我们可以通过使用灯光效果,使某些图案的着色更具吸引力。我们假设我们将势函数或距离函数绘制在带有分形的平面上,并且从给定方向(由两个角度确定)照亮生成的丘陵景观,并从正上方观察。对于每个点,我们对另外两个非常接近该点的点进行真实迭代次数的计算,一个在 x 方向,另一个在 y 方向。这三个真实迭代次数的值在空间中形成一个小的三角形,我们用该三角形的法线(单位)向量与光方向的单位向量形成标量积。将标量积乘以一个确定光效果的数字后,我们将该数字添加到真实迭代次数(乘以密度数字)。

除了真实迭代次数,我们还可以使用从距离函数构造的相应实数。真实迭代次数通常给出最佳结果。使用距离函数等同于形成分形景观并从正上方观察它。

是一个多项式,并且当循环是超吸引时,效果通常最好,因为势函数或距离函数的奇点会产生凸起,这可能会破坏着色。

场线

[edit | edit source]
场线
场线

在一个法图域(不是中性的)中,存在一个与等势线系统正交的线系统,该系统中的线称为场线。如果我们根据迭代次数(不是真实迭代次数)对法图域进行着色,则迭代带将显示等势线的走向,也显示场线的走向。如果迭代走向 ∞,我们可以很容易地显示场线的走向,即通过根据最后序列点位于 x 轴上方还是下方来改变颜色,但在这种情况下(更准确地说:当法图域是超吸引时),我们无法连贯地绘制场线(因为我们使用 循环点的乘积的幅角)。对于一个吸引循环 C,场线从循环点发出,并从迭代进入循环点的(无限多个)点发出。场线在朱利亚集上以非混沌点(即生成有限循环的点)结束。

r 为循环 C 的阶数,令 z*C 中的一个点。我们有 r 重复合),我们定义复数

.

如果C的点为r个数字 的乘积。实数 1/ 是循环的吸引力,我们假设循环既不是中性的也不是超吸引的,这意味着 1 < 1/ < ∞。点 z* 是 的不动点,并且在该点附近,映射 具有(与场线相关)旋转的特征,其幅角为(因此)。

为了对法图域进行着色,我们选择了一个小数字,并将迭代序列 停止于 时,并根据数字k(或如果我们更喜欢平滑着色,则根据实际迭代次数)对点z 进行着色。如果我们从z* 选择一个由角度 给定的方向,则从该方向发出的z* 的场线由满足以下条件的点z 组成

.

因为如果我们沿着场线方向(远离循环)通过迭代带,迭代次数k增加 1,数字增加,因此数字沿着场线是常数。

对法图域场线的着色意味着我们对场线对之间的空间进行着色:我们从z*选择一些规律分布的方向,并在这些方向的每一个方向上选择两个方向。由于可能会发生两个边界场线不以朱利亚集的同一点结束的情况,我们着色的场线在通往朱利亚集的途中可能会(无限地)分叉。我们可以根据到场线中心线的距离进行着色,并且可以将这种着色与通常的着色混合使用。

n为场线数,t为它们的相对厚度(区间[0, 1]中的一个数)。对于点z,我们已经计算了数字,如果数字(在区间[0, 1]中)满足|v - i/n| < t/(2n),其中i = 0, 1, ..., n,我们可以使用数字|v - i/n|/(t/(2n))(在区间[0, 1]中 - 到场线中心的相对距离)进行着色。

在第一张图片中,函数的形式为,我们只对单个法图域进行了着色。第二张图片显示,场线可以做得非常装饰性(函数的形式为)。

嵌入在场线中的图片

(彩色)场线被迭代带分割,这样的部分可以与单位正方形建立一一对应关系:一个坐标是到一个边界场线的相对距离,这个数字是(v - i/n)/(t/(2n)) + 1/2,另一个是到内部迭代带的相对距离,这个数字是实际迭代数的非整数部分。因此,我们可以将图片放入场线中。如果我们根据迭代次数和场线数对它们进行索引,我们可以根据需要放入任意数量的图片。然而,似乎很难找到适合放置图片的分形图案 - 如果目的是具有艺术价值的图片。但我们可以将绘制限制在场线内(并可能在嵌入的图片中引入透明度),并让场线外的域成为另一个分形图案(第三张图片)。

填充的朱利亚集

[edit | edit source]
对于的填充朱利亚集

法图域的补集称为填充朱利亚集。它是朱利亚集和其他法图域的并集。外部法图域通常是包含∞的域,填充的朱利亚集通常用黑色着色,就像曼德尔布罗特集一样。程序更容易编写,但运行速度更慢,因为黑色的点会达到最大迭代次数。由于精细的朱利亚集通常只有一个法图域,因此您也可以制作一个更容易的程序,该程序只对单个法图域进行着色。您在外部法图域中选择一个点,并对该点进行大量迭代,以找到吸引循环,然后填充的朱利亚集包括未向该循环迭代的点。如果有理函数的次数至少为 2,那么包含∞的法图域的填充朱利亚集由其迭代序列保持有界的点组成。

华夏公益教科书