碎形與動態系統
念家興
一. 動態系統簡介
千百年來, 人類仰觀美麗的星空, 引發無 數的聯想。 更編織了許多動人的神話和星座 故事。 那時候繁星是受上帝的指使而運動、 而 閃爍。 一直到了牛頓發現萬有引力後, 加上望 遠鏡的發明使人們得以收集到更多的天文資 料, 驗證了牛頓的萬有引力理論和運動定律 同樣適用於天體的運行。
1781 年, 業餘天文學家 William Her- schel 系統地研究太陽系中行星時, 發現了 天王星 (Uranus)。 數十年後, 排除了其它行 星的影響, 天文資料顯示天王星軌道偏離了 其理論軌道達 2 秒弧之多。 J. J. Leverrier 和 J. E. Adam 因此分別預測另一顆行星 的存在。 在 1846 年 9 月 23 日 Galle 發現了 海王星 (Neptune)。 多年後, 天文學家又發 現海王星運行的偏差, 終於在1930年, Clyde Tombaugh 發現了冥王星 (Pluto)。
根據萬有引力理論和牛頓運動定律, 計 算天體的運行軌道可歸結為求解微分方程組 的問題, 也就是鼎鼎有名的多體問題 (N- body problem), 要求得這些方程組的確切
解 (close form) 一般是不可能的, Poincare 因此提出了微分方程的定性理論。 早期的動 態系統理論便是研究這些解的性質。
在這樣的思維下, 二十世紀初, 微分方 程的定性理論得到了長足的發展, Poincare 更提出了所謂的 Poincare map 將微分方程 解的性質的研究轉為函數的迭代 (iteration) 的研究。 函數迭代的另一個來源也和牛頓有 關, 那就是用牛頓法解方程式 f (x) = 0 解 的近似值 (對於 g(x) = x − f(x)/f′(x) 做 迭代) 。 所以研究函數的迭代是有意義的, 也 是很實用的!
為了方便討論, 我們先定義一些術語。
首先, 本文中 fn(x) 代表函數 f (x) 的 n 次 迭代, 不是 f (x) 的 n 次方, 請讀者明察。
定義一: f : R → R 是一個函數, x ∈ R。 集合O+(x; f ) = {fn(x)|n ∈ Z, n ≥ 0} 稱為點 x 在 f 下的 前進軌道 (forward orbit)。 如果 f 具有反函數, 集合 O−(x; f ) = {fn(x)|n ∈ Z, n ≤ 0} 稱為 x 在 f 下的 後退軌道 (backward orbit); 而 O(x; f ) = {fn(x)|n ∈ Z} 則稱為 x 在 f
15
下的 軌道 (orbit)。 本文只討論前進軌道, 因 此也就將它簡稱為軌道。
定義二: f : R → R 是一個函數, 點 p ∈ R 稱為 f 的一個 固定點 (fixed point), 如果 f (p) = p。
定義三: f : R → R 是一函數, 點 p ∈ R 稱為 f 的一個 週期點 (periodic point), 如果存在 n ∈ N 使得 fn(p) = p。
使得 fn(p) = p 的最小正整數 k 稱為點 p 的週期。
註: 固定點和週期點可分為吸引性 (at- tractive) 和排斥性 (repelling) 兩種。
點 p 稱為函數 f 的一個吸引性固定 點 (或週期點), 如果存在點 p 的一個鄰域 (neighborhood) U, 使得對於所有的 x ∈ U, x 的軌道趨於此固定點 (或週期軌道)。 點 p 稱為一個排斥性固定點 (或週期點, 週期為 k), 如果存在點 p 的一個鄰域 V , 使得對於所 有的 x ∈ V , 存在 n ∈ N 使得 fn(x) 6∈ V (或 fnk(x) 6∈ V )。 可以證明如果 p 是一個 固定點且 |f′(p)| < 1, 則p 是個吸引性固 定點。 如果 |f′(p)| > 1, 則 p 是個排斥性 固定點。 固定點和週期軌道具有最簡單的軌 道結構。 同時它們是研究動態系統時首先要 找出的軌道。 有興趣的讀者可參閱 [1, 8, 9, 14]。
就函數迭代而言, 我們關心的問題是定 義域中的每一個點 x 的軌道結構及其迭代行 為: 當 n 趨於無限大時, fn(x) 是趨於某一 個固定點, 或是趨於無限大, 還是另有不同的 行為?
我們先來考慮幾個函數迭代的例子。
例子1: 考慮函數 f (x) = x/2, 則 f2(x) = f (f (x)) = (1/2)2x。 利用數學 歸納法, 我們得到 fn(x) = (1/2)nx。 同 時 x = 0 是 f (x) 唯一的固定點 (解方程 式f (x) = x)。 對任何實數 x ∈ R, 我們發現 fn(x) → 0, 當 n → ∞。 此固定點 x = 0 就是一個吸引性固定點。
例子2: 考慮函數 f (x) = 2x。 同樣地 x = 0 也是一個固定點。 利用數學歸納法, 我 們可以推得 fn(x) = 2nx。 所以
fn(x) :
→ +∞ x > 0
→ −∞ x < 0 當n → ∞。
= 0 x = 0
此固定點 x = 0 就是一個排斥性固定點。
以上的兩個例子, fn(x) 都可以確切地 表示出來。 因此可以完整地描述出所有軌道 的結構。 但是一般而言, fn(x) 的通式是表 示不出來的。 不但如此, 僅僅是計算前幾次的 迭代已是頗為繁雜。 不信的話, 請就 f (x) = 2x(1 − x) 寫出 f2(x), f3(x), . . ., f10(x)。
有趣的是, 雖然 fn(x) 的通式表示不出來, 我 們卻可以利用所謂的圖形分析法 (graphical analysis) 來瞭解 f (x) = 2x(1 − x) 的所有 軌道的結構。 單變數函數 f : R → R 的 迭代可以在其圖形上進行, 其方法如下: 給 定 a ∈ R, 在座標平面上, 畫出 y = x 及 y = f (x) 的圖形。 從點 (a, a) 畫一垂直線 交 y = f (x) 於 (a, f (a)), 再從點 (a, f (a)) 畫一水平線交 y = x 於 (f (a), f (a))。 重覆 相同的過程便可在直線 y = x 上依次畫出 (a, a) , (f (a), f (a)), (f2(a), f2(a)), . . .,
(fn(a), fn(a)), . . .。(如圖一) 如此, 我們便 可從直線 y = x 上的這些點得到 a 的軌道 的直觀認知。
y=x
y=f(x)
(f(a), f(a))
(f(f(a)), f(f(a)))
(a, a) 0
0 0.2
0.2 0.4
0.4 0.6
0.6 0.8
0.8 1
1 1.2
1.2 1.4
1.4 1.6
1.6 1.8
1.8 2
2
圖一: 圖形分析法
0 0 0.2
0.2 0.4
0.4 0.5
0.5 0.6
0.6 0.8
0.8 1
1 0.1
0.1 0.3
0.3 0.7
0.7 0.9
0.9
圖二: 函數 的圖形分析
例子3: 函數 f (x) = 2x(1 − x) 有兩
個固定點: x = 0, x = 1/2。 利用圖形分析 法 (圖二), 我們發現
(i) x < 0 時, fn(x) → −∞, 當 n → ∞。
(ii) x > 1 時, f2(x) < 0, 再根據 (i), fn(x) → −∞, 當 n → ∞。
(iii) x ∈ (0, 1) 時, fn(x) → 1/2, 當 n →
∞。
(iv) x = 0 或 x = 1, fn(x) = 0, 當 n ≥ 1。
以上的觀察都可嚴格地證明。 有興趣的讀者 請參閱 [1,8]。
到目前為止, 我們所遇到的軌道結構都 很單純。 下一個例子, 則揭露了另一種複雜的 軌道結構。
例子4: 函數 f (x) = 5x(1 − x) 有兩 個固定點: x = 0, x = 4/5。 因為 (0, 1) 區間內有一子區間被對應到 (1, ∞), 因此圖 形分析法顯示大部份的點的軌道似乎都趨於
−∞, 請讀者自己試試看。 但顯然有些點的軌 道不會趨於 −∞。 例如: x = 0, x = 4/5, x = 1, 它們的軌道都一直留在 [0, 1] 區間內。
因此, 我們將注意力集中在集合 B = {x ∈ [0, 1]|∀n ∈ N, fn(x) ∈ [0, 1]}。 首先要提 醒大家 f (B) ⊆ B。 令人訝異的是, 集合B竟 然與大名鼎鼎的 Cantor set 是拓樸同構的。
而 Cantor set 也正是古典碎形的代表。 利用 符號動態學 (symbolic dynamics) 的方法, 我們可以證明下列三個事實:
(i) 集合B中有無限多個週期點, 且在B中是 稠密的。
(ii) 對於B中任何兩個開集合U、V (子集拓 樸), 存在 k ∈ N 使得 fk(U) ∩ V 6=∅。 (此性質稱為 topological transitivity)。
(iii) 對起始值是敏感的 (sensitive depen- dence on initial condition)。 也就是說, 存在一個正數 δ > 0, 對於任一點 x ∈ B, 在 x 的任何一個鄰域 (neighborhood) U 內, 存在 y ∈ U 和一個自然數 n∈N 使得|fn(x)−fn(y)| > δ。
由此三個現象, 讀者諸君應能感受到, 在 集合 B 中的軌道結構非常混亂。 事實上, De- vaney 便是用這三個現象來定義所謂的混沌 (chaos)。 確切的說, 函數 f : B → B 在集 合 B 上是混沌的 (chaotic), 如果上述三個 現象成立。
註: 數學中的混沌一詞最先出現於 Li 和 Yorke 的論文 [10]中。 該論文證明了一個有 趣的事實: 閉區間 J 上的連續函數 f : J
→ J, 如果有週期3的週期點, 則它在 J 中 有任意週期的週期點。 而數學家 Sarkovskii 在 1960 年代, 也曾對一維函數的週期點的出 現順序做過詳盡而完整的描述 [8,14]。
Devaney 對混沌的定義中的三個條件 並不獨立。 在一維的情況下, 條件 (iii) 可由 條件 (i) 和 (ii) 推得, 見 [2]。 再加上適當 的前提, 條件 (i), (iii) 都可由 (ii) 推得, 見 [17]。
例子 3 和 4, 是函數族 f (x) = ax(1 − x), a > 1, 的兩個特例。 Robert May 在 1976年的論文 [11]中介紹了這個簡單的函數 族的複雜動態行為, 引起許多數學家的關注 與投入。 同時也獲得了許多重要的結果, 並且 瞭解到從有序到混沌的一種機制。 這個函數 族也成為學習動態系統的入門例子。 關於一
維動態系統的理論相當完整, 有興趣的讀者 請參閱 [6]。
註: Yorke在 [1]中利用 Liapunov exponent 的觀念定義了所謂的混沌軌道 (chaotic orbit)。 Devaney 的定義具有整體 的直觀, 而 Yorke 的定義則具有方便進行電 腦實驗以檢測混沌軌道的好處。
由以上例子, 我們知道大部分函數的 n 次迭代都是無法確切地寫出它們的通式。 恰 如大多微分方程的通解不可得一樣, 因此數 學家轉而尋求解的性質, 也就是所謂的定性 理論。 離散型動態系統研究的便是函數迭代 的軌跡的結構。
二. 動態系統中的碎形
大家都知道, 實係數多項式的根不盡然 都是實數, 牛頓法也可用來解複變數函數的 根的問題。 因此, 複動態系統 (complex dy- namics) 的研究也就很有意義了。 在牛頓法 中, 必須要先猜一個起始值 (initial guess), 數值分析中的理論告訴我們只要起始值與解 夠接近, 牛頓法保證能收歛到該解。 那麼會收 歛的起始值所成的集合會是一個什麼樣的集 合呢?
著名英國數學家 Arthur Cayley(1821 -1895) 在 1879 年的論文 [5]中, 就曾提出過 這樣的問題: 那些起始值會分別收斂到 z3 − 1 = 0 的三個根 1、 (−1 ±√
3i)/2。 也就是 要考慮函數 g(z) = z − (z3− 1)/(3z2) 的
迭代的軌道結構。 深受這個問題的影響, 法國 數學家 Gaston Julia(1893-1978) 開始了他 對複變數函數動態系統的研究。 用 A1, A2, A3 分別代表會收歛到 1, (−1 + √
3i)/2, (−1 − √
3i)/2 的起始值的集合。 Julia 能 夠證明集合A1, A2, A3 具有共同的邊界集 (boundary)。 可是什麼樣的三個平面上的非 空子集合會有相同的邊界呢? 集合 A1, A2, A3 到底長相如何? 在那個沒有電腦繪圖的 黑白年代, 這一切都是很難想像的。 此共同邊 界集, 便是現在所謂的函數 g(z) 的 Julia set。 Julia 的研究結果早在1918年便已發表, 然而因為時局的動盪不安和電腦科技尚未萌 芽, 一直到了 1970 年代末期才受到世人的重 視。 Julia set 遇到了電腦繪圖就好像白雪公 主遇到了白馬王子, 一下子就被吻醒了。 從此 世界變得多采多姿。 而我們也終於能看到集 合 A1, A2, A3的長相。 此集合正是一個碎形。
事實上, 絕大多數的 Julia set 都是碎形。
複變數函數的 Julia set 的正式定義涉 及所謂的正規函數族 (normal family)。 為 了避免過多的術語惹人厭煩, 我們就不在這 裡詳述。 有興趣的讀者可參閱 [3, 4, 12, 13]。
所幸, 我們感興趣的複變數函數族 f (z) = z2+ c 有下列兩個性質:
(1) 在一個有限的範圍以外的所有點, 它們的 軌道都會趨於無限大。
(2) 集合 B = {z ∈ C|z 的軌道是有界 的}6= ∅, 也就是一切有界軌道所成的集 合是非空的。
可以證明, 函數 f (z) = z2+ c 的 Julia set, 記作 J(f ), 就等於集合 B 的邊界集, ∂B。 因 此 J(f ) 是一個非空有界的集合。 這些性質 也提供了一個用電腦繪圖製作 Julia set 的 方法。 我們先來看一個簡單的例子。
例子5: 考慮函數 f (z) = z2, 則 z = 0, 1是 f 的所有固定點。 可以簡單證明: 當 n → ∞ 時,
|fn(z)| = |z|n →
0 |z| < 1
∞ |z| > 1 1 |z| = 1 所以集合 B = {z ∈ C||z| ≤ 1}, 也就是 閉的單位圓盤。 所以 J(f ) = {z ∈ C||z| = 1} = 單位圓。 函數 f在單位圓上的迭代行為 相當複雜, 事實上容易證明 f 在 J(f )上是 混沌的。
這個例子中的 Julia set 結構非常簡單。
其它的 Julia set 可就必須藉助電腦繪圖了。
我們在此介紹兩種繪製 J(f ) 的方法。
方法一: 繪製集合 B
特性: 簡單省時但圖形檔案所佔記憶較 多。
步驟:
(1) 大致決定 Julia set 的範圍, 比如說長方 形 A = {z|a ≤ Re z ≤b, c≤Im z ≤d}。
(2) 將長方形 A 細分成 n2 個網格, n 的大 小視所須的解析度而定。 (一般而言, n 取 不超過 1000)。
(3) 對網格內的每個格點 z 進行迭代, 如果 對所有的 k ≤ N, fk(z) ∈ A, 則畫出 此點。 不然, 則捨棄此點。 對下一個格點
重複步驟 (3)。 (一般而言, N 取不超過 100)。
如此得到的圖形便是集合 B, 其邊界就是 J(f )。
方法二: 繪製 Julia set(描邊法) 特性: 計算量較大, 圖形檔案較小, J(f ) 一目了然。
步驟:
(1) (2) 同方法一。
(3) 對網格內的每一個格點z及其鄰近的格點 進行迭代。 如果對於所有的 k ≤ N, fk(z) ∈ A。 且其鄰近格點有不同之行 為, 則畫出此點。 不然, 則對下 一個格點 重複步驟 (3)。
如此得到的圖形便是 J(f )。 注意, 格點若為 內點, 則它有 4 個鄰近格點分別位於該點的 上、 下、 左、 右。 所以此方法在計算量上大約 增加 4 倍。
註: 當 |c| < 2 時, A 可以取作 {z ∈ C| − 2 ≤ Re z ≤ 2, 2, −2 ≤ Im z ≤ 2}。
在方法一中, 也可用使得 fk(z) 6∈ A 的最小 k 值來對點 z 著色, 其結果便是常見的美侖 美煥的圖形。 選擇恰當的範圍還可以對 Julia set 做局部的放大。 由此, 我們可以觀察 Ju- lia set 一些更細緻的結構。
圖三便是利用方法一所繪製的 Julia sets。
−1 .5
−1.5
1.5 1.5
(a)
−1 .5
−1 .5
1.5 1.5
(b)
2 2
−2
−2
(c)
圖三: (a) 函數 f (z) = z2− 0.5 + 0.5i 的 Julia set, (b) 函數 f (z) = z2 + i 的 Julia set, (c) 函數 f (z) = z2 + 2.001 的 Julia set。
接下來我們討論 f (z) = z2+ c 的 Ju- lia sets J(f )的性質。 對它們的證明有興趣 的讀者可參閱 [3, 4, 8]。
性質 (1): J(f ) 6=∅且是不可數 (un- countable) 無限多。
性質 (2): J(f ) 在 f 下是完全不變的 (completely invariant), 也就是說 f (J(f )
⊆ J(f) 且 f−1(J(f )) ⊆ J(f)。
性質 (3): f : J(f ) → J(f) 是混沌 的。(Devaney 的定義)
性質 (4): 若 z0 是 J(f ) 中的任一點, U 是 z0 的任一鄰域, 則 S∞n=1fn(U) 包含 所有的複數, 除了一個可能的例外點 (excep- tional point)。 另外, J(f ) 也是f 所有的排 斥性週期點所成集合的閉包 (closure)。
性質 (5): 如果|c| > 2, 則對任何複數 z 且 |z| > |c|, fn(z) → ∞ 當 n → ∞。
性質(6): 如果 |c| < 14, 則 J(f ) 是一 不自相交的封閉曲線。
性質(7): 如果 |c| 夠大, 則 J(f) 是一 個 Cantor set。
性質 (8): 如果當 n → ∞, fn(0) 不 趨近無限大, 則所有有界軌道所成的集合B是 連通的。 如果 fn(0) → ∞ 當n → ∞, 則集 合B是由無限多個成分 (component) 所構 成 (例如 Cantor set)。
註: 對於定義在里曼球面 (= C ∪{∞}) 上的有理函數 R(x)/Q(x), 如果 deg(R) ≥ 2 則性質 (1)、(2)、(3)、(4) 也同樣成立 [3], 其 中 deg(R) = max{ deg(P ), deg(Q)}。 有 趣的是, 數學家 Lattes 在 1918 年證明了函
數R(z) = (z2 + 1)2/(4z(z2 − 1)) 的 Ju- lia set 是整個里曼球面。 另一個例子是, 數 學家 Misiurewicz 在 1981 年證明了指數函 數f (z) = ez的 Julia set 是整個複數平面C。
在性質 (6) 和 (7) 的兩種截然不同的現象之 間, 有所謂的樹狀 (dendrite) 結構的 Julia set, 作為其間的過渡現象 (圖三 (b))。 性質 (8) 說明奇異點 (critical point)z = 0的軌 道結構與 Julia set 的結構間有密切關係。 下 個單元的主題—Mandelbrot set 就是以性 質 (8) 為基礎來定義的。
三. Mandelbrot Set
B. Mandelbrot 生於 1924 年的波蘭, 1936 年時全家移民法國。 他的研究工作深受 Julia 的影響與啟發, 在碎形方面的卓越貢 獻, 為他贏得了碎形幾何之父的美名。 1979 年, Mandelbrot借電腦之助首次製作出所謂 的 Mandelbrot set。 之後, 此圖形在數以萬 計的個人電腦上被複製、 被讚嘆。 人們首次有 機會親眼目睹這個被稱為數學中最美麗同時 也是最複雜的圖形。 底下我們就來說明到底 什麼是 Mandelbrot set。
在上個單元性質 (8) 中, 我們知道 f (z) = z2 + c 的奇異點 z = 0 的軌道與 J(f ) 有密切關係。 Mandelbrot set, M, 就 定義為:
M ={c ∈ C|f(z) = z2 = c 的奇異點軌道 不趨於無限大}
={c∈C|J(f) 是連通的}(根據性質(8))
如果 |c| > 2, 則 |f(0)| = |c|, 因此
|f(c)| = |f2(0)| = |c||c + 1| > |c|。 根據 性質 (5), fn(0) = fn−2(f (c)) → ∞ 當 n → ∞。 所以 Mandelbrot set 是個有界的 集合且包含於集合 {c ∈ C||c| ≤ 2}。 根據 此事實, Mandelbrot set 的繪製也就很容易 了。 方法如下:
步驟 (1) 將正方形 A = {c ∈ C||c| ≤ 2} 細分成 n2 個網格 (一般而言, n 取不超 過 1000)。 (2) 依序對網格內的格點, 以起始 值 z = c 進行迭代。 如果對所有 k ≤ N 都 有fk(c) ∈ A, 這裏 f(z) = z2+ c, 則畫出 此點。 不然則對下一個格點重複步驟 (2)。(一 般而言, N 取不超過 100)
如此便得到了 Mandelbrot set 的圖 形。 在附錄中, 我們附上兩個以 C 語言所 寫的程式, 一個繪製 Julia set, 另一個繪製 Mandelbort set。 請各位讀者就不同的c值 和範圍, 進行一些自己的數學實驗。 選擇恰當 的範圍還可以對 Julia set 和 Mandelbrot set 做細部的放大。 由此, 我們可以觀察 Ju- lia set 和 Mandelbrot set 一些更細緻的結 構。
0.5
−2
−1 .25 1.25
(a)
0 0.7
−0 .4
−1 .1
(b)
圖四: (a) Mandelbrot Set, (b) 是 (a) 中方框的放大。
除了美不勝收之外, Mandelbrot set, M, 有許多令人訝異的性質。 首先, A.
Douady 和 J. H. Hubbard [7] 於 1982 年證明了集合 M 是連通的。 接著 1991 年, 日本年輕數學家 M. Shishikura [15]證明了 (M的邊界集) 的碎形維度是 2。 然後 Col- orado 州立大學計算機科學系研究生 Dave Boll 在 1991 年為了確定集合 M 的最大區 塊和第二大區塊是否相切於一點 c = −0.75, 對 c = −0.75 + ai 記錄下a 與逃離給定區 域所需的迭次數 N(a) 間之關係, 結果得到 下表:
a值 疊代次數N(a)
0.1 33
0.01 315
0.001 3143
0.0001 31417
0.00001 314160
0.000001 3141593
0.0000001 31415928
Boll發現: aN(a) → π當a → 0。 接 著他將注意力集中在M的第一大區塊的尖點 c = 0.25 處, 對c = 0.25 + a記錄a值 與N(a)的關係, 並列表如下:
a值 疊代次數N(a)
0.1 8
0.01 30
0.001 97
0.0001 312
0.00001 991
0.000001 3140
0.0000001 9933
0.00000001 31414
0.000000001 99344
0.0000000001 314157 0.00000000001 993457 0.000000000001 3141625
這一次似乎有 √a·N(a) → π 當 a → 0。 在 c = 0.25處的現象, 之前已被發現過, 也曾 有過直觀的解釋。 不過尚無數學上的嚴格證 明。 至於在 c = −0.75處的現象則不但沒有 直觀的解釋, 更別談嚴格的證明了。 最後, 如 果 c0 ∈ M 且是一個所謂的 Misiurewicz point, 則在 c0 點附近的 Mandelbort set 和 f (z) = z2 + c0 的 Julia set具有所 謂的漸近自我相似性 (asymptotically self- similarity), 有興趣的讀者請參閱 [16]。
四. 結語
實數動態系統與複數動態系統充滿了許 多有趣的課題, 應用的範圍更涉及許多不同 學門。 使用的理論和方法也遍及數學中許多 不同分支。 碎形與混沌更是二十世紀數學中 兩個新興且重要的觀念。 本文旨在拋磚引玉, 希望能引起讀者對它們的興趣與投入, 讓我
們數學人口更加蓬勃, 讓台灣的數學水平更 上層樓。
五. 附錄
本附錄中收錄兩個程式, Julia.c 和 Mandelbort.c。 程式執行後會將結果分別存 在資料檔 Julia.dat 和 Mandelbort.dat。 使 用者可利用一些繪圖軟體將這些資料畫在電 腦螢幕上。 讀者如果熟悉 Turbo C 或 Bor- land C, 更大可輕易修改程式直接呼叫內建 繪圖指令將點畫在螢幕上, 不必再存資料檔。
程式 Julia.c 繪製 fill-inJulia set。 使 用者必需輸入 6 個實數 c1、c2、xmin、ymin、
xmax 及 ymax, 其中 c=c1+c2i、(xmin, ymin) 和 (xmax, ymax) 分別是選定的 長方形的左下角及右上角的座標。 例如, 欲 繪製在{z ∈ C| − 1.5 ≤ Re z ≤ 1.5,
−1.2 ≤ Im z ≤ 1.2} 範圍內 f(z) = z2+ 0.1 + 0.2i 的 Julia set 則輸入 0.1 0.2
−1.5 −1.2 1.5 1.2 (c1=0.1、c2=0.2、xmin
=-1.5、ymin =-1.2、xmax =1.5 及 ymax
=1.2)。
/********* Julia.c *******/
#include <stdio.h>
#include <math.h>
void main() {
int i, j, k, n=200, N=30, PLOT=1;
double c1, c2, x0, y0, x1, y1, x2, y2, xmin, ymin, xmax, ymax, hx, hy;
FILE *fp,*fopen();
fp=fopen("Julia.dat","w");
printf("Input c1 and c2 for the parameter c=c1+c2*i, \n");
printf("and xmin ymin xmax ymax.
Total six numbers. \n");
scanf("%lf %lf %lf %lf %lf %lf",
&c1, &c2, &xmin, &ymin,
&xmax, &ymax);
hx = (xmax - xmin)/ (1.0*n) ; hy = (ymax - ymin)/ (1.0*n) ;
for (i=0; i< n; i++){
x0 = xmin + i*hx;
for (j=0; j< n; j++){
x1 = x0;
y1 = y0 = ymin+ j*hy;
for (k=0;k < N ;k++){
x2 = x1*x1 - y1*y1 + c1;
y2 = 2*x1*y1 +c2;
if ( sqrt(x2*x2+y2*y2) > 2){
PLOT=0;
break;
}
x1 = x2;
y1 = y2;
}
if (PLOT == 1) fprintf(fp,"%6.5f
%6.5f \n",x0, y0);
else PLOT = 1;
} }
fclose(fp);
}
程式 Mandelbort.c 繪製 Mandelbort set。 使用者必需輸入4個實數 c1min、c2min
、c1max 及 c2max。 (c1min, c2min) 和 (c1max, c2max) 分別是選定長方形的左下 角和右上角的座標。 例如, 欲繪製在 {c ∈ C| − 2 ≤ Re c ≤ 1.5, −1 ≤ Im c ≤ 1}
範圍內的 Mandelbort set, 則輸入 −2 −1 1.5 1 (c1min = −2、c2min = − 1、c1max
= 1.5、c2max = 1)。
/********* Mandelbrot.c *******/
/* Draw Mandelbrot set in a specified region. */
#include <stdio.h>
#include <math.h>
#define ITER 50
void main() {
int i, j, k, n=300, PLOT=1;
double c1, c2, c1min, c2min, c1max, c2max, x0, y0, x1, y1, hstep, vstep;
FILE *fp,*fopen();
fp=fopen("Mandelbrot.dat","w");
printf("Input the ranges of c1 and c2: c1min, c2min, c1max and c2max. \n");
scanf("%lf %lf %lf %lf",&c1min,
&c2min, &c1max, &c2max);
hstep = (c1max - c1min)/ (1.0*n) ; vstep = (c2max - c2min)/ (1.0*n);
for (k=0;k< n;k++){
for (j=0;j< n;j++){
c1 = c1min + k*hstep;
c2 = c2min + j*vstep;
x0 = c1;
y0 = c2;
for (i=0;i < ITER ;i++){
x1 = x0*x0 - y0*y0 + c1;
y1 = 2*x0*y0 +c2;
if ( x1*x1+y1*y1 > 4) { PLOT = 0;
break;
}
x0 = x1;
y0 = y1;
}
if (PLOT == 1) fprintf(fp,"%5.4f
%5.4f\n",c1, c2);
PLOT = 1;
} }
fclose(fp);
}
六. 參考文獻
1. K. T. Alligood, T. D. Sauer, and J.
A. Yorke [1997] Chaos :an introduction
to dynamical systems. Springer Verlag:
New York.
2. J. Banks, J. Brooks, G. Cairns, G.
Davis, and P. Stacey [1992] On De- vaney’s Definition of Chaos. Amer.
Math. Monthly, 99, 332-334.
3. A. F. Beardon [1991] Iteration of ra- tional functions :complex analytic dy- namical systems. Springer Verlag: New York.
4. L. Carleson, T. W. Gamelin [1993]
Complex dynamics. Springer Verlag:
New York.
5. A. Cayley [1879] The Newton-Fourier imaginary problem, Amer. Jour. of Math. 2.
6. P. Collet and J.-P. Eckmann [1980] Iter- ated maps of the interval as dynamical systems. Birkhauser, Boston.
7. A. Douady and J. H. Hubbard [1982]
Iterated des polynomes quadratiques complexes, CRAS Paris 294, 123-126.
8. R. L. Devaney [1989] An introduc- tion to chaotic dynamical systems.
Addison-Wesley, Reading, MA.
9. A. Katok, B. Hasselblatt [1995] Intro- duction to the modern theory of dy- namical systems. Cambridge Univer- sity Press: Cambridge.
10. T-Y Li and J. A. Yorke [1975] Period Three Implies Chaos. Amer. Math.
Monthly, 82, 985-992.
11. R. May [1976] Simple mathematical models with very complicated dynami- cal behavior. Nature 261, 459-467.
12. J. Milnor [2000] Dynamics in One Com- plex Variable, 2nd edi. Vieweg: Braun- schweig.
13. H-O Peitgen, H. Jurgens, and D. Saupe [1992] Chaos and Fractals: New Fron- tiers in Science. New York: Springer- Verlag.
14. C. Robinson [1995] Dynamical sys- tems: stability, symbolic dynamics, and chaos. CRC Press: Boca Raton.
15. M. Shishikura [1998] The Hausdorff di- mension of the boundary of the Man- delbrot set and Julia Sets. Annals of
Math., 147, 225-267.
16. L. Tan [1990] Similarity between the Mandelbrot set and Julia sets, Com- mun. Math. Phys., 134, 587-617.
17. M. Vellekoop and R. Berglund [1994]
On Intervals, Transitivity = Chaos.
Amer. Math. Monthly 101, 353-355.
—本文作者任教於靜宜大學應數系—