电竞比分网-中国电竞赛事及体育赛事平台

分享

Matrix67: My Blog ? Blog Archive ? 再談Julia集與Mandelbrot集

 AMI66 2014-01-11

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

很早以前,我簡(jiǎn)單介紹過(guò) Julia 集和 Mandelbrot 集,文章在此。這可以說(shuō)是數(shù)學(xué)中最神秘、最令人敬畏的研究對(duì)象之一。不過(guò),那時(shí)我對(duì)這個(gè)話題了解還不太深。今天見(jiàn)到這個(gè)網(wǎng)頁(yè),讓我對(duì) Julia 集和 Mandelbrot 集有了更深的了解。我查閱了一些其他的資料,然后寫(xiě)下這篇長(zhǎng)文,與大家一同分享。繼續(xù)閱讀以前,建議先看看我原來(lái)那篇文章(很短),那里面有很多漂亮的 Julia 集和 Mandelbrot 集的圖片,這篇文章就不再展示了。

 
    還是讓我們先來(lái)簡(jiǎn)單復(fù)習(xí)一下復(fù)數(shù)吧。由于承認(rèn)“負(fù)數(shù)也能開(kāi)平方”將會(huì)帶來(lái)很多幽雅和便利的結(jié)論,因此我們發(fā)明了虛數(shù),用 i 來(lái)表示 -1 的平方根(即虛數(shù)單位),并把實(shí)數(shù)擴(kuò)展為復(fù)數(shù)(即一切形如 a + b i 的數(shù))。正如實(shí)數(shù)可以用數(shù)軸上的點(diǎn)來(lái)表示一樣,復(fù)數(shù)可以用平面直角坐標(biāo)系上的點(diǎn)來(lái)表示。令 x 軸表示復(fù)數(shù)的實(shí)數(shù)部分,令 y 軸表示復(fù)數(shù)的虛數(shù)部分,則 a + b i 就對(duì)應(yīng)了平面上的點(diǎn) (a, b) 。我們把這個(gè)平面直角坐標(biāo)系叫做“復(fù)平面”。


    復(fù)數(shù)與復(fù)數(shù)之間不但可以相加相減,還可以相乘相除。(a + b i) + (c + d i) 就等于 (a + c) + (b + d) i ,而 (a + b i) (c + d i) 則等于 (ac - bd) + (bc + ad) i 。需要注意的是,我們不能討論一個(gè)復(fù)數(shù)乘以另一個(gè)復(fù)數(shù)后是變大了還是變小了,因?yàn)閺?fù)數(shù)根本沒(méi)有大小之分。如果真的要比較它們的大小,我們可以比較它們的模。復(fù)數(shù) a + b i 的模就是 a2 + b2 的平方根,也就是它到復(fù)平面原點(diǎn)的距離。如果我們用不同的顏色來(lái)表示不同大小的模,那么整個(gè)復(fù)平面大致就是這樣:

      

    如果我們用 |z| 來(lái)表示復(fù)數(shù) z 的模,那么上面這個(gè)圖也就是函數(shù) f(z) = |z| 的“等高線地圖”。復(fù)數(shù)的模有一個(gè)重要的性質(zhì),大家可以自行驗(yàn)證:乘積的模等于模的乘積,即 |a·b| = |a|·|b| ?,F(xiàn)在,我們對(duì)復(fù)平面上的所有點(diǎn)都進(jìn)行平方,畫(huà)出 f(z) = |z2| 的等高線地圖:

      

    可以看到,這一操作讓模的變化更劇烈了,等高線變得更加密集了。外面浩瀚的藍(lán)色空間,就對(duì)應(yīng)著那些模已經(jīng)相當(dāng)大了的復(fù)數(shù)。

    有趣的事情開(kāi)始了。如果對(duì)上圖中的每個(gè)點(diǎn)再加上某個(gè)數(shù),比如 0.3 ,那么整個(gè)圖會(huì)怎樣變化呢?容易想到,對(duì)于模相同的復(fù)數(shù)來(lái)說(shuō),給實(shí)數(shù)部分加上 0.3 ,這對(duì)實(shí)數(shù)部分本來(lái)就較大的數(shù)影響會(huì)更大一些。因此,上圖將會(huì)變得更扁,整個(gè)圖形會(huì)在水平方向上壓縮。這也就是 f(z) = |z2 + 0.3| 的等高線地形圖:

      

    接下來(lái),我們?cè)賹?duì)所得的圖形進(jìn)行平方,繼續(xù)加劇模的變化:

      

    然后,再給每個(gè)點(diǎn)的實(shí)數(shù)部分加上 0.3 ,于是得到 f(z) = |(z2 + 0.3)2 + 0.3| 的圖像:

      

    再平方:

      

    再加上 0.3 ,此時(shí)圖形已經(jīng)開(kāi)始變得有意思起來(lái)了:

      

    再平方一次:

      

    再加上 0.3 :

      

    這也就是函數(shù) f(z) = |(((z2 + 0.3)2 + 0.3)2 + 0.3)2 + 0.3| 的圖像,它反映了對(duì)復(fù)平面上的各個(gè)復(fù)數(shù)“平方再加 0.3 ”迭代 4 次后模的大小情況。隨著迭代次數(shù)的增加,整個(gè)圖形將會(huì)變得越來(lái)越復(fù)雜。下圖顯示的就是迭代 12 次后的結(jié)果,可以看見(jiàn)整個(gè)圖形已經(jīng)具有了分形圖形的復(fù)雜程度(圖形的“黑邊”其實(shí)是密集的等高線):

      

    上圖中,大部分區(qū)域內(nèi)的數(shù)都變得越來(lái)越大,直達(dá)無(wú)窮。而原點(diǎn)附近這個(gè)四葉草形區(qū)域內(nèi)的數(shù),至少目前還不算太大。這給出了上圖的另外一種解讀方法:隨著迭代次數(shù)的增加,復(fù)平面上各個(gè)點(diǎn)的模的發(fā)散速度。有沒(méi)有什么復(fù)數(shù),隨著迭代次數(shù)的增加,最終并不會(huì)趨于無(wú)窮呢?當(dāng)然有。比如方程 z2 + 0.3 = z 的兩個(gè)復(fù)數(shù)解,它是這個(gè)迭代下的不動(dòng)點(diǎn),每次迭代后都維持原來(lái)的值,自然不會(huì)趨于無(wú)窮。我們把所有這種迭代后不會(huì)趨于無(wú)窮的點(diǎn)所組成的集合就叫做 Julia 集,它是以法國(guó)數(shù)學(xué)家 Gaston Julia 命名的。只可惜, z → z2 + 0.3 的 Julia 集是由一些孤點(diǎn)組成的,我們無(wú)法把它畫(huà)出來(lái)。上圖中的四葉草形區(qū)域也只是那些發(fā)散比較慢的點(diǎn),但再多迭代幾次,最終也會(huì)趨于無(wú)窮。

 
 
    是否存在適當(dāng)?shù)某?shù) c ,使得迭代 z → z2 + c 的 Julia 集能夠形成一塊連通的區(qū)域呢?答案是肯定的。下圖是對(duì)復(fù)平面上的點(diǎn)執(zhí)行 12 次 z → z2 - 1 迭代后的結(jié)果,中間這些紫色和黃色的點(diǎn)已經(jīng)穩(wěn)定下來(lái),不會(huì)發(fā)散了,它們構(gòu)成了一塊連通的 Julia 集:

      

    常數(shù) c 還可以是復(fù)數(shù)。下圖則是迭代過(guò)程 z → z2 + (0.2 + 0.5 i) 迭代 12 次的結(jié)果,其中也有一些模非常小的點(diǎn),它們不會(huì)發(fā)散,構(gòu)成了連通的 Julia 集:

      

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

 
 
    在 Julia 集相關(guān)領(lǐng)域中,有一個(gè)非常漂亮而且非常重要的定理叫做 fundamental dichotomy theorem ,它告訴我們,一個(gè) Julia 集要么是完全連通的,任意兩點(diǎn)間都有一條通路;要么是完全不連通的,整個(gè)圖形全是一個(gè)個(gè)孤立的點(diǎn)。

    隨著常數(shù) c 的變化,對(duì)應(yīng)的 Julia 集也會(huì)連續(xù)地發(fā)生變化。我們比較關(guān)心的一個(gè)問(wèn)題就是,哪些 c 值會(huì)讓對(duì)應(yīng)的 Julia 集形成一個(gè)連通的區(qū)域?為了回答這個(gè)問(wèn)題,讓我們來(lái)看看 Julia 集的另外一種計(jì)算方法。

    在研究 Julia 集時(shí),我們通常假設(shè) c 的??偸切∮?2 的。注意到,對(duì)任意一個(gè)滿足 |z| > 2 的復(fù)數(shù) z ,都有 |z2| = |z|2 > 2·|z| ,也就是說(shuō),對(duì)這樣的 z 進(jìn)行平方后,它的模至少都會(huì)變成原來(lái)的兩倍。即使常數(shù) c 的方向和 z2 的方向完全相反,也不足以把 z2 的模抵消到原來(lái)的水平。因此,在迭代運(yùn)算過(guò)程中,一旦某一步結(jié)果的模大于 2 了,可以斷定它必將發(fā)散到無(wú)窮。

    因此,我們有了 Julia 集合的另一個(gè)定義。 z → z2 + c 對(duì)應(yīng)的 Julia 集,就是無(wú)限迭代下去后模仍然不超過(guò) 2 的點(diǎn)。于是,我們立即有了 Julia 集的另一種生成方法。我們可以從復(fù)平面上模不超過(guò) 2 的所有點(diǎn),也就是以原點(diǎn)為中心半徑為 2 的圓盤(pán)出發(fā),看看哪些點(diǎn)的平方加 c 后會(huì)落在這個(gè)圓盤(pán)內(nèi),進(jìn)而考察哪些點(diǎn)平方加 c 再平方加 c 后將會(huì)落在這個(gè)圓盤(pán)內(nèi),如此反向迭代,不斷找出原象,反推出符合要求的點(diǎn)集。我們先用 c = -1 來(lái)試驗(yàn)一下。

    這就是復(fù)平面上模小于 2 的所有復(fù)數(shù)所組成的點(diǎn)集,即一個(gè)半徑為 2 的圓盤(pán):

      

    我們把上圖右移一個(gè)單位,得到所有加上 -1 后模小于 2 的點(diǎn):

      

    我們?cè)僬页錾蠄D區(qū)域中的每個(gè)點(diǎn)的平方根(別忘了,每個(gè)數(shù)都有兩個(gè)平方根,因此每個(gè)點(diǎn)都有兩個(gè)原象),于是得到所有平方再加 -1 后模仍然小于 2 的點(diǎn)。由于開(kāi)平方是一個(gè)連續(xù)函數(shù),而每個(gè)點(diǎn)都有一正一負(fù)兩個(gè)平方根,因此整個(gè)圖像本該變?yōu)閮蓚€(gè)關(guān)于原點(diǎn)對(duì)稱(chēng)的連通區(qū)域。不過(guò),這兩個(gè)連通區(qū)域有所重合,它們將會(huì)并在一起成為一整塊連通區(qū)域。為了看出這一點(diǎn),只需要注意到,0 是一個(gè)非常特殊的數(shù),它的原象只有一個(gè),就是它本身。由于上圖中的區(qū)域內(nèi)包含零點(diǎn),因此它的兩組原象也都包含原點(diǎn),這就表明兩個(gè)區(qū)域是有重合的,結(jié)果就像下圖這樣:

      

    再將上圖右移一個(gè)單位:

      

    再作出平方根:

      

    再次右移:

      

    再次找平方根,由于零點(diǎn)始終沒(méi)有跑出去,因此圖像始終是一整塊連通區(qū)域:

      

    再次右移:

      

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

      

    可以看到,此時(shí)得到的點(diǎn)集已經(jīng)非常接近之前給出的 z → z2 - 1 的 Julia 集了。下圖則是反推 12 次后的結(jié)果,它基本上可以看作是 z → z2 - 1 的 Julia 集了:

      

    讓我們?cè)賮?lái)看一個(gè)無(wú)法構(gòu)成連通區(qū)域的 Julia 集的例子。取 c = - 1 - 0.9 i ,讓我們來(lái)看看逆推的過(guò)程。還是先畫(huà)出半徑為 2 的圓盤(pán):

      

    現(xiàn)在,找出所有加上 - 1 - 0.9 i 后會(huì)落進(jìn)該圓盤(pán)的點(diǎn),實(shí)際上相當(dāng)于把圓盤(pán)右移 1 個(gè)單位,再上移 0.9 個(gè)單位:

      

    尋找上圖中的點(diǎn)的平方根:

      

    再平移:

      

    再找平方根:

      

    再次平移:

      

    這里發(fā)生了一個(gè)非常值得注意的現(xiàn)象:原點(diǎn)現(xiàn)在跑到了灰色區(qū)域的外邊。也就是說(shuō),這個(gè)點(diǎn)在若干次迭代之后不能落入那個(gè)半徑為 2 的圓盤(pán)里,表明這個(gè)點(diǎn)的模最終將會(huì)發(fā)散。換句話說(shuō), 0 不屬于 c = - 1 - 0.9 i 時(shí)的 Julia 集。

    由于 0 的原象還是 0 ,因此當(dāng)我們考察哪些點(diǎn)的平方會(huì)落入上圖中的區(qū)域時(shí),0 繼續(xù)排除在外。此時(shí)注意,灰色區(qū)域內(nèi)不包含原點(diǎn),說(shuō)明這個(gè)圖形不見(jiàn)得仍然連通了。事實(shí)上,我們可以證明,一個(gè)不包含原點(diǎn)的區(qū)域,開(kāi)平方后必然會(huì)得到兩塊不連通的區(qū)域。為了證明這一點(diǎn),我們?cè)谏蠄D中畫(huà)一條過(guò)原點(diǎn)的回路,把整個(gè)圖形圍起來(lái)。對(duì)這個(gè)回路上的所有點(diǎn)開(kāi)平方后,將會(huì)得到一個(gè)過(guò)原點(diǎn)的、關(guān)于原點(diǎn)對(duì)稱(chēng)的封閉曲線。容易想到,這條閉曲線一定是一個(gè) 8 字形。而上圖灰色區(qū)域的兩個(gè)原象,則只能分居在 8 字形的兩個(gè)圓圈中:

      

    我們把上圖再次平移:

      

    再取平方根。注意到,上圖中的兩塊區(qū)域都不含零點(diǎn),因此由前面的結(jié)論,每個(gè)區(qū)域都將會(huì)再分成兩個(gè)更小的連通區(qū)域,從而使得整個(gè)圖中出現(xiàn)四個(gè)連通塊:

      

    如此逆推下去,連通塊的數(shù)量將會(huì)越來(lái)越多,它們的總面積則會(huì)越來(lái)越小,最后就只剩下一些孤立的點(diǎn)了,就如同我們最早所說(shuō)的 z → z2 + 0.3 的 Julia 集一樣。只不過(guò),要想看出 z → z2 + 0.3 所對(duì)應(yīng)的 Julia 集并不連通,我們需要的逆推次數(shù)更多一些。下圖中可以看到,直到第 12 次逆推,零點(diǎn)仍然還在候選區(qū)域中;到了第 13 次逆推,才把零點(diǎn)排除在 Julia 集之外。此后,圖形很快便收縮為了一堆離散的點(diǎn)。

      

 
 
    也就是說(shuō),為了判斷 z → z2 + c 的 Julia 集是否連通,我們只需要測(cè)試一下,看對(duì)初始值 0 迭代無(wú)窮多次,所得的模是否會(huì)趨于無(wú)窮大。我們自然希望知道,能夠使 Julia 集連通的常數(shù)值 c 在復(fù)平面上組成了一個(gè)什么樣的圖形。為此,我們只需要固定初始值為 0 ,把復(fù)平面上不同的點(diǎn)當(dāng)作 c ,畫(huà)出迭代過(guò)程中模的發(fā)散速度(和最開(kāi)始制作 Julia 集一樣,我們用不同的顏色來(lái)表示不同的發(fā)散速度):

      

    神奇的是,這本身竟然又是一個(gè)漂亮的分形圖形!數(shù)學(xué)家 Beno?t B. Mandelbrot 是最早對(duì)其進(jìn)行系統(tǒng)研究的人之一,因此我們就把所有不會(huì)讓零點(diǎn)發(fā)散的復(fù)數(shù) c 組成的集合叫做 Mandelbrot 集。更多 Mandelbrot 集細(xì)節(jié)的驚人圖片,也可以參見(jiàn)那篇老文章。整個(gè) Mandelbrot 集可以包含于一個(gè)以原點(diǎn)為圓心,半徑為 2 的圓里。這也就是我們?cè)诳紤] Julia 集時(shí)往往假設(shè)常數(shù) c 的模小于 2 的原因。

    生成 Mandelbrot 集的算法和生成 Julia 集的算法完全一樣,只是這一次我們固定的是初始值,而把 c 當(dāng)作了變量。Mandelbrot 集內(nèi)的每一個(gè)點(diǎn)就對(duì)應(yīng)了一個(gè)連通的 Julia 集,Mandelbrot 集合外的點(diǎn)則對(duì)應(yīng)了不連通的 Julia 集,并且很容易想到,越靠近 Mandelbrot 集的邊界,對(duì)應(yīng)的 Julia 集形狀就越詭異。因此, Mandelbrot 集還有另外一種解讀方法:它就是 Julia 集的縮略圖!完全沒(méi)有比喻的意思,它真的就是 Julia 集的縮略圖:

      

    因此, Mandelbrot 集可以說(shuō)是所有無(wú)窮多個(gè) Julia 集的一個(gè)高度總結(jié)。究其原因,還是因?yàn)?Julia 集的零點(diǎn)太重要了。Julia 集的零點(diǎn)的迭代結(jié)果,很大程度上決定了 Julia 集的形狀,就好像這個(gè)零點(diǎn)“知道” Julia 集是什么樣子似的。而 Mandelbrot 集則把所有的零點(diǎn)信息都匯聚在了一起,自然高度歸納出了所有的 Julia 集。

 
 
    讓我們總結(jié)一下 Julia 集和 Mandelbrot 集的關(guān)系。在迭代過(guò)程 z → z2 + c 中,我們有四個(gè)參數(shù): z 的初始值的實(shí)部、虛部,以及 c 的實(shí)部、虛部。 Julia 集就是給定 c 的實(shí)部、虛部后所得的結(jié)果,而 Mandelbrot 集則是限定 z 的實(shí)部和虛部均為 0 后的結(jié)果。大家可能想到,任意限定其中兩個(gè)參數(shù),把另外兩個(gè)參數(shù)當(dāng)作變量,我們還能得到很多不同的圖形。事實(shí)上,如果把所有不同的 Julia 集重合起來(lái),我們將會(huì)得到一個(gè)四維圖形,它的其中兩個(gè)維度是不同的初始值 z 構(gòu)成的復(fù)平面,另外兩個(gè)維度則是不同的常數(shù) c 構(gòu)成的復(fù)平面。這個(gè)四維空間就包含了所有不同的初始值在所有不同的常數(shù) c 之下迭代的發(fā)散情況。而 Mandelbrot 集,則是這個(gè)四維圖形在 c = 0 處的一個(gè)切片,并且是最具有概括力的一個(gè)切片。

    因此,我們相當(dāng)于有了 Mandelbrot 集的一個(gè)四維擴(kuò)展,從這個(gè)四維圖形中,我們可以切出很多二維的或者三維的切片,得到更多驚人而漂亮的圖形。Mandelbrot 集還有另外一種高維擴(kuò)展,即用四元數(shù) a + b i + c j + d k 來(lái)代替復(fù)數(shù),從而得到另一種四維 Mandelbrot 集??上В@些擴(kuò)展都是四維的,我們只能從它們的切片中獲取三維圖形。要想欣賞真正的三維版 Mandelbrot 集,我們還得想想別的方法。數(shù)學(xué)家們創(chuàng)造了很多漂亮的三維版 Mandelbrot 集,不過(guò)它們的定義有些生硬,并不自然。另外還有一個(gè)叫做 Multibrot 集的東西,它就是把 Mandelbrot 集產(chǎn)生規(guī)則中的 z2 一般化,用 zn 代替。隨著 n 的連續(xù)變化, Multibrot 集也會(huì)連續(xù)地變化。如果把不同 n 所對(duì)應(yīng)的 Multibrot 集重疊在一起,我們就會(huì)得到一個(gè)三維圖形(如下圖, n 從 1 取到 5 )。這也勉強(qiáng)算得上是 Mandelbrot 的三維擴(kuò)展吧。

      

    Gaston Julia 和 Beno?t B. Mandelbrot 兩人的研究并未就此結(jié)束,這一系列研究直接導(dǎo)致了復(fù)動(dòng)力學(xué)(complex dynamics)這一新學(xué)科的誕生。如果大家對(duì)這個(gè)感興趣的話,不妨從 Wikipedia 相關(guān)頁(yè)面的 references 出發(fā),深入閱讀下去。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多