當前位置:
首頁 > 知識 > 數學中最神秘、最令人敬畏的研究對象之一

數學中最神秘、最令人敬畏的研究對象之一

Julia 集和 Mandelbrot 集,這可以說是數學中最神秘、最令人敬畏的研究對象之一。我查閱了一些其他的資料,然後寫下這篇長文,與大家一同分享。

還是讓我們先來簡單複習一下複數吧。由於承認「負數也能開平方」將會帶來很多幽雅和便利的結論,因此我們發明了虛數,用 i 來表示 -1 的平方根(即虛數單位),並把實數擴展為複數(即一切形如 a + b i 的數)。

正如實數可以用數軸上的點來表示一樣,複數可以用平面直角坐標繫上的點來表示。令 x 軸表示複數的實數部分,令 y 軸表示複數的虛數部分,則 a + b i 就對應了平面上的點 (a, b) 。我們把這個平面直角坐標系叫做「複平面」。

複數與複數之間不但可以相加相減,還可以相乘相除。(a + b i) + (c + d i) 就等於 (a + c) + (b + d) i ,而 (a + b i) (c + d i) 則等於 (ac – bd) + (bc + ad) i 。需要注意的是,我們不能討論一個複數乘以另一個複數後是變大了還是變小了,因為複數根本沒有大小之分

如果真的要比較它們的大小,我們可以比較它們的模。複數 a + b i 的模就是 a2+ b2的平方根,也就是它到複平面原點的距離。如果我們用不同的顏色來表示不同大小的模,那麼整個複平面大致就是這樣:

如果我們用 |z| 來表示複數 z 的模,那麼上面這個圖也就是函數 f(z) = |z| 的「等高線地圖」。複數的模有一個重要的性質,大家可以自行驗證:乘積的模等於模的乘積,即 |a·b| = |a|·|b| 。現在,我們對複平面上的所有點都進行平方,畫出 f(z) = |z2| 的等高線地圖:

可以看到,這一操作讓模的變化更劇烈了,等高線變得更加密集了。外面浩瀚的藍色空間,就對應著那些模已經相當大了的複數。

有趣的事情開始了。如果對上圖中的每個點再加上某個數,比如 0.3 ,那麼整個圖會怎樣變化呢?容易想到,對於模相同的複數來說,給實數部分加上 0.3 ,這對實數部分本來就較大的數影響會更大一些。

因此,上圖將會變得更扁,整個圖形會在水平方向上壓縮。這也就是 f(z) = |z2+ 0.3| 的等高線地形圖:

接下來,我們再對所得的圖形進行平方,繼續加劇模的變化:

然後,再給每個點的實數部分加上 0.3 ,於是得到 f(z) = |(z2+ 0.3)2+ 0.3| 的圖像:

再平方:

再加上 0.3 ,此時圖形已經開始變得有意思起來了:

再平方一次:

再加上 0.3 :

這也就是函數 f(z) = |(((z2+ 0.3)2+ 0.3)2+ 0.3)2+ 0.3| 的圖像,它反映了對複平面上的各個複數「平方再加 0.3 」迭代 4 次後模的大小情況。隨著迭代次數的增加,整個圖形將會變得越來越複雜。下圖顯示的就是迭代 12 次後的結果,可以看見整個圖形已經具有了分形圖形的複雜程度(圖形的「黑邊」其實是密集的等高線):

上圖中,大部分區域內的數都變得越來越大,直達無窮。而原點附近這個四葉草形區域內的數,至少目前還不算太大。

這給出了上圖的另外一種解讀方法:隨著迭代次數的增加,複平面上各個點的模的發散速度。有沒有什麼複數,隨著迭代次數的增加,最終並不會趨於無窮呢?當然有。

比如方程 z2+ 0.3 = z 的兩個複數解,它是這個迭代下的不動點,每次迭代後都維持原來的值,自然不會趨於無窮。我們把所有這種迭代後不會趨於無窮的點所組成的集合就叫做 Julia 集,它是以法國數學家 Gaston Julia 命名的。

只可惜, z z2+ 0.3 的 Julia 集是由一些孤點組成的,我們無法把它畫出來。上圖中的四葉草形區域也只是那些發散比較慢的點,但再多迭代幾次,最終也會趨於無窮。

是否存在適當的常數 c ,使得迭代 z z2+ c 的 Julia 集能夠形成一塊連通的區域呢?答案是肯定的。下圖是對複平面上的點執行 12 次 z z2– 1 迭代後的結果,中間這些紫色和黃色的點已經穩定下來,不會發散了,它們構成了一塊連通的 Julia 集:

常數 c 還可以是複數。下圖則是迭代過程 z z2+ (0.2 + 0.5 i) 迭代 12 次的結果,其中也有一些模非常小的點,它們不會發散,構成了連通的 Julia 集:

難以置信的是,每取一個不同的 c ,我們都能得到一個不同的 Julia 集,這些 Julia 集大小不同,形狀各異,可謂是百花齊放,各有各的美麗。在我的那篇舊文章里,可以找到更多的 Julia 集圖片。

在 Julia 集相關領域中,有一個非常漂亮而且非常重要的定理叫做 fundamental dichotomy theorem ,它告訴我們,一個 Julia 集要麼是完全連通的,任意兩點間都有一條通路;要麼是完全不連通的,整個圖形全是一個個孤立的點。

隨著常數 c 的變化,對應的 Julia 集也會連續地發生變化。我們比較關心的一個問題就是,哪些 c 值會讓對應的 Julia 集形成一個連通的區域?為了回答這個問題,讓我們來看看 Julia 集的另外一種計算方法。

在研究 Julia 集時,我們通常假設 c 的模總是小於 2 的。注意到,對任意一個滿足 |z| > 2 的複數 z ,都有 |z2| = |z|2> 2·|z| ,也就是說,對這樣的 z 進行平方後,它的模至少都會變成原來的兩倍。

即使常數 c 的方向和 z2的方向完全相反,也不足以把 z2的模抵消到原來的水平。因此,在迭代運算過程中,一旦某一步結果的模大於 2 了,可以斷定它必將發散到無窮。

因此,我們有了 Julia 集合的另一個定義。 z z2+ c 對應的 Julia 集,就是無限迭代下去後模仍然不超過 2 的點。於是,我們立即有了 Julia 集的另一種生成方法。

我們可以從複平面上模不超過 2 的所有點,也就是以原點為中心半徑為 2 的圓盤出發,看看哪些點的平方加 c 後會落在這個圓盤內,進而考察哪些點平方加 c 再平方加 c 後將會落在這個圓盤內,如此反向迭代,不斷找出原象,反推出符合要求的點集。

我們先用 c = -1 來試驗一下。

這就是複平面上模小於 2 的所有複數所組成的點集,即一個半徑為 2 的圓盤:

我們把上圖右移一個單位,得到所有加上 -1 後模小於 2 的點:

我們再找出上圖區域中的每個點的平方根(別忘了,每個數都有兩個平方根,因此每個點都有兩個原象),於是得到所有平方再加 -1 後模仍然小於 2 的點。

由於開平方是一個連續函數,而每個點都有一正一負兩個平方根,因此整個圖像本該變為兩個關於原點對稱的連通區域。不過,這兩個連通區域有所重合,它們將會並在一起成為一整塊連通區域。

為了看出這一點,只需要注意到,0 是一個非常特殊的數,它的原象只有一個,就是它本身。由於上圖中的區域內包含零點,因此它的兩組原象也都包含原點,這就表明兩個區域是有重合的,結果就像下圖這樣:

再將上圖右移一個單位:

再作出平方根:

再次右移:

再次找平方根,由於零點始終沒有跑出去,因此圖像始終是一整塊連通區域:

再次右移:

再次找平方根,圖像仍然連通:

可以看到,此時得到的點集已經非常接近之前給出的 z z2– 1 的 Julia 集了。下圖則是反推 12 次後的結果,它基本上可以看作是 z z2– 1 的 Julia 集了:

讓我們再來看一個無法構成連通區域的 Julia 集的例子。取 c = – 1 – 0.9 i ,讓我們來看看逆推的過程。還是先畫出半徑為 2 的圓盤:

現在,找出所有加上 – 1 – 0.9 i 後會落進該圓盤的點,實際上相當於把圓盤右移 1 個單位,再上移 0.9 個單位:

尋找上圖中的點的平方根:

再平移:

再找平方根:

再次平移:

這裡發生了一個非常值得注意的現象:原點現在跑到了灰色區域的外邊。也就是說,這個點在若干次迭代之後不能落入那個半徑為 2 的圓盤裡,表明這個點的模最終將會發散。換句話說, 0 不屬於 c = – 1 – 0.9 i 時的 Julia 集。

由於 0 的原象還是 0 ,因此當我們考察哪些點的平方會落入上圖中的區域時,0 繼續排除在外。此時注意,灰色區域內不包含原點,說明這個圖形不見得仍然連通了。

事實上,我們可以證明,一個不包含原點的區域,開平方後必然會得到兩塊不連通的區域

為了證明這一點,我們在上圖中畫一條過原點的迴路,把整個圖形圍起來。對這個迴路上的所有點開平方後,將會得到一個過原點的、關於原點對稱的封閉曲線。容易想到,這條閉曲線一定是一個 8 字形。而上圖灰色區域的兩個原象,則只能分居在 8 字形的兩個圓圈中:

我們把上圖再次平移:

再取平方根。注意到,上圖中的兩塊區域都不含零點,因此由前面的結論,每個區域都將會再分成兩個更小的連通區域,從而使得整個圖中出現四個連通塊:

如此逆推下去,連通塊的數量將會越來越多,它們的總面積則會越來越小,最後就只剩下一些孤立的點了,就如同我們最早所說的 z z2+ 0.3 的 Julia 集一樣。

只不過,要想看出 z z2+ 0.3 所對應的 Julia 集並不連通,我們需要的逆推次數更多一些。下圖中可以看到,直到第 12 次逆推,零點仍然還在候選區域中;到了第 13 次逆推,才把零點排除在 Julia 集之外。此後,圖形很快便收縮為了一堆離散的點。

也就是說,為了判斷 z z2+ c 的 Julia 集是否連通,我們只需要測試一下,看對初始值 0 迭代無窮多次,所得的模是否會趨於無窮大。我們自然希望知道,能夠使 Julia 集連通的常數值 c 在複平面上組成了一個什麼樣的圖形。

為此,我們只需要固定初始值為 0 ,把複平面上不同的點當作 c ,畫出迭代過程中模的發散速度(和最開始製作 Julia 集一樣,我們用不同的顏色來表示不同的發散速度):

神奇的是,這本身竟然又是一個漂亮的分形圖形!數學家 Beno?t B. Mandelbrot 是最早對其進行系統研究的人之一,因此我們就把所有不會讓零點發散的複數 c 組成的集合叫做 Mandelbrot 集。

更多 Mandelbrot 集細節的驚人圖片,也可以參見之前的那篇文章。整個 Mandelbrot 集可以包含於一個以原點為圓心,半徑為 2 的圓里。這也就是我們在考慮 Julia 集時往往假設常數 c 的模小於 2 的原因。

生成 Mandelbrot 集的演算法和生成 Julia 集的演算法完全一樣,只是這一次我們固定的是初始值,而把 c 當作了變數。

Mandelbrot 集內的每一個點就對應了一個連通的 Julia 集,Mandelbrot 集合外的點則對應了不連通的 Julia 集,並且很容易想到,越靠近 Mandelbrot 集的邊界,對應的 Julia 集形狀就越詭異。

因此, Mandelbrot 集還有另外一種解讀方法:它就是 Julia 集的縮略圖!完全沒有比喻的意思,它真的就是 Julia 集的縮略圖:

因此, Mandelbrot 集可以說是所有無窮多個 Julia 集的一個高度總結。究其原因,還是因為 Julia 集的零點太重要了。

Julia 集的零點的迭代結果,很大程度上決定了 Julia 集的形狀,就好像這個零點「知道」 Julia 集是什麼樣子似的。而 Mandelbrot 集則把所有的零點信息都匯聚在了一起,自然高度歸納出了所有的 Julia 集。

讓我們總結一下 Julia 集和 Mandelbrot 集的關係。

在迭代過程 z z2 + c 中,我們有四個參數: z 的初始值的實部、虛部,以及 c 的實部、虛部。 Julia 集就是給定 c 的實部、虛部後所得的結果,而 Mandelbrot 集則是限定 z 的實部和虛部均為 0 後的結果。

大家可能想到,任意限定其中兩個參數,把另外兩個參數當作變數,我們還能得到很多不同的圖形。

事實上,如果把所有不同的 Julia 集重合起來,我們將會得到一個四維圖形,它的其中兩個維度是不同的初始值 z 構成的複平面,另外兩個維度則是不同的常數 c 構成的複平面。這個四維空間就包含了所有不同的初始值在所有不同的常數 c 之下迭代的發散情況。

而 Mandelbrot 集,則是這個四維圖形在 c = 0 處的一個切片,並且是最具有概括力的一個切片。

因此,我們相當於有了 Mandelbrot 集的一個四維擴展,從這個四維圖形中,我們可以切出很多二維的或者三維的切片,得到更多驚人而漂亮的圖形。

Mandelbrot 集還有另外一種高維擴展,即用四元數 a + b i + c j + d k 來代替複數,從而得到另一種四維 Mandelbrot 集。可惜,這些擴展都是四維的,我們只能從它們的切片中獲取三維圖形。

要想欣賞真正的三維版 Mandelbrot 集,我們還得想想別的方法。數學家們創造了很多漂亮的三維版 Mandelbrot 集,不過它們的定義有些生硬,並不自然。

另外還有一個叫做 Multibrot 集的東西,它就是把 Mandelbrot 集產生規則中的 z2 一般化,用 zn 代替。隨著 n 的連續變化, Multibrot 集也會連續地變化。

如果把不同 n 所對應的 Multibrot 集重疊在一起,我們就會得到一個三維圖形(如下圖, n 從 1 取到 5 )。這也勉強算得上是 Mandelbrot 的三維擴展吧。

Gaston Julia 和 Beno?t B. Mandelbrot 兩人的研究並未就此結束,這一系列研究直接導致了復動力學(complex dynamics)這一新學科的誕生。

本文由超級數學建模整理

本文轉載於Matrix67

http://www.matrix67.com/blog/archives/4570

轉載請在公眾號中,回復「轉載」

-----這裡是數學思維的聚集地------

「超級數學建模」(微信號supermodeling),每天學一點小知識,輕鬆了解各種思維,做個好玩的理性派。50萬數學精英都在關注!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 超級數學建模 的精彩文章:

10分鐘讀懂粒子物理到底是如何誕生的
線性代數被高數感染,也開始變…了

TAG:超級數學建模 |