Mandelbrotmängden

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif
Bild 1a. Mandelbrotmängden, Mandelbrotfraktalen, är det helt svarta området i bilden. Resten kan sägas vara fraktalens aura. 1b. Delbild av övre högra kanten.
Bild 2. Vid en närmare studie ser man att gränslandet mellan mandelbrotmängden och auran har en mycket komplex struktur. På vissa ställen syns snarlika kopior av den ursprungliga figuren i mindre skala. (Eng. "minimandels".).
Bild 3. Ett ständigt återkommande tema är att det upprepas ett likartat mönster gång på gång i allt mindre skala. Mönstret försvinner ned i "svarta hål" och dessutom i serier där hålen upprepas i långa rader eller spiraler bredvid varandra. Mönstret varierar också allt efter hur stor skala som visas.
Bild 4. I normala fall testas om absolutbeloppet av z är mindre än två men det går även t ex som i bilden ovan använda absolutbeloppet av bara realdelen |(Re z = x)| < 2 eller likadant med y koordinaten. Man kan även addera upp båda eller hitta på något annat intressant, möjligheterna är många. Sådana variationer av fraktalen påverkar oftast inte utseendet på mängden i någon särskild utstäckning men kan däremot ge auran olika karaktär, i det här fallet ett blombladsliknande vågmönster där det annars bara är jämna kurvor.

Mandelbrotmängden är en berömd fraktal uppkallad efter den franske matematikern Benoît B. Mandelbrot.

Innehåll

Historik

Funktionen som ligger bakom Mandelbrotmängden upptäcktes ursprungligen år 1905 av den franske matematikern Pierre Fatou och studerades sedan vidare av Gaston Julia som under slutet av 1920-talet arbetade med metoder som itererar enkla komplexvärda funktioner. Julia upptäckte även de med mandelbrotmängden besläktade juliamängderna. Fatou och Julia undersökte främst konvergenser av enskilda parametrar; Julia skapade några bilder med låg upplösning för hand, men bättre visualiseringar skulle kräva datorkraft för de omfattande beräkningarna.

Benoît B. Mandelbrot var anställd vid IBM och arbetade där bland annat med att försöka få bukt med vissa typer av brus, ett kaosfenomen kallat cantordamm, som uppstår vid datakommunikation vilket föranledde honom att experimentera med kaotiska förlopp. När han återupptäckte Julias arbeten hade han fördelen att vara bland de första med tillgång till nödvändig datorkraft. Där skapade han den första bilden av mandelbrotmängden, en svart/vit utskrift på papper. Han beskrev sina resultat år 1982.

Definition

Mandelbrotmängden är en mängd av punkter i det komplexa talplanet. Punkterna i mängden är de komplexa tal c för vilka den rekursiva talföljden zn, definierad av

z_{n+1} = z_{n}^2+c,

inte går mot oändligheten när startvärdet är z0 = 0.

För att beräkna en bild av Mandelbrotmängden antar man att varje bildpunkt motsvarar ett specifikt c, vilket genererar en specifik talföljd, och eftersom en en digital bild innehåller ett ändligt antal bildpunkter innebär det att att ändligt antal talföljder behöver undersökas vad gäller divergens.

Man kan visa att talföljden alltid divergerar om absolutbeloppet av något zn blir större än 2. Eftersom det är int är möjligt att utföra ett oändligt antal iterationer på ändlig tid brukar man i praktiken välja ett förutbestämt maximalt antal iterationer och om |zn| för en specifik talföljd inte överstigit 2 innan man når denna iteration så antar man att motsvarande c tillhör mandelbrotmängden, annars inte.

Formeln ovan är skriven med komplexa tal men det går även att uttrycka samma sak med reella tal. Istället för det komplexa talet c undersöker vi då punkten (a,b) och istället för den komplexa talföljden zn får vi då två reella talföljder xn och yn:

x_0 = 0\,
y_0 = 0\,
x_{n+1} = x_n^2 - y_n^2 + a\,
y_{n+1} = 2 x_n y_n + b\,

Formelns funktion

Först bestäms hur många gånger funktionen skall itereras eller det maximala beloppet indexräknaren n kan anta. Detta för att det inte går att exakt beräkna fraktalen utan vad som nås är en approximation av den. Det i sin tur beror på att vissa punkter kan ta närmare oändligt många iterationer på sig innan de lämnar systemet och det går ju inte att beräkna. Nästa steg är att välja en punkt (eller koordinatpar om du vill). Den motsvarar punkten i det komplexa talplanet som skall analyseras huruvida den är en punkt i mandelbrotmängden eller ej. Sedan sätts parametern z till att peka på origo, alltså nollpunkten. Även indexräknaren nollställs:

max n = noggrannhet   Antal iterationer
c = [a, b]            Punkten som analyseras
z(n = 0) = [0, 0].     Nollställ z och n

Detta är utgångsläget, för att sedan pröva om punkten c tillhör mandelbrotmängden så itereras formeln ovan och vid varje iteration så testas om absolutbeloppet av z har nått över gränsvärdet som anger storleken på fångstmängden som brukas, i det här fallet är det |z| < 2,0 som är fångstmängd. Om uttrycket är sant så görs nästa upprepning; i annat fall är z utanför radien 2,0 och kommer garanterat att gå mot oändligheten. Om z däremot inte går mot oändligheten så avbryts beräkningarna när indexräknaren n har nått sitt maxvärde "max n" och punkten antas vara en delmängd av mandelbrotmängden. (Det betyder att punkten ligger inom det svarta området i bild 1a. Det stora cirkelsegmentet som syns lite otydligt längst till vänster i bilden motsvarar |z| == 2.0, och är gränsen för var z har fallit ur fångstmängden efter den första iterationen. Nästa kurva i ordningen motsvarar den andra upprepningen o.s.v.)

För att beräkna absolutbeloppet av z så kvadreras x och y sedan dras roten ur summan:

Absolutbelopp; (två dimensioner)
|z| = sqrt(x² + y²)
Jämför; Pythagoras sats, längden på hypotenusan.

Men då |z| < max är analogt med |z|² < max² så gäller alltså även (x² + y²) < max² vilket innebär att det går att undvika beräkningsmödan i rotutradgningen och testa direkt på max², (i det här fallet 4,0), i stället (att beräkna fraktaler är väldigt processkrävande så ingenting görs i onödan).

Algoritm

Nu räcker det alltså inte med bara en formel utan det behövs även en algoritm. Algoritmens uppgifter är att dela in talplanet i ett rutnät som har samma upplösning som bildytan fraktalen skall visas på, utföra beräkningarna och testa villkor för fångstmängd och indexräknare och därefter upprepa eller avbryta. Rutnätet motsvarar koordinaterna (c) som skall approximeras och arbetas av punkt för punkt tills hela bilden är klar. Avbryts beräkningen på grund av att z fallit ur fångstmängden så betyder det att c pekar på en punkt i auran och ges då vanligtvis en färg från en predefinierad palett (egentligen en tabell), då används normalt det uppnådda värdet på n som index när färgen hämtas ur tabellen. Sedan skrivs punkten dit i den aktuella färgen vid koordinaten c. Uppnår indexräknaren däremot maxvärdet så skrivs vanligtvis en svart punkt dit för att markera att den tillhör mandelbrotmängden.

Pseudokod (där operanderna är i normaltext och operatorerna i fetstil) .

Räkna b från -2,0 till 2,0
  Räkna a från -2,0 till 2,0
    Sätt c till [a, b]
    Sätt z till [0, 0]
    Sätt n till 0
    Om |z| < 2 Och n < max n
      Sätt z till z² + c
      Öka n med 1
    Upprepa
    Sätt aktuell färg till n
    Skriv_pixel [a, b]
  Nästa a
Nästa b

Bildgalleri

Bild av juliamängden, på bildsidan finns en fördjupning där man kan läsa om tekniken som skapat bilderna på sidan.
Högupplöst bild av mandelbrotmängden


Externa länkar

Personliga verktyg