日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Matrix67: My Blog ? Blog Archive ? 神奇的分形藝術(shù)(四):Julia集和Mandelbrot集

 AMI66 2014-01-11

http://www./blog/archives/292   

考慮函數(shù)f(z)=z^2-0.75。固定z0的值后,我們可以通過不斷地迭代算出一系列的z值:z1=f(z0), z2=f(z1), z3=f(z2), ...。比如,當(dāng)z0 = 1時(shí),我們可以依次迭代出:

z1 = f(1.0) = 1.0^2 - 0.75 = 0.25
z2 = f(0.25) = 0.25^2 - 0.75 = -0.6875
z3 = f(-0.6875) = (-0.6875)^2 - 0.75 = -0.2773
z4 = f(-0.2773) = (-0.2773)^2 - 0.75 = -0.6731
z5 = f(-0.6731) = (-0.6731)^2 - 0.75 = -0.2970
...

    可以看出,z值始終在某一范圍內(nèi),并將最終收斂到某一個(gè)值上。
    但當(dāng)z0=2時(shí),情況就不一樣了。幾次迭代后我們將立即發(fā)現(xiàn)z值最終會趨于無窮大:

z1 = f(2.0) = (2.0)^2 - 0.75 = 3.25
z2 = f(3.25) = (3.25)^2 - 0.75 = 9.8125
z3 = f(9.8125) = (9.8125)^2 - 0.75 = 95.535
z4 = f(95.535) = (95.535)^2 - 0.75 = 9126.2
z5 = f(9126.2) = (9126.2)^2 - 0.75 = 83287819.2
...

    經(jīng)過計(jì)算,我們可以得到如下結(jié)論:當(dāng)z0屬于[-1.5, 1.5]時(shí),z值始終不會超出某個(gè)范圍;而當(dāng)z0小于-1.5或大于1.5后,z值最終將趨于無窮。
    現(xiàn)在,我們把這個(gè)函數(shù)擴(kuò)展到整個(gè)復(fù)數(shù)范圍。對于復(fù)數(shù)z0=x+iy,取不同的x值和y值,函數(shù)迭代的結(jié)果不一樣:對于有些z0,函數(shù)值約束在某一范圍內(nèi);而對于另一些z0,函數(shù)值則發(fā)散到無窮。由于復(fù)數(shù)對應(yīng)平面上的點(diǎn),因此我們可以用一個(gè)平面圖形來表示,對于哪些z0函數(shù)值最終趨于無窮,對于哪些z0函數(shù)值最終不會趨于無窮。我們用深灰色表示不會使函數(shù)值趨于無窮的z0;對于其它的z0,我們用不同的顏色來區(qū)別不同的發(fā)散速度。由于當(dāng)某個(gè)時(shí)候|z|>2時(shí),函數(shù)值一定發(fā)散,因此這里定義發(fā)散速度為:使|z|大于2的迭代次數(shù)越少,則發(fā)散速度越快。這個(gè)圖形可以編程畫出。和上次一樣,我用Pascal語言,因?yàn)槲也粫﨏的圖形操作。某個(gè)MM要過生日了,我把這個(gè)自己編程畫的圖片送給她^_^

{$ASSERTIONS+}

uses graph;

type
   complex=record
      re:real;
      im:real;
   end;

operator * (a:complex; b:complex) c:complex;
begin
   c.re := a.re*b.re - a.im*b.im;
   c.im := a.im*b.re + a.re*b.im;
end;

operator + (a:complex; b:complex) c:complex;
begin
   c.re := a.re + b.re;
   c.im := a.im + b.im;
end;

var
   z,c:complex;
   gd,gm,i,j,k:integer;
begin
   gd:=D8bit;
   gm:=m640x480;
   InitGraph(gd,gm,'');
   Assert(graphResult=grOk);

   c.re:=-0.75;
   c.im:=0;
   for i:=-300 to 300 do
   for j:=-200 to 200 do
   begin
      z.re:=i/200;
      z.im:=j/200;
      for k:=0 to 200 do
      begin
         if sqrt(z.re*z.re + z.im*z.im) >2 then break
         else z:=(z*z)+c;
      end;
      PutPixel(i+300,j+200,k)
   end;

   readln;
   CloseGraph;
end.


    代碼在Windows XP SP2,F(xiàn)PC 2.0下通過編譯,麻煩大家?guī)兔?bào)告一下程序運(yùn)行是否正常(上次有人告訴我說我寫的繪圖程序不能編譯)。在我這里,程序運(yùn)行的結(jié)果如下:



    這個(gè)美麗的分形圖形表現(xiàn)的就是f(z)=z^2-0.75時(shí)的Julia集??紤]復(fù)數(shù)函數(shù)f(z)=z^2+c,不同的復(fù)數(shù)c對應(yīng)著不同的Julia集。也就是說,每取一個(gè)不同的c你都能得到一個(gè)不同的Julia集分形圖形,并且令人吃驚的是每一個(gè)分形圖形都是那么美麗。下面的六幅圖片是取不同的c值得到的分形圖形。你可能不相信這樣一個(gè)簡單的構(gòu)造法則可以生成這么美麗的圖形,這沒什么,你可以改變上面程序代碼中c變量的值來親自驗(yàn)證。

c = 0.45, -0.1428
  

c = 0.285, 0.01
  

c = 0.285, 0
  

c = -0.8, 0.156
  

c = -0.835, -0.2321
  

c = -0.70176, -0.3842
  



    類似地,我們固定z0=0,那么對于不同的復(fù)數(shù)c,函數(shù)的迭代結(jié)果也不同。由于復(fù)數(shù)c對應(yīng)平面上的點(diǎn),因此我們可以用一個(gè)平面圖形來表示,對于某個(gè)復(fù)數(shù)c,函數(shù)f(z)=z^2+c從z0=0開始迭代是否會發(fā)散到無窮。我們同樣用不同顏色來表示不同的發(fā)散速度,最后得出的就是Mandelbrot集分形圖形:
    

    前面說過,分形圖形是可以無限遞歸下去的,它的復(fù)雜度不隨尺度減小而消失。Mandelbrot集的神奇之處就在于,你可以對這個(gè)分形圖形不斷放大,不同的尺度下你所看到的景象可能完全不同。放大到一定時(shí)候,你可以看到更小規(guī)模的Mandelbrot集,這證明Mandelbrot集是自相似的。下面的15幅圖演示了Mandelbrot集的一個(gè)放大過程,你可以在這個(gè)過程中看到不同樣式的分形圖形。







網(wǎng)上可以找到很多小程序?qū)崿F(xiàn)Mandelbrot集的放大過程。把上面給出的代碼改一改,你也可以寫出一個(gè)這樣的程序來。

Update:2011 年 8 月 31 日,我對這個(gè)話題做了更進(jìn)一步的討論 http://www./blog/archives/4570

Posted in Brain Storm
Tags: , , , , , , , , ,
Trackback: http://www./blog/archives/292/trackback
我猜您可能還喜歡:

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多