Hrvatski matematički elektronski časopis math.e | |
http://www.math.hr/~mathe/ |
Eksperimentalno određivanje fraktalne dimenzije
Hrvoje Eklić
U sklopu kolegija "Uvod u matematičku teoriju kaosa za inženjere", koji na Fakultetu elektrotehnike i računarstva u Zagrebu predaje prof.dr.sc. Mervan Pašić, studenti se upoznaju s pojmom fraktalne dimenzije i s metodama njezinog računanja na primjerima klasičnih fraktala. U ovom radu prikazat ćemo vlastiti program za eksperimentalno određivanje fraktalne dimenzije klasičnih fraktala kao i skupova fraktalnog tipa koji se pojavljuju u prirodi. Pomoću programa moguće je na interaktivan način odrediti fraktalnu dimenziju svih poznatijih fraktala, ali moguće je odrediti i aproksimaciju fraktalne dimenzije nekog otoka, dijela obale ili bilo koje slične razlomljene linije.
Tipičan primjer fraktala u prirodi izgled je bilo koje obale. Kad joj dužinu mjerimo npr. štapovima različitih dužina, dobit ćemo različite rezultate. Štapom najveće dužine izmjerit ćemo najmanju dužinu te obale. Kraćim štapom izmjerit ćemo veću dužinu obale jer ćemo mjerenjem uzeti u obzir i manje krivudavosti obalne linije (Slika 1). Vrlo kratkim štapom izmjerit ćemo dužinu obale koja može biti vrlo velika. To je tzv. paradoks dužine obale. Njega najbolje ilustrira sljedeći podatak: navodeći duljinu zajedničke granice između Španjolske i Portugala, španjolska enciklopedija navodi podatak od 987 km, a portugalska enciklopedija navodi 1214 km! Razlika je preko 200 km!
Slika 1: Mjerenje dužine obale štapovima različitih dužina |
Postoji još mnogo primjera fraktala u prirodi koja nas okružuje. Sve su to oblici kao što su: planine, stabla, oblaci, jezera i još mnogi drugi.
Otac fraktala je francuski matematičar
Benoit Mandelbrot.
Rođen je 20.11.1924. u Varšavi.
Početkom 70-ih godina prošlog stoljeća opisao je matematiku koja nam danas pomaže
pri analizi nepravilnosti u svijetu. Nove objekte nazvao je fraktali.
Taj naziv dolazi od latinske riječi fractus, što znači razlomljen,
slomljen, polomljen. Mandelbrot je dao i preciznu definiciju
fraktala:
"Fraktali su skupovi točaka kojima je fraktalna
dimenzija veća nego topološka dimenzija".
O fraktalnoj dimenziji bit će više riječi u sljedećem poglavlju. Osim te definicije, može se reći da su fraktali skupovi točaka koji imaju 3 važna svojstva: sličnost samome sebi (engl. self-similarity), fraktalnu dimenziju (engl. fractal dimension) i oblikovanje iteracijom (engl. formation by iteration). Sličnost samome sebi svojstvo je objekta da sliči sam sebi bez obzira koji njegov dio promatrali i koliko ga puta uvećali. Uvijek ćemo dobiti sliku koja sliči početnoj. Fraktalna dimenzija naziva se još i razlomljena dimenzija zato što ne mora biti cijeli broj, kao što je to npr. euklidska dimenzija. Ona opisuje i neka svojstva objekta kao što su izlomljenost i hrapavost. Specifično za fraktalnu dimenziju je to što ona ostaje konstantna bez obzira na mjerilo. Detaljnije objašnjenje fraktalne dimenzije nalazi se u sljedećem poglavlju. Oblikovanje iteracijom svojstvo je da se objekt može generirati nekim računskim ili geometrijskim postupkom koji se uzastopno ponavlja. Uglavnom, postoji početni objekt (engl. initiator) u koji se iterativno ugrađuju svojstva generatora (engl. generator).
Kako matematički odrediti dimenziju?
Uzmimo segment (jednodimenzionalni objekt) bilo koje duljine i podijelimo ga na 4 manja segmenta jednakih duljina:
Uzmimo sada neki dvodimenzionalni objekt, npr. kvadrat i podijelimo ga na 16 manjih jednakih kvadrata:
I na kraju, uzmimo trodimenzionalni objekt, npr. kocku, i podijelimo je na 64 manje jednake kocke:
Označimo sa s omjer duže i kraće stranice. U sva 3 primjera s je jednak 4 jer je kraći segment, odnosno kraća stranica kvadrata ili kocke, 4 puta kraća od dužeg segmenta, odnosno duže stranice kvadrata ili kocke. Označimo s P broj manjih elemenata (segmenata, pravokutnika ili kocaka). Broj P za prvi primjer (segment) je 4 jer smo početni segment podijelili na 4 kraća segmenta. Za drugi primjer (kvadrat) P je 16, a za treći primjer (kocku) P je 64. Možemo uočiti da općenito za P, s i dimenziju objekta D vrijedi:
Odavde se dobije:
Ta nam formula za sve prethodne primjere daje dobre rezultate.
Zaključak
Neke stvari u svijetu oko nas možemo dobro definirati pomoću 3 dimenzije klasičnog euklidskog prostora. Na Slici 2 prikazani su neki takvi primjeri: vlak koji se kreće po tračnicama ima samo jedan stupanj slobode, kreće se u jednoj dimenziji. Jedrilica koja plovi površinom jezera kreće se u dvodimenzionalnom prostoru. Jedino zrakoplov ima sva 3 stupnja slobode, tj. može se kretati u bilo kojem smjeru unutar trodimenzionalnog prostora.
Slika 2: Primjeri dimenzija i stupnjeva slobode u svijetu oko nas |
Slika 3: Problem dimenzije aluminijske folije |
d = log(P) / log(s),
gdje se objekt (skup) sastoji od P kopija samog sebe umanjenih za faktor s. Ova definicija vrijedi samo za sebi slične skupove. Za širu klasu skupova mogu se upotrijebiti Hausdorffova i "kutijna" dimenzija (box dimension).
Primjeri izračunavanja fraktalnih dimenzija
1. Cantorova prašina
d = log(P) / log(s) = log(2) / log(3) = 0.6309... .
Dobivena dimenzija zadovoljava i Mandelbrotovu definiciju fraktala, a to je da su fraktali geometrijske strukture kojima je fraktalna dimenzija veća nego topološka dimenzija. Topološka dimenzija Cantorove prašine jednaka je nuli. Fraktalna dimenzija Cantorove prašine približno iznosi 0.6309, što je veće od 0, dakle, Cantorova prašina je fraktal.2. Kochova krivulja
d = log(P) / log(s) = log(4) / log (3) = 1.2618595... .
Fraktalna dimenzija Kochove krivulje je, kao i kod Cantorove prašine, veća od topološke dimenzije. Topološka dimenzija Kochove krivulje je 1, a fraktalna dimenzija joj je veća od 1.3. Sierpinskijev trokut
d = log(P) / log(s) = log(3) / log(2) = 1.585... .
4. Minkowskijev fraktal
d = log(P) / log(s) = log(8) / log(4) = 1.5 .
5. Peanova krivulja
d = log(P) / log(s) = log(9) / log(3) = 2 .
Peanova krivulja ima topološku dimenziju 1, a fraktalnu dimenziju 2. To je primjer krivulje koja jest fraktal jer joj je fraktalna dimenzija veća od topološke, a fraktalna dimenzija joj je ipak cjelobrojna, a ne razlomak. To je zato što ova krivulja, kako broj iteracija teži u beskonačnost, prekriva cijelu površinu.Gornja slika prikazuje izgled prozora programa. Svi bitni dijelovi programa označeni su brojevima (1) do (9). Za dodatne upute o korištenju programa kliknite na (1) "Pomoć". U nastavku ćemo objašnjenje rada programa demonstrirati određivanjem fraktalne dimenzije Kochove krivulje.
Program za računanje fraktalne dimenzije koristi formulu d = log(P) / log(S). S je omjer veće i manje stranice, a P je omjer broja linija u (n+1)-voj iteraciji i n-toj iteraciji. U polju s parametrima (3) prije početka rada s programom potrebno je upisati početnu duljinu linije i S, tj. omjer veće i manje linije. Na primjer, ako u polju s parametrima (3) upišemo za dužinu linije 100, a za S upišemo 4, to znači da ćemo u n-toj iteraciji koristiti liniju dužine 100 piksela, a u (n+1)-oj iteraciji liniju dužine 25 piksela zato što je S = 4, a 100 / 4 = 25. Dakle, S zadajemo sami, a P ćemo dobiti nakon što neku liniju ili fraktal prijeđemo prvo linijom veće dužine, a zatim i linijom manje dužine. Na primjer, ako u n-toj iteraciji liniju ili fraktal prijeđemo s 3 duže linije, a u (n+1)-oj iteraciji s 15 linija koje su S puta kraće, tada P iznosi: P = 15 / 3 = 5. Za navedeni primjer S iznosi 4, a P iznosi 5. U tom slučaju fraktalna dimenzija bila bi d = log(P) / log(S) = log(5) / log(4) = 1.16 .
1. Učitati sliku Kochove krivulje klikom na gumb za učitavanje slike (2). Nakon pritiska na gumb u izborniku treba odabrati sliku (u jpg ili bmp formatu) koju treba učitati. Ta će se slika prikazati u okviru za sliku u središnjem dijelu prozora programa. Ovaj korak nije nužan, ali će olakšati daljnji rad s programom. Kochova krivulja relativno je jednostavna, ali za neke složenije linije (npr. linije neke obale ili otoka) gotovo da je nemoguće odrediti fraktalnu dimenziju bez slike te linije. Nakon učitavanja slike prozor programa izgleda kao na slici dolje.
2. Da bismo odredili fraktalnu dimenziju nekog fraktala, potrebno je uzeti 2 susjedne iteracije: n-tu i (n+1)-u. U konkretnom slučaju, slika koju smo učitali prikazuje Kochovu krivulju u 1. i 2. koraku iterativnog postupka. Međutim, isto tako mogli smo odabrati i 0. i 1. korak iteracije, ili 5. i 6., samo je važno da su to 2 susjedna koraka iterativnog postupka. Sada treba odrediti početnu dužinu linije. Za početnu dužinu linije treba uzeti dužinu jedne linije s gornje slike koja prikazuje Kochovu krivulju u 1. koraku iterativnog postupka. Da bismo odredili koliko ta dužina iznosi, potrebno je kliknuti na gumb u okviru (9) "Udaljenost": "Odaberi prvu točku". Nakon toga treba kliknuti mišem na početak linije kojoj želimo saznati dužinu. Sada pomaknemo kursor mišem do kraja te linije, a u okviru (9) "Udaljenost" na dnu okvira pisat će koliko ta dužina iznosi piksela. Taj broj upišemo u okvir (3) "Parametri", u polje "Duljina linije". Da bismo odredili S, tj. omjer dužina duže i kraće linije, isti postupak mjerenja dužine možemo ponoviti i za jednu kraću liniju, tj. za bilo koju liniju prikazanu na gornjoj slici iz 2. koraka iterativnog postupka. Sada, kada znamo dužinu i duže i kraće linije, u okvir (3) "Parametri" u polje S upišemo koliko iznosi omjer dužina duže i kraće linije. Međutim, kako se radi o Kochovoj krivulji, poznato je da je omjer dužina duže i kraće stranice jednak 3. Osim toga, omjer dužina vidljiv je i sa slike. U ovom slučaju mjerenje ne moramo provoditi i na dužoj i na kraćoj liniji, već je dosta izmjeriti dužinu duže linije, a S npr. odrediti sa slike.
3. Nakon učitavanja slike i određivanja početne dužine linije i parametra S, treba kliknuti na gumb (5) "n-ta iteracija". Tada cijeli fraktal u n-tom koraku iterativnog postupka (u konkretnom slučaju je n = 1) treba prijeći linijama. Početna dužina linije zadana je u okviru (3) "Parametri". Krenimo npr. slijeva nadesno. Kliknimo mišem na krajnje lijevu točku krajnje lijeve linije. Nakon toga kliknimo mišem na desnu točku te iste linije. Nakon toga na sljedeću točku u nizu i tako dalje dok ne dođemo do zadnje točke zadnje linije fraktala. U svakom trenutku program se brine da su sve linije koje ste povukli jednake dužine, i to upravo one početne zadane dužine linije. Popis svih točaka na koje ste kliknuli nalazi se na desnoj strani prozora programa, a označen je brojem (8). Nakon što ste cijeli fraktal prešli linijama prozor programa izgledat će slično kao slika dolje (sve linije koje prikazuju fraktal u 1. koraku iteracije bit će prekrivene crvenim linijama, a u popisu točaka (8) nalazit će se popis svih točaka na koje ste kliknuli).
U zadnjem koraku preostaje napraviti isto što i u prethodnom, ali sa S puta manjom dužinom linije i ovoga puta ne na n-tom, nego na (n+1)-om koraku iterativnog postupka. Prvo treba kliknuti na gumb (6) "(n+1)-a iteracija". Tada program dužinu linije kojom trebate prijeći cijeli fraktal ili liniju automatski smanjuje S puta. Nakon toga kliknite na prvu točku prve linije fraktala (bilo s lijeve, bilo s desne strane) u (n+1)-om koraku iteracije. U ovom konkretnom slučaju, budući da je n = 1, n+1 = 2. A slika Kochove krivulje u 2. koraku iterativnog postupka upravo je prikazana na desnoj polovici slike koju smo učitali. Nakon što linijama prekrijemo i cijelu Kochovu krivulju u 2. koraku iterativnog postupka, preostaje nam još samo mišem kliknuti na gumb (7) "Kraj". Tada će se u listi (8) s desne strane prozora programa ispisati rezultat: d = 1,2618595..., što je upravo očekivani rezultat jer smo u prethodnom proračunu za Kochovu krivulju izračunali da joj je fraktalna dimenzija jednaka 1.2618595. Ispisani rezultat prikazan je na donjoj slici.
2. Potrebno je odrediti parametre "Duljina linije" i "S". Duljina linije je početna dužina, tj. dužina dužeg "štapa" kojim ćemo prvo mjeriti dužinu obale. To je dužina "štapa" prikazanog na lijevoj polovici učitane slike. Pomoću alata za mjerenje udaljenosti u donjem desnom kutu prozora programa odredimo udaljenost od početka do kraja tog "štapa". Dužina "štapa" u ovom primjeru iznosi 60 piksela pa to upišemo u okvir s parametrima na lijevoj strani prozora programa. Nakon toga na isti način izmjerimo i dužinu kraćeg "štapa" prikazanog na desnoj polovici učitane slike. Ta dužina iznosi 30 piksela, što je dva puta kraće od dužine dužeg "štapa", pa je omjer dužina dužeg i kraćeg "štapa" S = 2. Vrijednost 2 upisujemo u odgovarajuće polje okvira s parametrima.
3. i 4. Sada kliknemo na gumb "n-ta iteracija" i prijeđemo cijelu sliku obale dužim "štapom" tako da krenemo od jedne strane obale (lijeve ili desne) i mišem slažemo linije preko linija obale tako dugo dok ne dođemo do druge strane obale. Nakon toga kliknemo na gumb "(n+1)-a iteracija" i ponovimo cijeli postupak sa S puta kraćom linijom. U konkretnom slučaju, prvo liniju obale prijeđemo linijama dužine 60 piksela, a nakon toga linijama dužine 30 piksela jer je S = 2. Kao što se vidi na gornjoj slici, da bismo obalu prekrili dužim štapovima, potrebno je 6 štapova, a da bismo obalu prekrili kraćim štapovima, potrebno je 15 štapova. Na kraju kliknemo na gumb "Kraj" i u listi na desnoj strani prozora pojavit će se rezultat: d = 1.3219... To je fraktalna dimenzija promatranog dijela obale. Što je fraktalna dimenzija nekog dijela obale veća, to je taj dio obale više krivudav, tj. "razvedeniji".
Napomena: Program je napisan za Microsoft Windows XP u programskom jeziku Visual Basic 6.0, te je potrebno imati instalirane Visual Basic Runtime kontrole. Njih je moguće pronaći na CD-u u svim odgovarajućim informatičkim časopisima ili ovdje.
[2] H.O.Peitigen, H.Jurgens, D.Saupe: Chaos and Fractals. New Frontiers of Science, Springer, Berlin, 1992.
[3] Vlatka Antončić, Andro Galinović: Galerija fraktala, Hrvatski matematički elektronski časopis "math.e", br. 2, 2004.
[4] Fractals and the Fractal Dimension, Vanderbilt University.
[5] C. Lanius: Fractal Dimension, Rice University.
[6] M.A. Connors:
Exploring Fractals, University of Massachusetts, Amherst.