跳转到内容

分形/彩色Julia集

来自维基教科书,自由的教科书,用于一个开放的世界

可视化复函数

[编辑 | 编辑源代码]
HSV投影中的颜色空间

假设我们想要可视化一个复值函数,比如

为了给着色,我们将其分解为其绝对值 和其辐角 .

然后,我们将颜色

分配给表示 的点。在这个HSV颜色空间中,所有值都在 0 到 1 之间。HSV 颜色的第一个分量(色调)仅取决于 的辐角,而第二个和第三个分量(饱和度和明度)仅取决于 的绝对值。我们在 上使用变换 将其映射到区间 。关于,参见章节辅助函数.

索引为s(饱和度)的值控制饱和颜色向白色(或灰色)的过渡,即中间值 → 无限大。索引为h(值/色度)的值控制黑色向明亮的过渡,即零 → 非零。参数a控制过渡发生的位置:a只是划分两个区域(暗/亮、饱和/灰等)的圆的半径。参数b控制过渡的锐度:b小 = 平滑,b大 = 锐利。

以下图像均显示范围 [-10,10]×[-10,10],并使用(彩虹的半径)和(黑色圆盘的半径)。

在 S 和 V 的意义交换的图像中,零用白色打印,而无穷大用黑色打印。

[edit | edit source]

可视化 Julia 集

[edit | edit source]

Julia 集Fatou 集 可以很漂亮。它们的计算机图形生成可能很困难。

在本页的剩余部分,我们将研究一种可用于可视化复函数 ƒ 的 Julia 集的方法。它的优点是您不需要知道迭代的吸引子

生成的图像在 Fatou 部分将是平滑的。

概述:成像方法

[edit | edit source]

请注意,还存在其他方法来对复动力系统进行着色,例如

逆迭代法 (IIM)

[edit | edit source]

计算 ƒ 的原像,即计算反向轨道。由于不动点的稳定性从吸引转变为排斥,反之亦然,人们只需选择一个复数,然后观察它在逆迭代下的变化情况。问题是结果不会均匀分布在中,而且您必须计算 ƒ 的逆。

按吸引速度着色 (CSA)

[edit | edit source]

从用于着色的点阵中取一个值,进行迭代,直到迭代值接近吸引子。根据使点足够接近吸引子所需的迭代次数对该点进行着色。

此方法通常用于可视化多项式的 Julia 集和与牛顿著名方法(用于查找函数的零点)相连的 Julia 集。度数 > 1 的多项式总是具有无穷大作为超吸引不动点。牛顿方法中出现的理性函数总是具有函数的根作为吸引不动点。然而,在这两种情况下,可能存在其他吸引子,而且这些吸引子不一定只包含一个点。

逃逸时间算法 (ETA)

[edit | edit source]

如果 ∞ 是一个吸引子,即过程的一个不动点,那么根据迭代次数(时间)对点进行着色,直到看到点逃逸到 ∞。如果点在最大迭代次数内没有逃逸,那么该点被着色为属于 Julia 集或某个其他吸引子的盆地。此方法适用于多项式。最突出的 Julia 集是zz2+c 的 Julia 集,其中c 是 Mandelbrot 集的元素或距离 Mandelbrot 集不远。如果您看到这样的 Julia 集的图像,那么很可能使用了 ETA 来获得图像。

柯西收敛算法 (CCA)

[edit | edit source]

在本页的剩余部分,我将介绍一种不同的方法,其基本思想与逃逸时间算法相同。但是,不需要预先知道任何吸引盆地,并且可以将不同的吸引盆地分离并以不同的颜色着色。这种方法使用柯西收敛的概念。这种方法不是观察点的轨道,而是观察两个相邻点zz+ε 的距离在迭代这两个值时的变化情况。如果差值趋于 0,则该点将走向吸引子。如果差值不接近 0,则该点靠近(或部分属于)Julia 集。

度量
[edit | edit source]

紧化复平面黎曼球面 S2 上的典范投影。

这给了我们一个 度量 d: 作为复平面上两点之间的距离,我们取他们在球面上的距离,即 正形线 的长度。这意味着度量以 π 为界,即使到 ∞(现在是北极)的距离也是有限的。

为了计算两点 zw 之间的距离,我们以这样的方式旋转球体 S2,使得

  1. w 映射到 0
  2. z 映射到正实轴

经过这些变换后,距离就可以很容易地计算出来。旋转可以通过一系列 等距莫比乌斯变换 来完成。总之,我们得到

留给读者作为练习。横线表示 复共轭。度量为

d 引入的一个很好的特性是,以前在无穷远处发散的序列现在收敛到无穷远处,即收敛到 S2 的北极。

轨道的稳定性
[edit | edit source]

回顾 Julia 集 的定义,该集合针对 压缩映射 ƒ。该定义暗示了迭代的稳定性的一些事实

其中 ƒn 表示 ƒ 的第 n 次迭代

集合

称为z轨道(在 ƒ 下)。

如果zw彼此靠近,并且属于Fatou 集 Fƒ,即 ƒ 的 Julia 集 Jƒ补集,则两个点zw的轨道在某种意义上表现相似。如果zJƒ的元素,则zw将表现出相当不同的行为,即使w本身是Jƒ的元素。

为了获得轨道稳定性的概念,我们设置

对于一个小 ε,以及上面的度量d。这意味着我们取两个彼此靠近的点,然后我们总结它们的距离,因为 ƒ 使它们在黎曼球面上跳跃。请注意,对于任何固定的 ε,即使z是 Fatou 点,当n很大时,该和也会发散。

但是,我们可以使用 Σn 来衡量一个点离Jƒ有多近:该和越大,迭代越不稳定,该点离 ƒ 的 Julia 集越近。

为了区分 Julia 集(或接近 Julia 集的点)的点和 Fatou 集中的点,我们需要一个标准。为了获得这个标准,我们计算我们要着色的点的所有 Σ 值,即格点 Γ 中的所有点。计算完这些值后,我们进行一些统计,以获得期望值 E标准差 σ 用于 Σ 值集:令

提醒一下

事实证明,Σ 值广泛分布在多个尺度上。因此,我们不直接使用 Σ。相反,我们使用 Σ 的对数。δ 值只是一个小的常数,以避免对数的输入为零。

现在,我们拥有了为一个点着色所需的一切

  1. 选择
    1. 一个点格点 的点 进行着色
    2. 要执行的迭代次数
    3. 一个小
  2. 对于所有点,计算
  3. 计算
  4. 计算

对于某个常数 。 因为 将用于将属于 Julia 集的点 () 与不属于 Julia 集的点 () 分开, 的合理值大于 。 尝试设置如 等等。 如果 ,那么我们将 着色为属于 Julia 集。 如果 ,我们可以使用该值来为 Fatou 集着色。 如果我们知道某个吸引子,我们可以检查 ƒ 是否接近它,并使用该信息。


为了将值映射到饱和度和亮度的有效范围内,我们使用第 辅助函数 h 部分中的函数

计算 需要大量时间。 可视化过程需要两次传递

  1. 计算来自所有
  2. 使用 和重新计算的 对点进行着色

或者

  1. 计算并存储所有
  2. 计算 并对这些点进行着色

另一种方法看起来像这样

找到最小的 使得 在所有 上都低于给定的边界。如果找不到这样的 ,则假设 是朱利亚集的元素。否则,使用 对法图集进行着色。

此算法是逃逸时间算法 (ETA) 的变体。请注意,在 ETA 中,点实际上不会逃逸(至少如果我们在球体上),它只是收敛到 ∞。这种方法类似。但是,我们不需要知道 ƒ 的吸引不动点。

到目前为止,我没有尝试修改后的版本。一个缺点可能是法图集将不再出现平滑的着色。然后我不确定这种修改是否真的有优势,因为迭代必须完成,直到达到给定的最大迭代次数。请注意,即使 在某些 上低于边界,距离 可能会再次升高。我无法确定这种影响是否至关重要或可以忽略不计...

表示牛顿算子

使用临界点吸收 (CPA)

[编辑 | 编辑源代码]

之前的方法可以生成简洁平滑的着色,并且对过程的动力学知识要求最低。然而,它非常耗时。以下方法是多项式逃逸时间算法 (ETA) 的扩展。

令 ƒ 为度数为 d > 1 的复数上的多项式。这样的多项式最多有 d 个临界点:无穷大和 ƒ′ 的最多 d–1 个零点。众所周知,过程 z→ƒ(z) 的每个吸引子至少吸收一个临界点。假设 zK 是一个临界值,则 ƒn(zK) 会任意接近 ƒ 的一个吸引周期。

二次多项式 ƒ(z) = z2 + c 的过程是最简单的情况:临界值为 0 和  ∞。由于 ∞ 吸收自身,只剩下 0,我们有以下情况。M 表示曼德布罗集合。

简单情况。0 被 ∞ 吸收,J(ƒ) 仅由康托尔尘埃组成。可以使用逃逸时间到 ∞ 来对所有点进行着色。
如果 cM 内部的一个元素,则 0 将被一个 (超) 吸引周期吸收。计算
对于足够大的 n。由于 w (基本上) 仅依赖于 c,因此可以在开始 J(ƒ) 的可视化之前预先计算它。请注意,w 是可能具有多个元素的周期的元素,即 w 对于该周期来说只是唯一的。
然后,对 C 中的点 z 进行着色与 ETA 一样简单
  • 如果 z 被 ∞ 吸收,请使用逃逸时间来对 z 进行着色。
  • 如果 ƒn(z) 接近 w,即如果 |ƒn(z) – w| < ε 第一次出现,请使用该 n 来对 z 进行着色。
  • 如果 ƒn(z) 既不接近 ∞ 也未接近 w,则将 z 着色为 J(ƒ) 的一部分。只有很少的 z 会属于此类。


辅助函数

[编辑 | 编辑源代码]

辅助函数 t

[编辑 | 编辑源代码]
一些

是一个平滑的、单调的 S形 从 −1 到 1 的转换,它满足 。有许多选择。其中一些是

gd 表示 古德曼函数

辅助函数 h

[编辑 | 编辑源代码]

辅助函数 几乎相同,但它映射到 ,我们可以通过参数 调整过渡速度。

其中 。那么 关于点 (0, 1/2) 对称,并且

负值被映射到 0 到 1/2 之间的数值。正值被映射到 1/2 到 1 之间的数值。参数 控制过渡的速度。

如果我们想要一个下降函数,我们可以使用对称性

也就是说,我们取负

辅助函数 g

[edit | edit source]

此函数将正数映射到区间

对于以下定义的某个函数。如果 选择得当,那么对于 以下关系成立:

这意味着

  • 随着 不断增长,从 0 增长到 1
  • 我们可以通过指定参数 来控制 穿过 0 到 1 之间中点的位置
  • 我们可以通过指定参数 来控制 穿过点 的速度

我们剩下要做的就是确定函数 上的形式

必须满足以下条件

对于 我们设置

辅助函数 *w*

[edit | edit source]

此函数将正数映射到区间

通过 我们可以控制它在原点的斜率

圆弧通过 (0,0) 和 (1,1)

[edit | edit source]

一条圆弧通过 (0,0) 和 (1,1),在 (0,0) 处的斜率为 ,在 (1,1) 处的斜率为

其中

圆心在直线 上。


另请参阅

[编辑 | 编辑源代码]

参考资料

[编辑 | 编辑源代码]
华夏公益教科书