跳轉到內容

分形/彩色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) 處的斜率為

其中

圓心在直線 上。


另請參閱

[編輯 | 編輯原始碼]

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書