Mandelbrot-Menge (Praktische Berechnung)
Die grafische Darstellung der Mandelbrot-Menge und ihrer Strukturen im Randbereich ist nur mittels Computer durch sogenannte Fraktalgeneratoren möglich. Dabei entspricht jeder Bildpunkt einer Zahl der komplexen Ebene. Der Computer ermittelt für alle Bildpunkte, ob die zugehörigen Folgen divergieren oder nicht. Sobald der Betrag eines Folgengliedes die Fluchtgrenze überschreitet, ist klar, dass die Folge divergiert; die Iterationszahl kann als Maß für den Divergenzgrad dienen. Die Bildpunkte werden nach einer Farbtabelle eingefärbt, die jeder Iterationszahl eine Farbe zuordnet.[1]
Für harmonische Farbübergänge wird in der Praxis ein Fluchtradius gewählt, da andernfalls die Breite der Farbstreifen zu sehr oszilliert. Je größer der Fluchtradius gewählt wird, desto besser entsprechen die Farbgrenzen den Äquipotentiallinien, die sich ergeben, wenn die Mandelbrot-Menge als elektrisch geladener Leiter interpretiert wird. Für kontinuierliche Farbverläufe, wie in der obigen Galerie einer Zoomfahrt, ist es erforderlich, entweder die genaue Fluchtzeit zu ermitteln, bei der der Fluchtradius gerade erreicht wird, oder den Abstand zum Rand der Menge abzuschätzen.[2]
Da die Anzahl der Iterationsschritte nach der die Fluchtgrenze überschritten wird, beliebig groß sein kann, muss als Abbruchkriterium eine maximale Iterationszahl festgelegt werden. Alle Zahlen deren Folgen danach einen Fluchtradius noch nicht erreicht haben, werden zur Menge gezählt. Je geringer der Abstand von zum Rand der Menge ist, desto größer ist in der Regel die Iterationszahl bei der erreicht oder überschritten wird. Je stärker die Vergrößerung ist, mit der der Rand dargestellt wird, desto größer muss die maximale Iterationszahl gewählt werden, und umso mehr Rechenzeit ist nötig.
Ein erheblicher Teil der Rechenzeit wird dort benötigt, wo die Zahlenfolge nicht divergiert. Moderne Programme versuchen daher, die Rechenzeit an diesen Stellen durch verschiedene Verfahren zu verkürzen. Eine Möglichkeit besteht darin, die Berechnung abzubrechen, sobald die Zahlenfolge konvergiert oder in einem periodischen Zyklus gefangen ist. Andere Programme nutzen aus, dass das Innere einer geschlossenen Kurve automatisch in liegt, wenn der Randbereits zu gehört.[3]
Grafisch besonders reizvoll ist die Darstellung des Randes von mit seinem Formenreichtum. Je stärker die gewählte Vergrößerung ist, umso komplexere Strukturen lassen sich dort finden. Mit entsprechenden Computerprogrammen lässt sich dieser Rand wie mit einem Mikroskop mit beliebiger Vergrößerung darstellen. Zur Untersuchung interessanter Strukturen sind häufig Vergrößerungen erforderlich, die mit hardwareunterstützten Datentypen aufgrund deren limitierter Genauigkeit nicht berechnet werden können. Manche Programme enthalten daher Langzahlarithmetik-Datentypen mit beliebig wählbarer Genauigkeit. Damit sind (fast) beliebige Vergrößerungsfaktoren möglich.
Wenn der Fluchtradius groß genug ist, kann zur Ermittlung der Fluchtzeit anstelle der eigentlichen Folge mit die vereinfachte Folge mit betrachtet werden. Die ersten Folgenglieder sind dann und ganz allgemein ergibt sich Betrachtet man eine Iterationszahl bei der die Folge einen Fluchtradius erreicht oder überschreitet, so gilt und Bestimmt man nun die Fluchtzeit aus der Interpolation so ergibt sich mit [4][5]
Für erhält man die Fluchtzeit aus einer Korrektur (Normalisierung) der Iterationszahl Die äquivalente Gleichung weist auf die enge Beziehung der Potentialfunktionen und hin. Häufig wird das Potential als Grenzwert definiert; die Potentialfunktion zur Eulerschen Zahl mit wird nach George Green mit bezeichnet.[7][8]
Nähert sich dem Rand der Menge, so wird das Potential immer kleiner und erreicht am Rand den Grenzwert null. Daher kann der kürzeste Vektor vom Punkt zum Rand näherungsweise aus der Gleichung durch ein Skalarprodukt mit dem Gradientenvektor ermittelt werden. Man erhält so eine Lösung mit der Länge Aus und folgt die Distanzformel:[9][8]
Die ersten Polynome sind und die zugehörigen Ableitungensind und Alle weiteren Folgenglieder ergeben sich aus der Iterationsvorschrift und der Ableitungsregel
Um die Distanzformel einzusehen, kann wieder die vereinfachte Folge mit betrachtet werden. Die zugehörige Julia-Menge ist genau der Rand des Einheitskreises, und mit und ergibt sich
was in der Nähe des Einheitskreises eine gute Näherung für den Abstand zum Rand ist: ergibt und ergibt Wenn der wirkliche Abstand zum Rand gleich ist, so ergibt die Distanzformel den Wert
Es stimmt aber nicht, dass der Grenzwert gegen den wirklichen Abstand konvergiert, tatsächlich gelten nur schwächere Ungleichungen. Die Abschätzung kann mithilfe der lambertschen W-Funktion jedoch etwas verbessern werden, und mit erhält man:[11][12]

Prozessoren unterstützen in Hardware die Berechnung mit typischerweise 32-bit- und 64-bit-Gleitkommazahlen. Dies ermöglicht es, in die Mandelbrot-Menge etwa um den Faktor 1012 bis 1013 hineinzuzoomen, bevor benachbarte Pixel keine unterschiedlichen Startwerte mehr annehmen können (und damit Fehler durch Blockartefakte offensichtlich werden).
Ab diesem Punkt reicht die Genauigkeit der in Hardware implementierten Arithmetik nicht mehr aus. Man ist gezwungen, auf in Software implementierte Routinen für hochgenaue Arithmetik auszuweichen, was bei aktuellen Prozessoren zu einem immensen Geschwindigkeitseinbruch führt.
Man kann diesen deutlich durch Nutzen von Störungsrechnung reduzieren. Diese Methode wurde 2013 von Kevin Martin beschrieben und 2021 von Zhuoran Yu um eine automatische Fehlerkorrektur erweitert.[13][14]
Dazu wird ein (möglichst nicht divergenter) Referenzpunkt in hochgenauer Arithmetik durchgerechnet und die zugehörige Referenzserie in einfacher oder doppelter Genauigkeit aufgezeichnet:[15]
Für in der direkten Nähe liegende Punkte würde sich die Serie ergeben:
Man will nun die Abweichung indirekt ermitteln, um die direkte Berechnung der Serie zu vermeiden. Dabei gilt:
- für die Berechnung des Referenzpunktes und
- mit und für die Berechnung des Nachbarpunktes.
Setzt man ein, ergibt sich
Man betrachtet die beiden äußeren Terme
- und multipliziert aus
- und setzt
- und löst die Klammern auf und kürzt
- und erhält
Wegen und ist auch Mit der abgespeicherten Referenzserie können die Abweichungen der Reihe nach berechnet werden:
Solange diese Terme klein bleiben, verhält sich ähnlich wie Insbesondere bleibt die Serie beschränkt, wenn die Referenzserie und die Abweichungen beschränkt sind. Wenn die Abweichungen jedoch zu groß werden, kann das zu Fehlern in der Darstellung (Glitches) führen. Im Prinzip kann man dann auf einen günstigeren Referenzpunkt innerhalb der Referenzserie ausweichen: Liegt ein Punkt näher am Referenzpunkt als am aktuellen Referenzpunkt so kann er auch durch dargestellt und die Abweichung aus der Differenz berechnet werden. Allerdings verliert man bei einer solchen Subtraktion aufgrund der Auslöschung die notwendige Genauigkeit. Nur beim ersten Referenzpunkt passiert das nicht, und die Abweichung ergibt sich zu Man kann somit die Referenzserie zurücksetzen, wenn gilt, d. h. wenn der Abstand von zu kleiner als der Abstand von zu ist. Dieses gelegentliche Zurücksetzen der Referenzserie (Rebasing) hält die Abweichungen so klein wie möglich.
- Praktische Anwendung
Das Programm „Kalles Fraktaler“ basiert auf diesem Ansatz, und die bilineare Approximation ermöglicht noch leistungsfähigere Fraktalgeneratoren. Die Iterationsvorschrift lässt sich linearisieren, wenn gilt, d. h. wenn viel kleiner als ist und man in der Summe vernachlässigen kann.[16]Benachbarte Linearisierungen lassen sich zur bilinearen Gleichung zusammenfassen.[17] Die Koeffizienten und werden vorab berechnet und dienen während der Iteration als Abkürzung, um viele Iterationen zu überspringen, wenn gilt, d. h. wenn sehr viel kleiner als ist. Häufig können über 90 % der Iterationen übersprungen werden, was die Berechnung extrem beschleunigt.[18][19]
- Probleme
- Der verwendete Referenzpunkt sollte möglichst innerhalb der zu untersuchenden Iterationen nicht divergieren, da die Nachbarpunkte maximal bis zu dem Abbruch der Referenzserie untersucht werden können. Alle Punkte mit einer größeren Iterationszahl müssen erneut berechnet werden. Die Auswahl und das Verwerfen von sich als ungeeignet herausgestellten Referenzpunkten stellt eine Herausforderung dar.
- Für die Berechnung der Abweichungen wird keine hohe Genauigkeit benötigt, allerdings ist der Wertebereich von 64-bit-Gleitkommazahlen arg limitiert. Ab etwa 10300 muss man leider mit eigenen Mathematikroutinen arbeiten, die zwar nur eine 52/64 bit-Mantisse benötigen, aber deutlich langsamer als hartkodierte Gleitkomma-Operationen sind (die aber wesentlich schneller als Berechnungen mit langen Mantissen sind).[20][21]
- Man benötigt Speicherbandbreite für das Lesen der Referenzserie Die erste Verlangsamung gibt es, wenn diese nicht mehr in den L2-Cache passt, sehr viel langsamer wird es, wenn der L3-Cache nicht mehr ausreicht und auf den RAM zugegriffen werden muss.
- Es gibt Abweichungen zwischen der nativen Iteration mit und der Störungsrechnung basierend auf Sieht man sich das ganze genauer an, ist die Berechnung basierend auf meistens genauer, wenn die Referenzpunktberechnung hinreichend genau war (was mit Langzahlarithmetik für diesen einen Wert aber problemlos machbar ist).
Berechnungen nahmen beim Stand der Technik Ende der 1980er Jahre viel Zeit in Anspruch. Vergleichsweise zeigt dies eine Aufstellung durch die Anzahl der Iterationen, die verschiedene CPUs pro Sekunde durchführen konnten.
| CPU | Jahr | Genauigkeit (Software) | Geschwindigkeit
in Iterationen/sec |
Rechendauer für
8,8 Mrd. Iterationen |
|---|---|---|---|---|
| Z80 @1,75 MHz | 1987 | 32 bit Gleitkomma (1.) | 9 | 31 Jahre |
| Z80 @2,45 MHz | 32 bit Integer (2.) | 280 | 1 Jahr | |
| 80386 SX/20 + | 1992 | 32 bit Integer (3.) | 130.000 | 19 Stunden |
| 80 bit Gleitkomma (FPU) (3.) | 75.000 | 33 Stunden | ||
| 80 bit Gleitkomma (Emulation Borland) (3.) | 2.000 | 51 Tage | ||
| Pentium 90 | 1994 | 32 bit Integer (3.) | 1.450.000 | 1 Stunde 40 Minuten |
| 80 bit Gleitkomma (3.) | 2.900.000 | 50 Minuten | ||
| Xeon E5-2623 v3
× 2 (Dual Socket) |
2015 | 32 bit Gleitkomma (4.) | 50.000.000.000 | 0,177 Sekunden |
| 64 bit Gleitkomma (4.) | 25.000.000.000 | 0,35 Sekunden |
- Eingesetzte Software
- BASIC-Interpreter des KC 85/3
- Selbst geschriebener Assemblercode[22]
- Borland C++ mit integriertem Assembler, die Gleitkomma-Emulation dieses Compilers war vergleichsweise langsam[23]
- Visual Studio C++ mit Intel Intrinsics, Nutzung von AVX2 und Fused multiply-add, multithreaded, 2 Threads pro Core
- Eingesetzte Prozessoren
- Z80: 8-Bit-Prozessor ohne Hardware-Multiplikation
- 80386: 32-Bit-Prozessor mit Hardware-Multiplikation und Gleitkomma-Koprozessor
- Pentium: 32-Bit-Prozessor mit Hardware-Multiplikation und mit eingebautem Gleitkomma-Koprozessor
- Xeon E5-2623: Vektorbefehle, 4 Kerne/8 Threads pro Sockel
- ↑ Robert P. Munafo: Escape Radius. In: mrob.com. 1997 (englisch).
- ↑ Robert P. Munafo: Equipotential Lines. In: mrob.com. 2023 (englisch).
- ↑ Dieser Zusammenhang ergibt sich aus dem Maximumprinzip: Wenn jeder Randpunkt erfüllt, dann müssen auch alle inneren Punkte erfüllen.
- ↑ Inigo Quilez: Continuous iteration count. In: iquilezles.org. 2007 (englisch).
- ↑ Jussi Härkönen: On Smooth Fractal Coloring Techniques. (PDF; 14 MB) The Smooth Iteration Count Coloring. In: jussiharkonen.com. 2007, S. 14–26, archiviert vom (nicht mehr online verfügbar) am 18. Juni 2014 (englisch).
- ↑ Die Folge wächst für wie eine einfache Folge mit Der genaue Anfangswert verschwindet jedoch aus der Differenz und ist daher ohne Bedeutung.
- ↑ Arnaud Chéritat: Mandelbrot set. The potential. In: math.univ-toulouse.fr. 2016 (englisch).
- ↑ a b Kees van den Doel: Notes on Mandelbrot set (Draft). (PDF; 0,2 MB) Basics. In: persianney.com. 2018, S. 1–2 (englisch).
- ↑ Inigo Quilez: Computing the SDF of fractals. In: iquilezles.org. 2004 (englisch).
- ↑ Die Division durch und ist im Außenbereich immer möglich, da alle Nullstellen von und im Innenbereich liegen (vgl. die Sätze von Gauß-Lucas und Jensen).
- ↑ Mikael Hvidtfeldt Christensen: Distance Estimated 3D Fractals (V): The Mandelbulb & Different DE Approximations. The potential gradient approximation. In: blog.hvidtfeldts.net. 2011 (englisch).
- ↑ Yumei Dang, Louis Kauffman, Daniel Sandin: Hypercomplex Iterations, Distance Estimation and Higher Dimensional Fractals. (PDF; 4,1 MB) Distance Estimation in Complex Space. In: evl.uic.edu. 2002, S. 13–29 (englisch).
- ↑ Phil Thompson: Perturbation Theory and the Mandelbrot set. In: philthompson.me. 2022 (englisch).
- ↑ Robert P. Munafo: Perturbation Methods. In: mrob.com. 2023 (englisch).
- ↑ Robert P. Munafo: Derivative Extrapolation. In: mrob.com. 2023 (englisch).
- ↑ Liegt der Quotient unterhalb der Maschinengenauigkeit, dann ist der Rundungsfehler bei der Addition von genauso groß wie der Fehler durch die Linearisierung.
- ↑ Diese Idee lässt sich auf die Ableitung mit übertragen. Für erhält man und (Programmbeispiel).
- ↑ Claude Heiland-Allen: Kalles Fraktaler 2 +. In: mathr.co.uk. 2022 (englisch).
- ↑ Robert P. Munafo: Bivariate Linear Approximation. In: mrob.com. 2023 (englisch).
- ↑ Geoffroy Billotey: Fractalshades: Extended range floating points. In: github.io. 2023 (englisch).
- ↑ Robert P. Munafo: Floatexp. In: mrob.com. 2023 (englisch).
- ↑ der allerdings noch nicht das theoretische Limit darstellte, die verwendet Multiplikation war schnell, es gibt aber noch schnellere, siehe Multiplication 32 x 32 bit, base case
- ↑ Compiler, die direkte Bibliotheksaufrufe erzeugten und bei Vorhandensein einer 32-bit-CPU 32-bit-Befehle nutzten, waren deutlich schneller. Keine Messwerte mehr verfügbar.
Referenzfehler: <ref>-Tags existieren für die Gruppe A, jedoch wurde kein dazugehöriges <references group="A" />-Tag gefunden.