Mandelbrot & Julia Kümeleri ve Fraktaller

Ünlü bir fraktalı tanıtacağım size. İnternette ya da bilim kurgu yazılarında illa ki görmüşsünüzdür. Ben biraz kendi kafama göre anlatacağım. Konumuz Mandelbrot kümeleri. Ayrıca size animasyonlar da hazırladım.

İlk hesabı çok kolay siz de yapabilirsiniz. Hesap makinelerinizi çıkarın… 1 ile 3 arasında bir sayı tutun (ben mesela 2 tuttum). Bu sayımız \(r\) değerimiz. Sabit olacak bu.

Şimdi de 0 ile 1 arasında bir sayı tutun. Bu sayı da \(x_n\) olacak (mesela \(0,6\) tuttum, yani \(x_0 = 0,6\)). Şimdi hesap makinenizde şunu hesaplayın:

\(r x_0 (1-x_0) = x_1\)

Benim tuttuğum sayılar ile, \(2 (0,6) (1-0,6) = 0,48\) verdi. Bu sayı da, birinci işlemden sonra yani \(x_1 = 0,48\). Şimdi, çıkan sayıları tekrar aynı işleme sokarak birkaç defa hesaplayalım:

\(r x_1 (1-x_1) = 2 (0,48) (1-0,48) = 0,4992 = x_2 \)

\(r x_2 (1-x_2) = 2 (0,4992) (1-0,4992) = 0,499999 = x_3 \)

\(r x_3 (1-x_3) = 2 (0,49999) (1-0,49999) = 0,5 = x_4 \)

\(r x_4 (1-x_4) = 2 (0,5) (1-0,5) = 0,5 = x_5 \)

\(x_4\), \(x_5\) değerine eşit. İşleme giren sayı, çıkan sayıya eşit olduğu zaman kaydediyoruz, bu denge değeri. \(r = 2\) için denge değeri \(x_n = 0,5\). Hangi \(x\) değerinden başlarsanız başlayın, hep \(0,5\)’e varacaksınız.

Şimdi de \(r = 2,1\) için deneyeyim. \(x_0 = 0,3\) ile başladım ve 8 kere hesapladıktan sonra \(x_8 = 0,52381\) denge değerine ulaştım. Tekrar, hangi \(x\) değerinden başlarsanız başlayın yine \(0,52381\)’e ulaşacaksınız. Bunu da kaydettik.

Şimdi, \(r = 3,2\) olsun ve \(x_0 = 0,3\)’den başlıyorum. Çıkan sayıyı hesap makinesinde aynı formüle koyuyorum. 29 kere hesapladıktan sonra şu oldu: \(0,79945\) elde ettim, bunu geri koyduğum zaman \(0,513045\) elde ettim. \(0,513045\) koyduğumda da tekrar \(0,79945\) verdi. Yani iki tane denge değeri var gibi.

\(3,5\)’tan daha büyük \(r\) değerleri için hesap makinesinde denemeyin çünkü imkânsız. Daha doğrusu bir sabite ulaşamazsınız. Eğer \(r\) \(3.5\)’tan büyükse hiç bir denge değeri yok. Yani tamamen kaotik. Buraya şu grafiği koyuyorum:

Küçük \(r\) değerleri için bir çizgi var. Yani, sadece bir tane denge değeri var. Yaklaşık \(r = 3\)’ten sonra ikiye ayrılıyor. Burası o çözdüğümüz \(r = 3,2\) örneğinde olduğu gibi, iki tane denge değeri olan duruma denk geliyor. Fark ettiyseniz \(r = 3,5\)’tan sonra tamamen kaos var. Yani bir denge değeri yok. Fakat bu kaotik yeri çok çok büyütürseniz şeklin aynısını bulacaksınız. Bu işlemin ismi “lojistik harita” ya da “çatallanma diyagramı.” Denklemi:

\(x_{n+1} = r x_n (1 – x_n)\)

Peki, “bu bilgi ne işimize yarayacak?” Lojistik haritası, Pierre François Verhulst tarafından 1838’de bir ortamdaki popülasyonu modellemek için kullanılmış. \(r\), popülasyonun büyüme oranı. \(x\) de popülasyonu simgeliyor. Bu yukarıdaki modelde \(x\), 0 ise popülasyon yok, \(x\) 1 ise popülasyon maksimumda, yani etraftaki kaynaklar bu popülasyonu ancak tutabiliyor. Feigenbaum sabiti denilen bir sabit sayesinde, bu lojistik haritanın ne zaman kaotik olacağını bilebiliyorsunuz. Lojistik harita hakkında daha fazla gevezelik etmek istemiyorum, başka bir yazıda ayrıntılı anlatırım.

Şimdi Mandelbrot kümesine gelelim. Mandelbrot kümesi ile lojistik harita birbiri ile bağlantılı.

Bu az önce yaptığımız işlemi, kompleks sayılarla (\(z = x + i y\), \(i\), \(-1\)’in karekökü) yaparsak ne olur? Lojistik haritadaki gibi, birkaç kere denedikten sonra (birkaç iterasyondan sonra) kendini tekrar eden sayı elde eder miyiz? Kaotik mi olur bu işlem? Matematikçi Adrien Douady, bu lojistik haritaya benzer şekilde şöyle bir işlem düşündü: Bir kompleks sayı al (\(c\)). \(c\)’nin karesini al ve \(c\)’ye ekle. Çıkan sonucun tekrar karesini alıp tekrar \(c\)’ye ekle. Bazı \(c\) değerleri için, bu işlem sonunda başka bir sayıya gideceksiniz. Bazı \(c\) sayıları da alıp başını gidecek. İşte bu alıp başını gitmeyen \(c\) sayıları Mandelbrot kümesi oluyor. Formal olarak şöyle tanımlamış Douady:

\(z_{n+1} = z_n^2 + c\)

Bu kümeye fraktal üzerinde çalışmaları yüzünden Benoit Mandelbrot’un ismini veren kişi yine Douady. 1978’de Robert Brooks ve Peter Matelski, bu alıp başını gitmeyen sayıların kümesini kabaca bu şekilde bulmuşlar (Brooks & Matelski 1978):

 

 

 

Aslında bunu demek istemişler (Bilgecan Dede 2017):

 

 

Buradaki her bir siyah nokta, bu yukarıdaki işlem sonucunda sonlu değere giden sayılar oluyor. Yatay eksen kompleks sayının reel kısmı, dikey eksen sanal kısmı. Ancak, sonlu değere gitmeyen sayılar da çok garip. Mesela, siyah noktaların dışında kalan sayılar bu işlemlerin sonunda hep aynı oranda sonsuza doğru gidiyorlar, yani türevleri tanımlı. Burada o sonsuza giden sayıları türevlerine göre renklendirdim.

 

Mandelbrot kümesinin dışında kalan noktalar inanılmaz karmaşık ve çok güzeller. Bir yeri büyütünce muazzam şekiller çıkıyor. Rastgele bir yeri seçip \(4000\) kat büyütüyorum:

 

Son görüntünün renklerini değiştirip buraya daha yüksek kaliteli ekledim.

Kollardan birini bir kat daha büyütüyorum:

Peki, başka rastgele bir yeri seçiyorum ve \(260.000\) kat büyütüyorum:

Son şekil böyle güzel bir şekil:

Mandelbrot kümesi aynı lojistik harita gibi kendini tekrar ediyor. Mesela, bir yeri seçip \(5 \times 10^{12}\) kez büyütüyorum. Kümenin şekli tekrar karşıma çıktı:

 

Burada büyütmeleri durduruyorum. İnternette çok çok fazla video var. Mesela bu videoyu yapmak dört hafta sürmüş. Videonun sonundaki görüntü \(10^{227}\) kat büyütülmüş!

 

 

Yukarıdaki lojistik harita ile Mandelbrot kümesi ne alaka? Çok alaka. Mandelbrot kümesindeki sayıları sadece reel alırsanız, lojistik haritayı elde ediyorsunuz. Mandelbrot kümesindeki büyük siyah kardioid, lojistik haritanın tek çizgi haline denk geliyor. İlk çatallandığı yer, Mandelbrot kümesinin daha küçük dairesine denk geliyor. Mandelbrot kümesinde seçtiğiniz \(c\) ile lojistik haritadaki \(r\) arasında şöyle bir bağlantı var:

\(c = \frac{r}{2}\left(1 – \frac{r}{2}\right)\)

Bu animasyonda lojistik harita ve Mandelbrot kümesi arasındaki ilişki daha açık görülüyor:

 

Animasyon, Rymaer (Youtube – Wiki) tarafından yapılmış.

 

Yukarıdaki denklemde \(z_{n+1} = z_n^2 + c\) yerine \(z_{n+1} = z_n^3 + c\) olsaydı, yani sayının küpünü alsaydık dengeye gelen sayıların kümesi nasıl görünürdü? Şöyle:

 

Bu görsel, üstel (bundan sonra üstele \(d\) diyeceğim) 3 olduğu zaman sonsuza gitmeyen kompleks sayılar. Önceki Mandelbrot kümesinde olduğu gibi bu kümenin dışında kalan sayıların sonsuz derecede kompleksliliği var. Burada tekrar türevlere göre renklendirdim:

 

 

Bu animasyonda da \(z_{n+1} = z_n^d + c\) denkleminde, \(d\)’yi yaklaşık 0’dan 5’e götürdükçe dengeye ulaşan sayıları işaretledim. Bu dengeye ulaşan sayıların kümesi böyle görünüyor.

 

 

Bir gözlem: Mandelbrot kümesinde (\(d = 2\) olduğu durum) tam ortadaki kalp şeklindeki eğriyi fark etmişsinizdir. \(d = 3\) götürünce tekrar bir kalp şekli var gibi. Bunlar cycloid eğrileri ile ilgili olabilirler mi?

Evet, bunlar tam olarak cycloid eğrileri!

Cycloid eğrilerini bu linkte yazmıştım. Pekâlâ… Tam olarak nasıl cycloid eğrisi oluyor bunlar? Sonuç olarak fonksiyonumuz şöyle:

\(f(z) = z^d + c\)

Ve bu kümenin içindeki sayılarla ilgileniyoruz. Bunları yazarken acı biber turşusu yiyordum söylemesi ayıp, biber ne acı çıktı lan. Ağzım yanıyor şu anda. Of of. Bu fonksiyonun türevi 1’den fazla olduğunda sayılar sonsuza gidecek, 1’den küçük olan yerler de bu siyah noktalar. \(|f'(z)| \leq 1\). En büyük alanın sınırını (daha küçük alanlar da yine cycloid eğrisi ile kapalı), \(|f'(z)| = 1\) şeklinde düşünebilirim.

\((d) |z|^{d-1} = 1 \rightarrow |z| = \displaystyle{\frac{1}{d^{1/(d-1)}}}\)

Bu kümenin içinde kalan noktalar (yukarıdaki fonksiyondan);

\(c = f(z) – z^d = z – z^d\)

Halen yanıyor ya biber ne çıktı öyle. Kompleks sayıları argüman ve açıları cinsinden yazarsam (\(z = |z| e^{i \theta}\)) :

\(c = |z| e^{i \theta} – |z|^d e^{i \theta d} = \displaystyle{\frac{1}{d^{1/(d-1)}}e^{i \theta}}  – \displaystyle{\frac{1}{d^{d/(d-1)}}  e^{i \theta d}      }\)

Son olarak, Euler bağıntısını kullanırsam (\(e^{i x} = \cos x + i \sin x\)):

\(c = \left(\displaystyle{\frac{\cos\theta}{d^{1/(d-1)}} } – \displaystyle{\frac{\cos (\theta d)}{d^{d/(d-1)}}} \right) + i \left(\displaystyle{\frac{\sin\theta}{d^{1/(d-1)}} } – \displaystyle{\frac{\sin (\theta d)}{d^{d/(d-1)}}} \right) \)

\(c\)’nin uzaklığının karesini bulduğumda da, şu ifadeye ulaşıyorum:

\(|c|^2 =  \left(\displaystyle{\frac{1}{d^{1/(d-1)}}} \right)^2 + \left(\displaystyle{\frac{1}{d^{d/(d-1)}}}\right)^2 – \left( \displaystyle{\frac{2}{d^{\frac{-d-1}{d-1}}}}  \right) \cos\big((d-1)\theta\big)\)

Bu da, cycloid eğrisinden başka bir şey değil! (Cycloid yazımdaki \(\rho\) denklemi ile karşılaştırın) Bu cycloid eğrisinde içteki çemberin yarıçapını, yukarıdaki cycloid denkleminden

\(r = \left( \frac{1}{d^{1/(d-1)}} – \frac{1}{d^{d/(d-1)}} \right)\)

olarak bulabilirim. Dış çemberi de, \(|z|^{d-1} = 2\)’den (cycloid’in iki katı),

\(R = 2^{1/(d-1)}\)

olarak bulabilirim. \(d = 2\)’den \(d = 7\)’ye kadar, en büyük kümenin cycloid eğrileri, içteki çember ve en dıştaki çemberleri şu şekilde gösteriyorum:

 

Şuraya da animasyonunu koyuyorum:

 

 

Evet, tahmin edeceğiniz üzere, \(d\) çok büyük değerler aldıkça, (\(d \rightarrow \infty\)) iç yarıçap ve dış yarıçap 1’e gidiyor ve birim çember oluyorlar! Ya çok güzel gerçekten… Sevinçten Mandelbrot bulutunu yiyecem şimdi. Bu yaptığım hesap en büyük cycloid eğrisi için idi. Dikkat ettiyseniz, daha küçük olan siyah alanlar da cycloid eğrisi. Bunun ispatına şu anda girişmek istemiyorum. Yukarıdaki yaptığım hesapları \(f(f(z)) = (z^d + c)^d + c\) denkleminde yaparsanız daha küçük olan cycloid eğrilerini bulacaksınız. Bir iterasyon, \(f(f(f(z))) = ((z^d + c)^d + c)^d + c\) daha yaparsanız ondan bir küçük cycloid eğrilerini bulacaksınız vs. Sonradan zamanım olursa buraya iki tane daha iterasyon sonrası cycloid eğrisini bulmayı koyarım.

Son olarak, inanmayacaksınız ama Mandelbrot kümesi kapalı bir eğri! Evet, belirli bir uzunluğu ve alanı var. Aylar süren hesaplamalar sonrası bu sitede Mandelbrot kümesinin alanı \(\%95\) yaklaşıklıkla \(1,5065918849\) bulunmuş. [1]

Mandelbrot kümesi, Julia kümesi denilen daha genel bir kümenin alt kümesi. Julia kümesi çok daha karmaşık. O da başka bir yazıya artık… Başlangıç değerlerini biraz değiştirince Julia kümesine geçiyoruz. Burada bir Julia kümesi çıkardım:

Tam ortasını yaklaştırdım:

Yukarıdaki Julia kümesinin ortası.

 

Julia kümesinden söz açılmışken, Julia kümesi ile ilgili yaptığım şu iki görseli paylaşmadan edemeyeceğim:

 

Yukarıdaki Julia kümesinden bir detay.

Tamam yeter. Julia kümeleri artık başka bir yazıya…

Bu kadar tartışmadan sonra Mandelbrot kümemi süpüreyim de, intihal yapan siteler şimdi sahipsiz görüp çalmasınlar (beter olun).

 

Yazı ve animasyonlar: Bilgecan Dede

 

[1] http://www.foerstemann.name/dokuwiki/doku.php?id=numerical_estimation_of_the_area_of_the_mandelbrot_set_2012

 

Save

Mandelbrot & Julia Kümeleri ve Fraktaller” için 9 yorum

  • 21 Eylül 2017 tarihinde, saat 13:38
    Permalink

    Harika bir paylaşım olmuş emeğine sağlık. Mandelbrot kümesi nasıl yapılıyor tamamen animasyon teknikleriylemi yoksa elektrikli bir cihaz mı kullanılıyor şekiller çok güzel bunu merak ettim.

    Yanıtla
    • 22 Ekim 2017 tarihinde, saat 06:53
      Permalink

      Tesekkurler! 🙂 Animasyonlari Python ve Mathematica’da kodladim. Ama, istediginiz herhangi bir programlama dilinde yapabilirsiniz.

      Yanıtla
  • 18 Ekim 2017 tarihinde, saat 02:22
    Permalink

    süper yazı 🙂

    (yemeyeydin o kadar biberi ayı mısın?)

    Yanıtla
    • 22 Ekim 2017 tarihinde, saat 06:54
      Permalink

      Tesekkurler! 🙂 Yedim, ne yapayim. Birak gormeyi, aci biber dusununce agzim sulaniyor.

      Sadece son cumleden cikarimim: sanirim ayiyim evet.

      Yanıtla
  • 30 Kasım 2017 tarihinde, saat 21:59
    Permalink

    Eline beynine sağlık…

    Yanıtla
  • 1 Mart 2018 tarihinde, saat 19:32
    Permalink

    En son kısımda birden aklıma geldi. Acaba Julia Programlama dili ile Julia Kümesi arasında bir bağlantı var mı?

    Julia, yüksek seviye karmaşık algoritmalar ve matematik işlemleri için kullanılan bir programlama dili. Giriş seviyesindeki bazı kaynaklar Mandelbrot ve Julia kümeleri hakkında bilgilendirme yapıyor. Hepsini bir arada düşününce bağlantı varmış gibi hissettim.

    Teşekkürler yazı için, ellerinize sağlık… 🙂

    Yanıtla
    • 1 Nisan 2018 tarihinde, saat 10:18
      Permalink

      Rica ederim 🙂

      Evet, Julia programlama dilini biliyorum ve bir ara kullandim. Cok guzel bir dil. Benim tamamen gecmememin sebebi Python’da gayet rahat olmam 🙂

      Siz soyleyince isminin nereden geldigini ben de merak ettim ve soyle bir email’e rastladim:

      https://groups.google.com/forum/#!topic/julia-users/6xEWQz_mK10

      Ozellikle demisler ki “isim fraktaldan gelmiyor” (Steven J. Johnson’un emailine bakin). Sadece Julia guzel bir isim oldugu icin koymuslar.

      Yanıtla
  • 8 Mayıs 2018 tarihinde, saat 14:50
    Permalink

    Yazınız gerçekten çok güzel olmuş 🙂 Julia kümesini maple da nasıl kodlayabilim ? Mandelbrot’u kodladım ama Julia yı oluştururken nasıl bi değişilik yapmalıyım?

    Yanıtla
    • 16 Mayıs 2018 tarihinde, saat 01:54
      Permalink

      Tesekkur ederim 🙂

      Julia kumesinin farki, bir sabit ile baslamasi.

      Maple kodlamadim, ancak pseudo kodu yazabilirim size:

      Baslangic d = dx + i dy sec (Mandelbrot kumesinden farki burasi, Mandelbrot kumesinde d = 0)
      maksimum_iterasyon sec
      Her bir (x,y) piksel icin;
      (
      z = x + i y
      iterasyon = 0
      (abs(z^2 + d) < 2) ve (iterasyon < maksimum_iterasyon) oldugu surece, ( z = z^2 + d iterasyon = iterasyon + 1 ) eger (iterasyon == maksimum_iterasyon) ise (x,y) noktasi Julia kumesine ait eger (iterasyon == maksimum_iterasyon) degil ise (x,y) noktasina (iterasyon/maksimum_iterasyon) ata )

      Julia kumesini yapabilirseniz, d = e^{i \theta} atayin. Cok guzel gorunuyor 🙂

      Umarim yardimci olabilmisimdir, daha da sorabilirsiniz.

      Burada 101. sayfada bir seyler buldum ama Maple'da Julia kumesi hazir geliyormus. Orasi eglenceli degil tabi 🙂

      http://homepages.neiu.edu/~zzeng/340/Fall16/Notes/340book.pdf

      Yanıtla

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

50Shares