Fractals zelf doen:
Bifurcatie diagram volgens Collet
In zijn boek "Fractals. Meetkundige figuren in eindeloze herhaling" beschrijft Prof. Hans Lauwerier (1923 - 1997) een aantal fractals. Hierbij zijn programmaatjes beschikbaar die zijn geschreven in een variant van BASIC, die vandaag de dag niet meer wordt gebruikt. Omdat de code te leuk is om te worden vergeten heb ik die omgezet in JavaScript.
Op deze pagina wordt programma COLLET (pag. 153 van het boek) gebruikt. Dit programma tekent een Bifurcatie diagram
van de geremde groei, in het Model van Verhulst. Dit gaat met de functie
xn+1 = a·xn·(1 - xn)
(pag. 96). Klik HIER voor een preview (Let op: de berekening
duurt lang).
Voor a < 2.9 verloopt de functie stabiel. In het interval 2.9 ≤ a ≤ 4 is er een overgang van stabiliteit naar
compleet chaotisch gedrag bij a > 4.
De punten waar een splitsing te zien is, heten bifurcatie. Dat is afgeleid van de Latijnse woorden voor twee (bi)
en vork (furca). Collet is de naam van een van de eerste onderzoekers die zich met deze materie heeft bezig
gehouden.
De figuur lijkt veel op de Fractal van Feigenbaum,
die feitelijk ook een bifurcatie diagram is. Het verschil zit in formule: Feigenbaum gebruikt
xn+1 = xn2 + c
, waarbij x
en c reële getallen zijn. Als je voor x complexe getallen neemt, en voor c een complex of reëel getal, ontstaan de
fractals van Julia en
Mandelbrot.
Onderstaande uitleg bevat wat jargon. Dat komt aan de orde op mijn
site over fractals.
Belangrijke parameters van het programma zijn: svgW en svgH (afmetingen van de figuur, in het voorbeeld 760
× 570 beeldpunten) en NMAX (Aantal stappen, = 600). Verder zijn er parameters YM (Schaalfactor voor de
verticale as, = 240), A1 en A2 (Beginpunt resp. eindpunt van het bifurcatieinterval, = 2.9 resp. 4). Al deze
parameters kun je wijzigen om de invloed op de uitkomst te onderzoeken. Maar probeer ook eens om op andere plaatsen in de
code te wijzigen …!
Het JavaScript-programma is als volgt opgebouwd:
- De function SVGleader() zet de (openings-)<svg>-tag in elkaar. De variabelen svgW en svgH bepalen de grootte van de plot.
- Vervolgens gaat het programma rekenen. Dat doet de function Collet(), die de resultaten (middelpunten van de cirkeltjes waarmee de puntjes worden getekend) aflevert in de arrays X[ ] en Y[ ].
- De lengte van de arrays X[ ] en Y[ ] hangt af van het aantal rekenstappen NMAX. Het is dynamisch
geïmplementeerd, zodat de beschikbare geheugenruimte in principe bepalend is voor de maximale waarde van NMAX.
De praktijk is echter iets weerbarstiger. - Het rekenproces is erg traag. In het voorbeeld worden 600 × 400 = 24 000 punten uitgerekend. Dat vraagt tijd. Op een PC kun je probleemloos tot NMAX = 1200 gaan. Dat is getest op mijn Windows-PC (64-bits, 8 GB geheugen, beeldscherm 1920 × 1080). Op een tablet (Android, 32-bits, 3 GB geheugen, beeldscherm 1280 × 800) is NMAX = 600, zoals gebruikt in het voorbeeld, ongeveer het maximum haalbare.
- De parameter YM schaalt de figuur in verticale richting op, zodat er een zinvolle plot ontstaat. Wees er op bedacht dat de plot in horizontale richting mee vervormt als je YM verandert. Dit wordt veroorzaakt door de manier waarop de figuur wordt verschaald naar de viewport op het scherm.
- Het progamma gebruikt intern de variable AA. Het is de representatie van de factor a uit de formule. Deze wordt
in het rekenproces steeds opnieuw bepaald. Een paar interessante waarden van a staan in de tabel.
a Beschrijving 2.9 Limietpunt 3.0 Overgang naar 2 takken 3.2 2 takken 3.5 4 takken 3.74 5 takken 3.83 3 takken 4.0 Volledige chaos - Zodra de berekeningen klaar zijn, start SVGpunten(). Deze function schaalt de punten (lees: de hele plot) op naar de 90% van de afmetingen van de SVG-viewport. Daarna wordt de oorsprong van de plot verplaatst van de oorsprong van de viewport (daar rekent BASIC mee) naar de linker bovenhoek (daar rekent SVG mee).
- De function SVGtrailer() zet als laatste een melding boven de plot met daarin de parameter NMAX.
- Bovengenoemde JavaScript-functions worden achter elkaar uitgevoerd door de function toonFiguur(), die automatisch wordt gestart bij het laden van de pagina, via window.onload.
- Merk op dat het programma geen enkele voorziening heeft om fouten op te vangen.
Gebruiken:
Om met de code te spelen moet je deze downloaden naar je eigen computer en uitpakken. Start collet.htm door er op
te klikken, gebruik zo nodig een lokale webserver. Je hebt meteen een werkend programma.
Als je met de parameters gaat spelen, zul je vaak de variabelen ShX en ShY moeten aanpassen om de plot in de
viewport te houden.
Raadpleeg het item Een workflow voor het ontwikkelen van JavaScript, in het bijzonder
de opmerkingen over hoe je lokaal kunt werken (dus zonder steeds te hoeven uploaden naar de servers van je webhost).
Vereiste schermgrootte is 800 × 710 pixels. De toepassing op deze site maakt SVG-code aan, die wordt getoond
door de inhoud van een <svg>-tag aan te passen.
Downloaden:
Druk op de knop:
File: voorb714.zip, 1993 bytes.