跳转到内容

Julia 集和 Mandelbrot 集的图片/Mandelbrot 集

来自 Wikibooks,开放世界中的开放书籍
有趣的 Julia 集
丑陋的 Julia 集

在外观上,Julia 集可以从一个极端到另一个极端。如果我们有一个包含复参数 c 的函数族,我们会观察到,绝大多数的 c 值的 Julia 集完全没有兴趣。事实上,吸引人的 Julia 集非常罕见。

这些 Julia 集仅仅是通过考虑一个迭代族并由此构造平面上的一个集合而得到的,这个集合可以作为 Julia 集的图集,因为如果我们在该集合中找到一个有趣的局部区域,我们就可以确定此区域的模式的一部分将在与这些点相关的 Julia 集的(自相似)结构中反映出来。这样的集合称为 Mandelbrot 集

因此,如果我们有一个函数 ,我们会在其中引入一个复参数 c,通常通过加法:.

Mandelbrot 集的构造

[编辑 | 编辑源代码]

Mandelbrot 集的构造基于对函数 的两个临界点 的选择:Mandelbrot 集(与函数族 和临界点 )由复数 c 组成,使得以 开始的(通过 )的迭代序列具有相同的终点。这个集合通常被涂成黑色。

Mandelbrot 集外部域的着色

[编辑 | 编辑源代码]

一个点 c 位于 Mandelbrot 集的外部,意味着第二个临界点 位于与第一个临界点 相同的 Fatou 域(对于迭代 ),我们可以给 c 赋予该 Fatou 域中点 的颜色。

为了绘制曼德勃罗集并为其外部区域着色,我们必须选择一个最大迭代次数 M,一个非常小的数字 (用于迭代至有限循环)和一个非常大的数字 N(用于迭代至 ∞)。

如果 = ∞(且 d ≥ 2,因此 ∞ 是一个临界点和一个(超吸引)不动点),我们当然不需要迭代 :我们迭代 (通过 )如果对于某个迭代次数 k < M, > N,则 c 位于曼德勃罗集之外,我们用与我们为包含 ∞ 的法图域中的 z 着色相同的方式为 c 着色。如果我们达到了最大迭代次数 M,我们认为 c 属于曼德勃罗集。

如果 是一个有限的临界点,并且如果 的迭代(通过 )运行到最大迭代次数 M 时,终点很可能是一个非超吸引的有限吸引循环(如果不是,则像素颜色可能存在错误,但实际上这无关紧要)。如果这次迭代的最后一个点是 z*,则 z* 属于该循环,但我们必须知道该循环的阶数和吸引力。因此,我们继续迭代:从 z* 开始,一直运行到 ,则完成此操作所需的迭代次数就是该循环的阶数 r,我们以与之前相同的方式计算吸引力 :1/ 是该循环 r 个点中数字 的乘积。此后,我们迭代 (通过 ),并在 时停止。如果这次迭代一直运行到最大迭代次数 M,我们认为 c 属于曼德勃罗集。如果对于 k < M,,我们根据 kc 着色,或者更确切地说,是根据相应的实际迭代次数着色,该迭代次数以与法图域相同的方式找到,通过将 k 除以 r(并取整数部分),并从该数字中减去 .

如果循环包含 ∞,也就是说,如果 的迭代被 > N 停止,其中 k < M,我们将 ∞ 作为循环的选定点,并继续迭代,直到我们再次得到 > N,那么完成此迭代所需的迭代次数就是循环的阶数。然后,我们迭代 (通过 ),并当 > N 时停止。如果此迭代运行到最大迭代次数 M,我们将 c 视为属于曼德布罗特集合。如果 > N 对于 k < M,我们将 c 按照 k 着色,或者更准确地说,按照相应的真实迭代次数着色,其计算方式与法图域相同,将 k 除以 r(并取整数部分),然后从该数字中减去 .

曼德布罗特集边界的着色

[edit | edit source]

一个点 c 位于曼德布罗特集之外,意味着第二个临界点 位于与第一个临界点 相同的法图域(对于迭代 ),并且估计 到该法图域中的朱利亚集的距离,是估计 c 到曼德布罗特集边界的距离。因此,曼德布罗特集的边界可以以与朱利亚集相同的方式着色,但现在 的导数不是关于 z 的,而是关于 c 的。

如果我们设置 ,我们有 (k 重复合)(起始值 z 首先是 ,然后是 ),然后我们找到 c 的导数,通过递归:我们有 ,并且我们依次找到 ,从 = 0 开始,并(在之前)计算下一个迭代值 ,分别从 z = 开始。

除了通过迭代 M 次找到循环中的点 z*,我们现在也计算了 z*c 的导数 z*',并且在迭代 进入循环时,我们现在也计算了 c 的导数。 的公式适用于两种情况

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

当最后一次迭代的这个数值小于给定的一个很小的数值时,我们将点 c 涂成深蓝色,例如。

为什么 Mandelbrot 集作为 Julia 集的图集

[编辑 | 编辑源代码]

如果我们选择 Mandelbrot 集边界附近的一个点 c,那么 的 Julia 集将具有(自相似)结构,该结构与 Mandelbrot 集在该局部区域的一些特征相同。在简单情况下 (通常的 Mandelbrot 集),c 的 Julia 集的结构与 Mandelbrot 集在 c 处的局部结构完全相同,但这通常不是一般有理函数的情况,只是 Julia 集的结构反映了 Mandelbrot 集的局部结构。

为什么会出现这种情况?当 c 在 Mandelbrot 集内部时,由 生成的序列不收敛于由 生成的序列的终点,这意味着包含 的两个 Fatou 域分别不同。但当我们让 c 跨过 Mandelbrot 集的边界时,这两个序列现在具有相同的终点,因此这两个 Fatou 域变得相同。由于其中一个 Fatou 域现在已经消失,我们可以推断 的 Julia 集必须以一种显著的方式发生变化(它变得不那么连通)。

只有当 c 接近 Mandelbrot 集的边界时,我们才能预测有关 Julia 集的一些信息,但是由于通常存在多个临界点,我们可以选择另一对并绘制一个新的 Mandelbrot 集。注意,如果我们使用两个有限临界点,并且如果我们将它们反转,那么黑色将保持不变,但颜色和边界可能会改变:颜色由 中的 Fatou 域包含 c 的势函数的值决定,而该 Fatou 域包含 。为了获得最美观的颜色,我们必须使用势函数在同一个点(第二个临界点)的值,因为 c 会发生变化。当 c 跨过 Mandelbrot 集的边界时,一个 Fatou 域会消失,但只有当第二个临界点离开 Fatou 域时,我们才能获得自然的颜色和边界。

通常的 Mandelbrot 集

[编辑 | 编辑源代码]

对于族 ,有两个临界点,0 和 ∞,因此只有一个曼德勃罗特集合。这个集合包含了这样的点 c,即由 0 生成的序列(通过 )保持有界。对于 c 在曼德勃罗特集合之外,该序列收敛到 ∞,我们可以根据将点带到以原点为中心的大圆之外所需的迭代次数进行颜色编码。如果我们只根据迭代次数进行颜色编码,并且不绘制边界,那么这个圆只需要半径为 2 即可。

对于这个族,当 c 在曼德勃罗特集合内部时,c 的朱利亚集合有两个法图域,而当 c 在外部时,只有一个。当 c 在曼德勃罗特集合内部时,朱利亚集合是连通的,而当 c 在外部时,朱利亚集合是不连通的(而且更甚:由于自相似性,完全不连通 - 一片尘埃云)。对于 c 属于边界,朱利亚集合是连通的,但它不包含内部法图域(这可以看作是退化的):朱利亚集合只是一条带有“鼻子”和“尾巴”以及连接这两个点的“脊椎”的分形线。

通常的曼德勃罗特集合包含一个无限的心的和圆的系统,它们都相互远离,有些彼此接触。当我们放大时,我们会发现一群 迷你曼德勃罗特。这样的迷你曼德勃罗特(可能变形)出现在所有复数(可微)函数的曼德勃罗特集合中,即使对于超越函数也是如此(参见超越函数的朱利亚和曼德勃罗特集合部分中的图片)。

曼德勃罗特集合和朱利亚集合的不同类型

[edit | edit source]

在所有的曼德勃罗特集合中,通常的曼德勃罗特集合拥有最美的局部区域。其他所有曼德勃罗特集合在整体上或多或少地都很丑,特别是当函数不是多项式时。反过来,在这样的曼德勃罗特集合中,我们可能会幸运地找到最有趣和最原始的形状。

当我们为不同的有理函数绘制曼德勃罗特集合时,当然某些类型的形状会重复出现,并且应该可以对这些形状进行分类。我们无法参考这方面的任何研究,我们只能陈述最基本的差异

1. d > 1 (m > n + 1)。然后 ∞ 是一个临界点和一个超吸引不动点,我们通常将它用作两个临界点中的第一个。对于 (以及临界点 0),我们可以在曼德勃罗特集合中找到这种图案(第一张图片)。

2. d = 1 (m = n + 1)。在这种情况下, 通常由牛顿法构造,用于求解方程 。临界点只是 的解,我们选择相互之间距离最大的两个点。对于 因此 ,我们可以在曼德勃罗集(第二张图片)中找到这个图案。

3. d < 1 (m < n + 1)。在这种情况下,我们通常使用两个有限的临界点,并且由于临界点关于 x 轴对称(如果 有实系数),我们让这组点包含一对共轭复数(距离最大)。我们让这个族为 ,然后我们在最有趣的事情发生的地方放大(第三张图片)。我们在边界上选择三个点,并绘制它们的朱莉娅集。第一个点在穿过海马谷的细切线上。第二个点在上面的黑色区域中的一个孔里。最后一个点假设我们将临界点反转,以便我们可以看到曼德勃罗集中在这个图片上不可见的边界的一部分。这个边界形成向下延续,穿过中心所示的垂直线。

参数 c

[edit | edit source]

为了从有理函数 f(z) 中获得迭代的 *族*,我们在这里简单地将参数 c 添加到 f(z) 中,使该族为 z → f(z) + c。这种方式是最简单的,因为我们可以在这种方式中获得每一个朱莉娅集,并且因为一个曼德勃罗集在局部就像一个朱莉娅集,并且因为由 z → f(z) + c 形式的族构造的曼德勃罗集的类型在各个方面都令人满意,所以没有充分的理由让 c 以更复杂的方式进入。但是,我们可以通过让 c 以特定方式进入来找到有趣的曼德勃罗集。我们可以通过将族替换为 z 来变换曼德勃罗集,其中 是某些函数,并且我们可以构建曼德勃罗集,其整体形式不同于通常的类型,方法是让 c 出现在有理函数 f(z) 的系数中。

现在该族函数的形式为z → g(z, c),我们假设g(z, c)关于zc都是有理函数。现在临界点可以依赖于c(我们将选定的两个临界点表示为),为了绘制边界,我们必须(除了)计算g(z, c)关于c的导数:(d/dc)g(z, c)(= - 请参见术语部分Terminology)。我们还必须计算临界点 关于c的导数:。迭代公式由给出(从 开始),关于c的导数 通过以下公式计算:

开始。

我们令f(z) 分别为 -iz 和 1,以及 i(z - 1/z)/√2i(z + 1/z)/√2(下图第一和第二张)。在最后一种情况下,四个部分在点±(√2 ± i√2)/2 处相遇,对应于属于普通曼德布罗集的点 ±i

现在我们假设g(z, c) 是由多项式 的牛顿迭代给出的有理函数,即 。临界点是方程g'(z, c) = 0 的解,并且由于 ,临界点是f(z) = 0 的根(在本例中为 1 和 ±√c)以及 的根(在本例中为 1/3)。由于作为f(z) = 0 的根的临界点是g(z, c) 的不动点,因此用于构建曼德布罗集的第二个临界点(即 )必须是 的根之一。在我们的具体情况下,我们只从一个临界点构建曼德布罗集:,因此只绘制了曼德布罗集的边界(第三张图)。

我们上面已经提到过,如果 的终点不是 ∞,那么它很可能是一个非超吸引的有限吸引循环,如果没有,那么像素的颜色可能会有错误,但这在实践中没有意义。然而,在我们刚才提到的g(z, c) 来自牛顿迭代的情况中,所有 曼德布罗集之外的迭代(更确切地说,是所有 Fatou 域)都是超吸引的,因此我们必须通过在公式中引入对数来修正实际迭代次数和距离函数的公式。

实际绘制曼德博和朱利亚集

[编辑 | 编辑源代码]

对于有理复函数的朱利亚集定义明确且自然,如同其他一些数学概念,我们倾向于说它属于自然界:如果另一个世界有计算机,他们也一定会拥有朱利亚集。曼德博集的定义也很简单明了,绘制过程必然是这样的:我们以某种方式输入两个多项式的系数,然后自动找到一些临界点对,或者在显示所有临界点的图片上通过点击来图形化选择一个对。此后,曼德博集就会出现,我们可以放大和更改颜色。按下某个键,就可以通过箭头移动窗口中心的点,当我们选择一个点(通常在曼德博集的边界上)时,朱利亚集的过程与曼德博集的过程完全相同。

当绘制一张大图片时,你应该至少绘制两倍于预期尺寸的图片,然后缩小它,这样边界就不再是单一颜色了。这将减轻边界通常的尖锐特征,并去除由于不可能的计算而产生的点。

华夏公益教科书