Mandelbrotmenge Erzeugen und analysieren Mandelbrotmenge Erzeugen und analysieren Maturaarbeit von Martin Wirz Betreut durch Peter Hohler Kantonsschule Olten 2002 Mandelbrotmenge: erzeugen und analysieren Inhaltsverzeichnis 0 Inhaltsverzeichnis 1 Allgemeines zu Fraktalen.................................................................................................7 1.1 Einführung in die fraktale Geometrie 7 1.1.1 Aufbau eines Fraktals 7 1.1.2 Definition eines Fraktals 9 1.2 Dimension eines Fraktals 9 1.2.1 Berechnung der Dimension 9 2 Die Mandelbrotmenge.......................................................................................................11 2.1 Biographie von Benoit Mandelbrot 11 2.2 Die Mandelbrotmenge 12 2.2.1 Analyse der Mandelbrotmenge 13 2.2.1.1 Mathematische Definition 13 2.2.1.2 Achsensymmetrie 14 2.2.1.3 Iteration 14 2.2.1.3.1 Orbit 14 2.2.1.3.2 Iterationsgrenze 15 2.2.1.4 Startwert Z 0 18 2.2.1.5 Die Geleichung Z n +1 = Z nk + c 18 2.2.2 Die Juliamenge 2.2.2.1 Zusammenhang zwischen Julia- und Mandelbrotmenge 19 19 3 Programmieren der Mandelbrotmenge..........................................................................21 3.1 Aufbau des Algorithmus 21 3.2 FraCalc 23 3.2.1 FraCalc für Windows 24 3.2.2 FraCalc für den TI92plus 25 3.2.2.1 TIBasic Programm 25 3.2.2.2 Assembler Programm 26 4 Mathematische Hintergründe und Grundwissen...........................................................28 4.1 Iteration 28 4.2 Fixpunkt 28 4.3 Orbit 28 4.4 Fluchtpunkte/Gefangenenmenge 29 5. Zusammenfassung............................................................................................................30 6 Anhang...............................................................................................................................31 6.1 Literaturliste Anhang A 31 6.1.1 Bücher 31 6.1.1.1 Texte 31 6.1.2 Internet 31 6.1.3 Software 32 6.2 Sourcecode Anhang B 33 1 Allgemeines zu Fraktalen 1 Allgemeines zu Fraktalen 1.1 Einführung in die fraktale Geometrie Wolken sind keine Kugeln, Berge keine Kegel, Küstenlinien keine Kreise. Die Rinde ist nicht glatt - und auch der Blitz bahnt sich seinen Weg nicht gerade... Die Existenz solcher Formen fordert uns zum Studium dessen heraus, was Euklid als formlos beiseite lässt, führt uns zur Morphologie des Amorphen. Bisher sind die Mathematiker jedoch dieser Herausforderung ausgewichen. Durch die Entwicklung von Theorien, die keine Beziehung mehr zu sichtbaren Dingen aufweisen, haben sie sich von der Natur entfernt. Als Antwort darauf werden wir eine neue Geometrie der Natur entwickeln und ihren Nutzen auf verschiedenen Gebieten nachweisen. Diese neue Geometrie beschreibt viele der unregelmässigen und zersplitterten Formen um uns herum - und zwar mit einer Familie von Figuren, die wir Fraktale nennen werden... Benoit Mandelbrot 1975 Die fraktale Geometrie der Natur Die normale Geometrie ist schlecht an die Natur angepasst. Sie ist aus Punkten, Geraden, Kreisen oder Dreiecken aufgebaut. Doch diese Formen kommen in unserer Umwelt selten vor. Nur bei Gegenständen, die vom Menschen geschaffen wurden, kann man solche geometrischen Elemente erkennen. Will man das Blatt eines Baumes oder eine Wolke mit diesen geometrischen Formen beschreiben, müssen wir viele dieser Formen zusammensetzten. Ein simpler LEGO-Baukasten ist ein anschaulicher Vergleich: mit einfachen, vorgegebenen Elementen kann etwas Komplexes aufgebaut werden. Die fraktale Geometrie ersetzt die Grundbausteine unseres Baukasten durch Rechenvorschriften ,Algorithmen, die der jeweiligen Form angepasst sind. Mandelbrot, ein polnischer Mathematiker, hat anhand eines Beispiel verdeutlicht, wie zerklüftet unsere Welt in Wirklichkeit ist: „Wie lange ist die Küste Grossbritanniens?“1 . Wenn wir einen Atlas aufschlagen, nachmessen und mit dem Massstab umrechnen, kommen wir schnell auf eine Kilometerzahl. Nehme wir eine Karte mit einer grösseren Auflösung, erscheinen immer kleinere Buchten, diese Buchten haben aber wieder Vorsprünge und Einschnitte. Die Küstenlinie wird immer länger. Man kann dies bis zur Atomgrösse treiben. Mandelbrot kam zur Erkenntnis, dass Küstenlinien unendlich lang seien. Dies ist eine weitere Eigenschaft von fraktalen Gebilden. 1.1.1 Aufbau eines Fraktals Ein Fraktal zeichnet sich dadurch aus, dass gleiche Formen in verschiedensten Grössen immer wieder auftreten und ein beliebig kleiner Ausschnitt die gleiche Struktur wie das Originalobjekt aufweist. So ist eine einzelne Blumenkohlrose in ihrem Aussehen identisch zum ganzen Kohl, jedoch wesentlich kleiner. Bricht man von dem kleinen Teilblumenkohl wieder ein Segment weg, so entsteht ein neuer Blumenkohl, der zum ganzen Blumenkohl wieder ähnlich ist. Dies kann natürlich fast beliebig weitergeführt werden. In der Natur stösst 1 Die fraktale Geometrie der Natur. Benoit Mandelbrot, 1975 -7Maturaarbeit 2002, Martin Wirz 1 Allgemeines zu Fraktalen man allerdings an Grenzen. Rein mathematisch gesehen gibt es keine Grenzen. Die einzelnen Blumenkohlrosen sind theoretisch bis ins Unendliche dem Originalkohl ähnlich. Fraktale sind also immer selbstähnlich, d.h. die Gesamtstruktur eines Fraktals ist aus kleineren Strukturen zusammengesetzt, welche die gleiche Form wie das Original aufweisen. Eines der einfachsten Fraktale ist die Cantormenge (Abb. 1.1). Um dieses Fraktal zeichnen zu können, nimmt man eine Strecke und entfernt den mittleren Drittel. Bei den verbleibenden zwei Teilstrecken entfernt man wiederum das mittlere Drittelstück. Diese Prozedur lässt sich bis ins Unendliche weitertreiben. Wenn man nun ein Gebiet dieser Menge heraus zoomt erscheint eine Figur, welche zur Originalmenge selbstähnlich ist. Die Cantormenge ist demzufolge ein typisches Fraktal. Abb. 1.1 Die Cantormenge Ein weiteres, sehr berühmtes Fraktal ist die Kochsche Kurve (Abb 1.2). Der schwedische Mathematiker Helge von Koch publizierte dieses Fraktal bereits 1906. Die Grundfigur besteht bei diesem Fraktal aus vier gleich langen Strecken, die wie in Abbildung 1.2a angeordnet sind. Abb. 1.2a Grundfigur der Kochschen Kurve Abb. 1.2b Kochsche Kurve mit der Iteration 5 Ersetzt man in der Grundfigur jede Strecke durch einen zu der Grundfigur ähnlichen Steckenzug ,natürlich einen verkleinerten Streckenzug, so erhält man eine neue Form. Wiederholt man dies noch einigen Male, entsteht eine interessante selbstähnliche, also fraktale, Figur. Fraktale findet man oft in der Natur. Eines der schönsten Fraktale ist das Farnblatt (Abb 1.3). Es ist ebenfalls selbstähnlich. Jedes Teilblatt gleicht dem gesamten Blatt. Abb. 1.3 Ein fraktales Farnblatt. Erzeugt am Computer -8Maturaarbeit 2002, Martin Wirz 1 Allgemeines zu Fraktalen Warum die Natur auf selbstähnliche Formen zurückgreift ist leicht verständlich. Ein Blatt muss sehr komplex sein, um den hohen Anforderungen der Umwelt gerecht zu werden. Die Natur wählt auf natürliche Art den einfachsten Weg. Sie setzt immer und immer wieder dieselbe Grundform ein. So kann sie enorme Einsparungen im Bereich der Definition des Aussehens machen und gleichzeitig die Leistungsfähigkeit vergrössern, da alles nach einem ähnlichen Muster abläuft. Ähnliche Muster erkennt man auch im menschlichen Blutsystem oder in den Lungen. Sogar Bäume sind grob gesehn nach fraktalen Reglen aufgebaut (Abb 1.4). Die Verzweigungen der Äste geht bis ins Kleinste, ja sogar bis in die Blätter, immer weiter. Abb. 1.4 Fraktale Gebilde am Beispiel des Baumes Fraktale Formen dienen aber auch dazu, eine optimale Anpassung an die Umgebung zu bilden. Bei Bäumen geht es Oberirdisch um eine möglichst optimale Ausnutzung der Oberfläche . Dies ermöglicht ein Optimum an Absorption von Licht einerseits und Austausch von Stoffen (z.B. Wasser, CO2, und O2) andererseits. Unterirdisch sorgt das fraktale Wurzelgeflecht für eine möglichst grosse flächenmässige Erschliessung zur Gewinnung von Wasser und Mineralstoffen. 1.1.2 Definition eines Fraktals Der Name „Fraktal“ kommt von „fractus“ (lat. = gebrochen) und bezeichnet die Dimension dieser Gegenstände. Sie liegen zwischen zwei ganzen Zahlen. Der Begriff Fraktal trifft aber auch das Erscheinungsbild der Fraktale, die oft zerbrochen und stark zergliedert aussehen. 1.2 Dimension eines Fraktals Wie kann man sich eine gebrochene Dimension vorstellen? Geraden, glatte Flächen und Würfeln sind keine Fraktale. Sie haben die Dimensionen 1, 2 oder 3. Die meisten realen Gebilde haben aber Kerben, Einbuchtungen und Löcher. Sie füllen den Raum nicht ganz aus. Ihre Dimension liegt zwischen zwei und drei. 1.2.1 Berechnung der Dimension Eine Linie kann in N identische Teile zerlegt, also um den Faktor f = N1 verkleinert werden und sie bleibt trotzdem eine Linie. Auch bei zwei- und dreidimensionalen Figuren findet man eine entsprechende Skaleneigenschaft. Zerlegt man etwa ein Quadrat in N identische Teilquadrate, so wird jede Seite dieser Teile auf den Bruchteil f = 112 des ursprünglichen N -9Maturaarbeit 2002, Martin Wirz 1 Allgemeines zu Fraktalen Quadrats verkleinert. Die N Miniaturwürfel, die sich bei einer entsprechenden Zerlegung eines Würfels ergeben, werden auf f = 113 hinunterskaliert. N Die Formel lautet also: f = 1 N 1 D ; wobei f der Massstab ist, N die Anzahl der Teile und D die Dimension des Gebildes. Um die Dimension zu erhalten, braucht man lediglich diese Formel nach D aufzulösen. D= log( N ) log( 1f ) Der Skalierungsfaktor f beschreibt die Grössenverhältnisse von selbstähnlichen Objekten bei Ähnlichkeitstransformationen. Einen solchen Skalierungsfaktor sollte auch auf andere selbstähnliche Formen, also auf fraktale Gebilde, anwendbar sein. Die Kochsche Kurve ist ein gutes Beispiel. Die Kochsche Kurve wurde dadurch generiert, dass ein Liniensegment in N = 4 identische Teile zerlegt wurde. Jedes Teilstück besitzt eine Länge von f = 13 der ursprünglichen Länge. Die Dimension der Kochschen Kurve beträgt also: N) 4) D = log( = log( log( 3 ) = 1.26 log( 1 ) f D ist also eine gebrochene oder (nach Mandelbrot) fraktale Dimension. Eine gebrochene Dimension zwischen 1 und 2 charakterisiert ein Objekt zwischen Linie und Fläche. Länge der Linie: 1 Einheit (z.B. Kilometer); Massstab 1:3; Ergebnis: 3 Teile. Fläche des Quadrats: 1 quadratische Einheit (z.B. Quadratzentimeter); Massstab 1:3; Ergebnis: 9 Teile. Volumen des Würfels: 1 kubische Einheit (z.B. Kubikmeter); Massstab 1:3; Ergebnis: 27 Teile. Die Dimension der Linie beträgt: Dlinie = log( 3 ) log( 3 ) =1 Die Dimension des Quadrats beträgt: DQuadrat = Die Dimension des Würfels beträgt: DWürfel = log( 9 ) log( 3) log( 27 ) log( 3) =2 =3 - 10 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge 2. Die Mandelbrtomenge 2.1 Biographie von Benoit Mandelbrot Abb. 2.1 Benoit Mandelbrot Benoit Mandelbrot wurde 1924 in Polen geboren. Als Benoit 12 Jahre alt war, verliess seine Familie Polen und wanderte nach Paris aus. Benoit wurde von seinem Onkel, der Mathematikprofessor an einem französischen Collège war, unterrichtet. Der Einfluss seines Onkels war sowohl positiv wie auch negativ. Schon früh erlangte Mandelbrot gefallen an der Schönheit der Mathematik. Allerdings interessierte er sich nicht für die sonst übliche theoretische Mathematik. Im gefiel die angewandte Mathematik sowie die Geometrie. Sein Onkel war damit nicht einverstanden, da dieser Zugang zur Mathematik zu dieser Zeit sehr unkonventionell und neu war. Mandelbrot besuchte bis zum Anfang des 2. Weltkrieges ein Lycée in Paris. Während der Besetzung Paris zog seine Familie nach Tulle in Zentralfrankreich um. Der Krieg verhinderte einen regelmässigen Schulbesuch, so dass Mandelbrot sich vieles selbst beibringen musste. Diese ungewöhnliche Ausbildung erwies sich als einen grossen Vorteil. Sie erlaubte es ihm, seine unkonventionelle Denkweise zu fördern und half ihm, einen sehr geometrischen Zugang zur Mathematik zu entwickeln. Seine bemerkenswerte geometrische Intuition und sein Vorstellungsvermögen erlaubten ihm ungewöhnliche und neuartige Einsichten in mathematische Probleme zu erlangen. Nach bestandener Aufnahmeprüfung begann er 1944 an der Ecole Polytechnique zu studieren. Nachdem er sein Studium erfolgreich beendet hatte, entschloss er sich an das California Institute of Technology in den USA zu wechseln. Anschliessend ging er zum Institute of Advanced Study nach Princeton USA. 1955 kehrte Mandelbrot nach Frankreich zurück. In dieser Zeit lernte er seine zukünftige Frau Aillette Kagan kenne, welche er kurze Zeit später heiratete. Das schlechte Arbeitsklima unter den Wissenschaftlern in Frankreich bewog ihn 1958 endgültig in die USA auszuwandern. Hier begann er bei IBM in den berühmten Laboratorien in Yorktown Heights in New York State zu arbeiten. Bei IBM konnte Mandelbrot sehr vielen interessanten Ideen, welche ihn schon seit längerem beschäftigten, nachgehen. Er sagte, dass keine andere Universität ihm solche Freiheit in der Wahl der Forschungsthemen bieten könnte. 1970 arbeitete Mandelbrot im Watson Research Center von IBM, wo er zum ersten Mal die Mandelbrot-Menge grafisch darstellte. Dazu musste er nicht nur neue mathematische Ideen entwickeln, sondern auch eines der ersten Computerprogramme schreiben, welches Grafiken darzustellen vermag. Seine Arbeit veröffentlichte er in seinem Buch "Les objects fractal, forn, hasard et dimension" (1975) und ausführlicher in "The fractal geometry of nature" [1982]. Mandelbrot arbeitete auf vielen Gebieten. Es war eine bewusste Entscheidung in den jungen Jahren, Beiträge zu vielen unterschiedlichen Wissenszweigen zu leisten. Seine Vielseitigkeit - 11 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge ermöglichte es ihm, Fraktale überall zu finden: in der Physik, in chaotischen Systemen, in der Wirtschaft, in der Physiologie und in der Biologie. 2.2 Die Mandelbrotmenge Die Generierung von Fraktalen ist nicht beschränkt auf geometrische Regeln und Figuren. Ein Fraktal kann auch das Ergebnis einer mathematischen Abbildung sein. Das wohl berühmteste Beispiel eines Fraktals, welches auf diese Weise erzeugt wurde, ist das von Benoit Mandelbrot entdeckte sogenannte Apfelmännchen. Den Namen erlangt das Gebilde durch sein Aussehen. Die verschiedenen Ausbuchtungen gleichen apfelähnlichen Gebilden, zusammen sehen sie dann wie ein Männchen, ein Apfelmännchen, aus. Dieser Figur liegt einer sehr einfachen mathematischen Formel zugrunde. Z n+1 = Z n + c 2 Iteriert man diese Formel für eine bestimmte Zahl c aus der komplexen Ebene, wird man feststellen, dass das Ergebnis der Iterationen, also der Orbit, für gewisse c konvergiert, also gegen einen Wert strebt, und für die restlichen c divergiert, also über einen Grenzwert in Richtung Unendlich strebt. 2 Die c , für welche die Funktion Z n +1 = Z n + c beim Iterieren konvergieren, überschreiten einen Grenzwert nie, sie bleiben gefangen. Alle Zahlen c in der komplexen Ebene, welche divergieren, bilden die Gefangenenmenge. Die Gefangenenmenge wird auch als Mandelbrotmenge bezeichnet. Zeichnet man alle Punkte, welche in einer gewissen Iterationszahl den Grenzwert nicht überschreiten, in der Gausschen Zahlenebene ein, so entsteht eine Fraktal: Das Apfelmännchen mit seiner charakteristischen Figur (Abb. 2.2). Alle Punkte, die nicht divergieren, werden schwarz eingefärbt. Abb. 2.2 Grundfigur des Apfelmännchens Das Besondere and dieser Figur ist, dass ihr Rand nicht glatt, sondern fraktal, ist und bei näherem Hinzoomen (durch Vergrösserung eines Ausschnittes) einen unerschöpflichen Reichtum von selbstähnlichen Mustern und Strukturen offenbart. Je tiefer man in das Apfelmännchen hineinzoomt, desto einzigartiger werden die Figuren. An einigen Stellen findet man kleinere Arten von Apfelmännchen, die dem Original sehr ähnlich sind, aber dennoch nie eine exakte Kopie des Originals darstellen. Auch wenn die Mandelbrotmenge als Ganzes gesehen nicht selbstähnlich ist, besitzt sie doch eine annähernd selbstähnliche Unterstruktur, wie zum Beispiel Herzformen, - 12 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Seepferdchenschwänze und Wirbel in Wirbel mit unendlich feinen Strukturen (Abb. 2.3). Erstaunlich ist, dass diese einzigartige Figur aus einer einfachen quadratischen Gleichung resultiert. Auch wenn Teile der Mandelbrotmenge wie isolierte Punkte aussehen, ist die Menge in Wirklichkeit eine zusammenhängende Menge. Allerdings ist nicht bekannt, ob die Menge überall lokal zusammenhängend ist. Ein Kreis aus dem ein einziger Punkt entfernt wurde, ist immer noch zusammenhängend, jedoch nicht überall lokal zusammenhängend: Punkte auf verschiedenen Seiten der Lücke, egal wie eng sie auch zusammenliegen, sind nur noch über einen langen kreisförmigen Bogen zu erreichen. Aus der Theorie der Mandelbrotmenge erkennen wir, dass die Komplexität, die wir in vielen Naturphänomenen entdecken aus relativ einfachen Gesetzen hervorgehen kann. Es wird deutlich, dass komplexes Verhalten nicht nur von komplexen Gesetzen abhängt. Abb. 2.3 Zoom in die Mandelbrotmenge 2.2.1 Analyse der Mandelbrotmenge 2.2.1.1 Mathematische Definition 2 Iteriert man die Funktion Z n +1 = Z n + c mit c ∈ Komplexer Zahlen . Divergiert die Funktion nicht, so ist c ein Element der Mandelbrotmenge. Die Menge aller nichtdivergenten Punkte c ∈ Komplexer Zahlen bilden die Mandelbrotmenge M. Man definiert daher die ideale Mandelbrotmenge M M = {c ∈ C | lim c n → / ∞ } n→∞ Mit der Iterationsfunktion Z n +1 = f ( Z n ) = Z n + c Z , c ∈ C 2 Für die Darstellung am Computer muss man sich aber auf die realistische Mandelbrotmenge beschränken. M = {c ∈ C | c n < A, n ≤ N } Wobei A den Orbitalgrenzwert und N die Iterationstiefe angibt. Im Weiteren wird nur noch, sofern nichts anderes angegeben ist, die Iterationsfunktion 2 Z n +1 = f ( Z n ) = Z n + c Z , c ∈ C betrachtet. Zu beliebig anderen Iterationsvorschriften lassen sich aber genauso Mandelbrotmengen berechnen. - 13 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge 2.2.1.2 Achsensymmetrie2 Betrachtet man das Apfelmännchen, so liegt die Vermutung nahe, dass es achsensymmetrisch bezüglich der reellen Achse (x-Achse) ist. Zwei Punkte der Zahlenebene, die achsensymmetrisch zueinander sind, müssen drei Bedingungen erfüllen: Definition: REALTEIL =ˆ ℜ IMGINÄRTEI L =ˆ ℑ Punkt1 =ˆ P1 Puntk 2 =ˆ P2 Bedingung: ℜ( P1 ) = ℜ( P 2 ) ℑ( P1 ) = ℑ( P2 ) ℑ( P1 ) = −ℑ( P2 ) Solche Zahlen werden als konjugiert komplexe Zahlen c bezeichnet. Damit c ∈ M muss lim c n → / ∞ gelten (siehe oben). n →∞ Es sei c = a + ib dann gilt: f ( Z ) = c 2 + c = (a + ib) 2 + (a + ib) = (a 2 − b 2 + a ) + i (2ab + b) f ( Z ) = c 2 + c = (a − ib) 2 + (a − ib) = (a 2 − b 2 + a ) − i (2ab + b) Da c = a 2 + b 2 gilt, ist f ( Z ) = f ( Z ) . Es gilt auch f n ( Z ) = f n ( Z ) , _____ Da f ( Z ) = f ( Z ) ist und weil f (Z ) und f (Z ) im nächsten Iterationsschritt an Stelle von c für Z in f (Z ) eingesetzt werden. Damit ist c ∈ M , wenn c ∈ M gilt. Betrachtet man ein beliebiges c , so ergibt sich aus obiger Betrachtung c n = c n , das heisst, die Punkte entfernen sich gleich schnell von ihren Standort. 2.2.1.3 Iteration 2.2.1.3.1 Orbit Beim Iterieren eines einzelnen Punktes erkennt man schnell, ob er konvergiert, also zu M gehört oder ob er divergiert → ∞ . Beispiele von Orbits mit Z 0 = 0 c1 = 0.22 + 0.7i Die Funktion c1 => c ∉ M divergiert f (c) c 2 = −0.7 − 0.4i f (c) divergiert für c 2 => c ∉ M Die Funktion c3 = 0.22 + 0.7i f (c) konvergiert für c3 => c ∈ M Die Funktion 2 Beweis von http://www.schloesinger.de/deutsch/mandelbrot-_u_juliamengen - 14 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Wie schnell ein Punkt divergiert oder ob er ein Element der Mandelbrotmenge ist, hängt von seinen Koordinaten ab. Kleinste Veränderungen der Koordinaten können zu enormen Veränderungen des Orbits führen. Abb. 2.4 Verlauf des Orbits für 4 Punkte Die Abbildung 2.4 zeigt den Iterationsverlauf (Orbit) für vier verschiedene Punkte. Zwei dieser Iterationsverläufe (Orbits) bleiben gefangen, die Startwerte c sind also Elemente der Mandelbrotmenge. Für die andern zwei Punkte divergiert die Iteration Richtung ∞ . 2.2.1.3.2 Iterationsgrenze Nach einer gewissen Iterationsanzahl Funktion f ( Z n ) c ∉ M den Orbitalwert 2. Ist dieser Grenzwert überschritten, strebt die Funktion f ( Z n ) → ∞ . Um diesen Sachverhalt beweisen zu können, verwendet man die vollständige Induktion. Der Beweis3 wird wie folgt geführt: überschreitet die Divergenz der Menge für |c|>2: Z0 = 0 Z1 = c Z2 = c2 + c 3 Beweis von http://www.stud.tu-muenchen.de/~andreas.putz/fraktal/beweis.htm#Ist |zn| Überarbeitet mit Herrn Hohler - 15 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Es sei |c| = 2+t wobei t > 0 Bedingung: Falls c > 2 , dann ist Z n ≥ 2 + n * t Verankerung: Z 1 = c = 2 + t = 2 + 1 * t Induktionsschritt: Z n ≥ 2 + n * t Z n +1 ≥ 2 + (n + 1) * t Z n +1 = Z n + c ≥ Z n − c = (2 + n * t ) 2 − (2 + t ) = 2 + 4nt + n 2 t 2 − t ≥ 2 2 *1 2 + 4nt − t = 2 + (4n − 1)t > 2 + (n + 1)t Durch diese Induktion ist bewiesen, dass die Folge jeden Wert übersteigt, wenn n hinreichend gross ist. Somit ist also auch gezeigt: Ist |zn| > 2 für beliebiges n, so ist (zn) unbeschränkt. Ist Z n > 2 für beliebiges n, so ist Z n unbeschränkt. Ist c > 2 so ist diese Aussage nach dem vorherigen Beweis trivial. Sei nun c ≤ 2 Sei Z n = 2 + t t>0 Z n +1 = ( Z n ) 2 + c ≥ ( Z n ) 2 − c ≥ 2 + t − 2 = 4 + t 2 + 4t − 2 ≥ 2 + 4t 2 *1 Damit zeigt sich durch Induktion wie oben, die Behauptung. *1 Dreiecksungleichung a+b ≥ a − b a.b ∈ C (komplexen Zahlen) Nun stellt sich dazu eine weitere interessante Frage: Nach wie vielen Iterationen überschreitet die Funktion f ( Z n ) den Orbitalwert? Um dieses Problem lösen zu können zählt man alle Punkte, die nach einer bestimmten Iterationsanzahl den Orbitalwert verlassen, zusammen. So ergibt sich zum Beispiel, dass bei einem 100*100 Pixel grossen Bild der gesamten Mandelbrotmenge 744 Punkte den Orbitalwert nach genau 2 Iterationen verlassen. Zeichnet man diese Punkte in einem Diagramm ein, so entsteht eine Art Glockenkurve (Abb. 2.5). Offensichtlich verlassen die meisten Punkte den Orbitalwert in den ersten fünf Iterationsstufen. Erstaunlich ist, dass, betrachtet man den Ausschnitt der gesamten Mandelbrotmenge, nach drei Iterationsstufen die meisten Funktionen f ( Z n ) mit c den Orbitalwert bereits verlassen haben. Dieser Sachverhalt ist unabhängig von der Bildgrösse und von der gesamtmöglichen Iterationsanzahl N . Lediglich der Bildausschnitt spielt eine Rolle. - 16 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Iterationsstufe Punkt Iterationen Abb. 2.5 Iterationsverlauf Anzahl c >2 bei 1. Iteration c >2 bei 2. Iteration c >2 bei 3. Iteration c >2 bei 4. Iteration c >2 bei 5. Iteration c >2 bei 6. Iteration c >2 bei 7. Iteration c >2 bei 8. Iteration c >2 bei 9. Iteration c >2 bei 10. Iteration 632 744 2432 1176 740 442 310 201 160 105 Betrachtet man ein 100 auf 100 Pixel grosses Feld, so divergieren 7421 Punkte bei einer Iterationstiefe von 20. Der Rest (2579 Pixel) bildet die Gefangenenmenge. Nach 10 Iterationsschritte haben bereits 6942 von den insgesamt 7421 Punkten, welche divergieren, den Grenzwert von 2 bereits überschritten. Daraus kann man schliessen, dass die Funktion f ( Z n ) mit dem Startwert c entweder nach wenigen Iterationen bereits definitiv in Richtung ∞ strebt oder c ∈ M ist. Die Form des Apfelmännchens wird im Groben schon nach wenigen Iterationen ersichtlich. Eine grössere Iterationszahl verfeinert die Form nur noch im Detail (Abb. 2.6). Abb. 2.6 Apfelmännchen mit verschiedenen Iterationen Iterationszahl 20 Iterationszahl 100 Diese zwei Bilder verdeutlichen die Aussage. Die Form des Apfelmännchen hat sich nicht grundlegend verändert, obwohl die Iterationszahl 5 mal höher ist. Lediglich die Randlinie wurde verfeinert. Das Erhöhen der Iterationszahl ist beim Zoomen in die Mandelbrotmenge wichtig. Untersucht man einen Ausschnitt der Mandelbrotmenge im Randbereich, erkennt man sofort, dass je nach Iterationszahl das Bild unterschiedlich, jedoch mit ähnlichem Grundmuster, herauskommt. Je grösser die Iterationszahl gewählt wurde, desto detaillierter erscheint das Bild (Abb 2.7). Abb. 2.7 Ausschnitte des Apfelmännchen mit verschiedenen Iterationen Iterationszahl 20 Iterationszahl 100 - 17 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Aus diesen beiden Sachverhalten ergibt sich folgenden Grundsatz für die Randlinie der Mandelbrotmenge: Je näher sich der Punkt c ∉ M am Rande der Mandelbrotmenge befindet, desto schneller divergiert die die Funktion f ( Z n ) mit c → ∞ . 2.2.1.4 Startwert Z 0 Z 0 , der Startwert der Iterationsfolge f (Z ) , wird bei der Mandelbrotmenge 0 gesetzt. Durch diesen Wert kommt bei der Iteration der Punkte das typische Apfelmännchen hervor. Was ergibt sich, wenn der Startwert Z 0 ≠ 0 ist? Da bei der Erzeugung fraktaler Strukturen immer wieder ein und dieselbe Anweisung ausgeführt wird, hängt das Endprodukt empfindlich von den Startwerten ab, mit denen man die Berechnungen beginnt. Die kleinste Abweichung vom Startwert Z 0 summiert sich schnell, da die Mandelbrotmenge durch eine quadratische Gleichung erzeugt wird. Warum aber wählt man Z 0 = 0 ? 0 ist der kritische Punkt von Z 2 + c . Ein kritischer Punkt ist ein Punkt, bei dem d ' = dzd ( Z 2 + c) = 0 ist. An dieser Stelle hat die Kurve also ein Extremum. Wenn man aber eine andere Funktion anstelle von Z 2 + c einsetzt, ändert sich auch der Startwert Z 0 . Für die Funktion f ( Z ) = Z 2 + Z + c ist der kritische Punkt Z = − 12 , da die f ' ( Z ) = 2Z + 1 = 0 gelten muss. In manchen Fällen kann eine Gleichung auch mehrere Extremitäten haben. Es gibt dort mehrere kritische Werte, welche aber zum selben Resultat führen müssen. Die kleinste Änderung des Startwertes kann sich fatal auf das Aussehen der Mandelbrotmenge auswirken (Abb. 2.8). Abb 2.8 Apfelmännchen mit verschiedenen Startwerten für Z 0 = 0 + 0i Z 0 = −0.25 + −0.125i Z0 Z 0 = 0.5 + 0.5i 2.2.1.5 Die Geleichung Z n +1 = Z nk + c Die Gleichung für die bekannte Mandelbrotmenge lautet Z n +1 = Z n + c . Was würde 2 2 geschehen, wenn man anstelle von Z n eine andere Bedingung verwendet? Es kommen wieder frakte Gebilde heraus, die eine gewisse Ähnlichkeit mit der Mandelbrotmenge haben (Abb. 2.9). - 18 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge Abb. 2.9 Apfelmännchen mit verschiedenen Grundgleichungen Z n +1 = Z n + c 3 Z n +1 = Z n + c 4 Solche Gebilde werden Multibrote genannt. Je höher der Exponent ist, desto eher gleicht das Multibrot einem Kreis. Anstelle von einer Exponentialfunktion kann auch eine andere Bedingung verwendet werden wie Logarithmusfunktionen. Das schönste aller Multibrote 2 bleibt aber jenes mit der Iterationsbedingung Z n +1 = Z n + c . 2.2.2 Die Juliamenge Die Definition der Juliamenge erfolgt analog zu der Definition der Mandelbrotmenge. Bei der Definition der Juliamenge unterscheidet man die ideale Juliamenge J c = {c ∈ C | lim Z n → / ∞ } n→∞ und die realistische Juliamenge J c = {Z ∈ C | Z n < A } Im Folgenden wird analog zur Betrachtung der Mandelbrotmenge nur die Funktion 2 Z n +1 = Z n + c betrachtet. Die komplexe Zahl c ist dabei der Kontrollparameter (vom englischen „control“= steuern). Für Z setzt man Punkte des darzustellenden Bereichs der Gausschen Zahlenebene ein. Z und c haben also gegenüber der Mandelbrotmenge ihre Aufgabe getauscht. 2.2.2.1 Zusammenhang zwischen Julia- und Mandelbrotmenge Die Zahlen c in der komplexen Zahlenebene bilden beim Iterieren der Funktion 2 Z n +1 = Z n + c mit Z 0 = 0 die Mandelbrotmenge M . Mit diesem Verfahren kann man also herausfinden, ob sich ein Punkt c innerhalb der Mandelbrotmenge befindet oder nicht. Möchte man aber wissen, wie sich die Iteration Z n +1 = Z n + c bei unterschiedlichen Z 0 verhält oder für welche Werte von Z 0 die iterierten Z 0 beschränkt sind, muss man zum Modell der Juliamenge greiffen (Entdecker der Juliamenge: Gaston Maurice Julia im Jahre 1918). Die Juliamenge wird mit der selben Iterationsbedingung wie die Mandelbrotmenge erzeugt: Z n +1 = Z n + c . Allerdings ist c bei der Juliamenge die Konstante (wird zu Beginn definiert) und für Z 0 werden Punkte der komplexen Zahlenebene eingesetzt. Bei der Mandelbrotmenge ist Z 0 = 0 . Man wandert Punkt für Punkt über die Gaussche Zahlenebene und ermittelt c . Z 0 und c haben bei der Juliamenge ihre Aufgaben getauscht. So kann man sagen: Für den gegebenen Parameter c bildet die Menge der Anfangswerte Z 0 , für die Z n beschränkt (gefangen) sind, die sogenannte gefüllte Juliamenge J c . Die eigentliche Juliamenge besteht aus den Randpunkten von J c . Im Gegensatz zur Mandelbrotmenge hängt das Aussehen der Juliamenge vom Kontrollparameter c ab. Dabei gibt es zwei prinzipielle Möglichkeiten. Die Juliamenge ist - 19 Maturaarbeit 2002, Martin Wirz 2 Die Mandelbrotmenge eine Staubwolke aus unendlich vielen Punkten, eine sogenannte „Cantormenge“, oder sie ist zusammenhängend, das heisst an einem Stück. Um festzustellen, ob eine Juliamenge verbunden ist oder nicht, reicht es aus, Z 0 = 0 mit c zu untersuchen. Divergiert dieser Punkt beim Iterieren in Richtung ∞ , so ist J c nicht zusammenhängend. Divergiert Z 0 = 0 mit c nicht, so ist die Juliamenge zusammenhängend. Daher kann man sagen, dass aus c ∈ M folgt, J c ist zusammenhängend und umgekehrt, da die Mandelbrotmenge M die Menge aller nicht divergierenden Punkten c ist. Dies ermöglicht den Rückschluss: Wenn der Punkt c aus dem Innern (inkl. Rand) der Mandelbrotmenge M stammt, also c ein Punkt des Apfelmännchens ist, ist die zugehörige Juliamenge J c zusammenhängend, andernfalls nicht. Es besteht also ein direkter Zusammenhang zwischen der Julia- und der Mandelbrotmenge. Zu jedem Punkt der Mandelbrotmenge existiert eine bestimmte Juliamenge (Abb. 2.9). Abb 2.9 Die Mandelbrotmenge und die dazugehörige Juliamenge - 20 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge 3 Programmieren der Mandelbrotmenge 3.1 Aufbau des Algorithmus Die Kernfunktion des Apfelmännchenprogramms ist sehr einfach aufgebaut. Im Grunde benutzt man nur die realistische Definition der Mandelbrotmenge M = {c ∈ C c n < A, n ≤ N } sowie die Grundfunktion 2 f ( z n ) = Z n +1 = Z n + c . Des Weiteren definiert man eine Grafikebene in X- und Y-Richtung. In diesem Speicherfeld ,nennen wir es PicMain4, wird man später das Bild hineinspeichern. Im ersten Teil des Programms wählt man eine quadratisches Gebiet in der komplexen Ebene aus, welches näher untersucht werden soll. Dazu speichert man die Koordinaten des linken unteren Punktes in 2 Variablen. Den Realteil in die Variable XEcke, den Imaginärteil in die YEcke. Die Seitenlänge des Quadrates wird in Quad gespeichert. Im zweiten Teil wird ein Speicherfeld PicMain dem in im ersten Teil des Programms definierten Quadrat angepasst. Dazu wird einer Variable namens Spaltenbreite die Entfernung zwischen zwei Pixels zugewiesen. Spaltenbreite erhält man also, indem man Quad durch die Anzahl Spalten (Pixel) im PicMain dividiert. Spaltenbreite = Quad Width ( PicMain ) Der Bildfläche PicMain wird mit dieser Methode ein neues Koordinatensystem unterlegt, welches eine individuelle und flexible Anpassung zulässt. Dieser Sacherverhalt vereinfacht das Hineinzoomen in die Mandelbrotmenge. Eine Koordinatentransformation kann bei Laufzeit vollzogen werden. Der dritte Teil des Programms ist das Kernstück. In diesem Teil wird nach komplexen Zahlen c gesucht, welche nach einer gewissen Iterationszahl einen Grenzwert (Orbitwert) nicht verlassen haben, also Elemente von M, der Mandelbrotmenge, sind. Dieser Schritt lässt sich in vier Teilschritte zerlegen. Angenommen, das Programm arbeitet gerade am Pixel P mit dem X-Wert n und dem Y-Wert m, so soll das Programm folgende Schritte durchführen: Schritt 1: Berechnung der komplexen Zahl c(Cr / Ci ) , die diesem Pixel P(xkoor, ykoor) entspricht. Um den Realteil (nennen wir ihn Cr) von c zu erhalten, addiert man xkoor*Spaltenbreite zu XEcke. Für den Imaginäreteil (Ci) von c addiert man ykoor*Spaltenbreite zu YEcke. Die imaginäre Zahl i kommt im Programm nicht vor, da es von Computern (meist) nicht unterstützt wird. Eine Ausnahme bildet der TI92plus, dessen interne Programmiersprache (TIBasic) die imaginäre Zahl i vollumgänglich unterstützt. Der Visual Basic Code ist für den Schritt 1 ist wie folgt aufgebaut: Spaltenbreite = Quad / Width(PicMain) Cr = xkoor * spaltenbreite + XEcke Ci = ykoor * spaltenbreite + YEckee 4 Entspricht einer Variablen - 21 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge Schritt 2: Man setzt eine komplexe Variable Z (Realteil Zr, Imaginärteil Zi) auf Z 0 = 0 + 0i (also Zr=0, Zi=0) welches dem Startwert entspricht, sowie eine Zählvariable ZÄHLER auf 0. Danach wiederholt man die folgenden drei Schritte, bis entweder der Betrag von Z grösser als die Orbitgrenze 2 ist, oder ZÄHLER grösser als der vordefinierte Iterationswert (MaxIters) ist. Z = Z2 +c ZÄHLER = ZÄHLER + 1 Betrag = Betrag von Z = ( Zr ) 2 + ( Zi ) 2 Warum soll dieser Iterationsprozess abgebrochen werden, sobald der Betrag von Z grösser als 2 ist? Ein komplexer Beweis zeigt, dass die interessanten Bereiche der Mandelbrotmenge sich innerhalb einem Kreis mit dem Radius 2 befinden. Ist der Betag von z grösser als 2, befindet sich der Punkt ausserhalb von M und strebt gegen ∞. Der Visual Basic Code ist für den Schritt 2 ist wie folgt aufgebaut: While Sqr(Zr * Zr + Zi * Zi) <= 2 and ZÄHLER<= MaxIters '<***KERNALGORITHMUS***> ’Realteil t1 = Zr * Zr - Zi * Zi ’Imaginärteil t2 = 2 * Zr * Zi ZÄHLER = t1 + Cr ZÄHLER = t2 + Ci ZÄHLER = ZÄHLER + 1 '</***KERNALGORITHMUS***> Wend Schritt 3: Als letzter Schritt wird dem Pixel P(xkoor, ykoor) je nach dem Wert von ZÄHLER eine Farbe zugewiesen. Anschliessend zeichnet man das Pixel(xkoor, ykoor) im Bild PicMain ein. Zur Farbgebung eines Pixels sind keine Grenzen gesetzt. Hier kann der Programmiere seine Fantasie voll ausleben lassen. Konvergiert Z, gehört es also zu M (verlässt die Schlaufe erst nach der maximalen Iterationsanzahl), so wird dieser Punkt schwarz eingefärbt. Diese Punkte ergeben die charakteristische Form der Mandelbrotmenge. Um die Darstellung des Apfelmännchens am Computer zu beschleunigen, ist eine zentrale Eigenschaft der Mandelbrotmenge zu verwenden. Durch die Symmetrie zur reellen Achse, reicht es den Punkt c zu iterieren. c wird identisch eingefärbt. Dies erlaubt die Rechenzeit fast zu halbieren, da die Hälfte der Punkte durch Kopieren gewonnen werden kann. Der Nachteil dieses Verfahrens ist offensichtlich: Bei Ausschnittsvergrösserungen, welche nicht mehr symmetrisch zur x-Achse (reellen - 22 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge Achse) sind, dies ist meistens der Fall, lässt sich diese Eigenschaft nicht mehr anwenden. Jedoch bringt der Sachverhalt, dass das Apfelmännchens zusammenhängend ist, auch in diesen Bereichen eine wesentliche Beschleunigung, vorausgesetzt es sind Teile der Mandelbrotmenge vorhanden. Da das Apfelmännchen zusammenhängend ist, gilt, wenn die Punkte irgendeiner geschlossenen Kurve zur Menge gehören, dann gilt gleiches auch für alle von der Kurve umschlossenen Punkte. Man kann also die Randpunkte des Apfelmännchens berechnen. Alle eingeschlossenen Punkte gehören automatisch auch zur Mandelbrotmenge und können daher schwarz eingefärbt werden. Zur Berechnung sucht das Computerprogramm nach einem Punkt, der zur Mandelbrotmenge gehört. Trifft das Programm auf einen Punkt der zur Menge gehört, so untersucht es die angrenzenden Punkte. Ist der untersuchte Punkt ein Randpunkt der Menge, so werden die Nachbarpunkte untersucht. Das Programm testet Punkt für Punkt, ob es sich um einen Randpunkt handelt oder nicht. Ist der Rand ermittelt, wird das Innere einheitlich schwarz eingefärbt. In der Praxis muss man jedoch beachten, da es sich nur um eine Näherung (Approximation) handelt, das heisst, es müssen nicht alle c ∈ M verbunden sein. Benoit Mandelbrot gibt zu bedenken, dass die Verbindungsfasern zwischen Teilgebieten und der Hauptmenge vermutlich infinitesimal dünn seien. Das Umsetzen dieser Optimierungsmöglichkeit ist im Gegensatz zum Standardalgorithmus sehr viel komplexer und fehlerträchtiger. Ich habe darauf verzichtet, diesen verbesserten Algorithmus in mein Programm einzubauen, da ich auch keine geeignete Literatur dazu fand. 3.2 FraCalc Das Computer Programm zur Maturaarbeit „Mandelbrotmenge: erzeugen und analysieren“ Als weiteren Bestandteil meiner Maturaarbeit habe ich das Programm FraCalc entwickelt, welches erlaubt, diese faszinierenden Bilder der Mandelbrotmenge zu berechnen und darzustellen. Ich habe versucht, FraCalc benutzerfreundlich und einfach zu gestalten. Ich wollte dennoch auf keine wichtigen Elemente verzichten. Es gibt zwei Versionen des Programms. Eine Version wurde in Visual Basic für den PC (Windows) geschrieben. Das zweite Programm, eine stark abgespeckte Version des PCProgramms, wurde für den TI92plus Rechner entwickelt. Der Quellcode dieses Programms liegt in C vor. Das Programm habe ich mit Hilfe der TIGCC SDK (Software Development Kit) für den TI92plus compiliert. Die Programme sowie der Quellcode befinden sich auf der beigelegten gleichnamigen CD-ROM. - 23 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge 3.2.1 FraCalc für Windows Abb. 3.1 Übersicht der wichtigsten Fenster von FraCalc Tools von FraCalc Zoom-Tool Mit dem Zoom-Tool kann man beinahe beliebig tief in die Mandelbrotmenge hineinzoomen, ohne dass sich die Auflösung verschlechtert. Damit gelangt man in die abgelegensten Orte und kann die merkwürdigsten Ausschnitte der Mandelbrotmenge betrachten. Den Zoomfaktor kann man beliebig wählen, um genau den Ausschnitt zu erhalten, den man möchte. Eine ganz individuelle Reise in das Randgebiet der Mandelbrotmenge wird damit möglich. - Berechnung der Juliamenge Durch Klicken auf einen Punkt der Mandelbrotmenge wird die dazugehörige Juliamenge gezeichnet. Damit lässt sich schnell feststellen, ob der Punkt ein Teil des Apfelmännchens ist, also ob er zur Mandelbrotmenge gehört, oder nicht. - Iterations-Diagramm Will man das Fluchtverhalten der einzelnen Punkte der komplexen Zahlenebene beim Iterieren der Funktion Z n +1 = Z n 2 + c betrachten oder will man wissen, bei welcher Iterationszahl wie viele Funktionen Z n +1 = Z n 2 + c den Grenzwert 2 überschritten haben, so beinhaltet FraCalc ein nützliches Tool, welche von diesen Punkten ein Diagramm erstellt (Abb 3.2). Abb. 3.2 Analysetool - 24 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge - Ändern des Startwertes Z 0 Im Menu „andere Mandelbrotmengen“ können weitere Mandelbrotmengen erstellt werden. Dazu stehen zwei Funktionen bereit. Zum einen kann man den Startwert Z 0 abändern. Dies bewirkt, dass eine Deformation des Aussehens der Mandelbrotmenge stattfindet. Eine genau Erklärung dazu findet man im Kapitel 2.2.1.4. FraCalc hat drei vordefinierte Startwerte: - Z 0 = 0 + 0i (Standart) - Z 0 = 0.5 + 0.5i - Z 0 = −0.25 − 0.125i - Grundfunktion Die zweite Möglichkeit, eine andere Mandelbrotmenge zu erstellen, besteht darin, die Grundfunktion, welche bei der normalen Mandelbrotmenge die bekannt Gleichung Z n +1 = Z n2 + c ist, abzuändern. FraCalc stellt dabei zwei weitere Gleichungen zur Verfügung: - Z n +1 = Z n3 + c - Z n +1 = Z n4 + c Abspeichern der Mandelbrotmenge Die erzeugten Mandelbrotmengen können auch als *.bmp Datei abgespeichert werden. So lässt sich das erstellte Bild in einem Grafikprogramm abändern und anschliessend kann man es ausdrucken. FraCalc erlaubt auch das Abspeichern der relevanten Daten welche zur Erzeugung wichtig sind. Hat man einen schönen Ausschnitt gefunden, so kann man alle verwendeten Daten in einer *.fcs Datei abspeichern. Dies erlaubt dem Benutzer später an derselben Stelle die Mandelbrotmenge weiter zu erforschen. Folgenden Daten werden gespeichert: - genaue Ausschnitt - Funktion der Mandelbrotmenge - Startwert - Farbe Das Fenster, in welchem die Juliamenge gezeichnet wird, unterstützt die gleichen Funktionen, wie das Fenster mit der Mandelbrotmenge. Das Hinein- sowie das Hinauszoomen wird vollständig unterstützt. 3.2.2 FraCalc für den TI92plus Da der TI92plus ein sehr leistungsstarker (Taschen-) Rechner ist, habe ich mir zum Ziel gesetzt, ein Mandelbrotprogramm zu schreiben, welches mir in vernünftiger Zeit das Apfelmännchen berechnet und anzeigt. Dabei habe ich zwei verschieden Programmierumgebungen gewählt. 3.2.2.1 TIBasic Programm Die Rechnerinterne Programmiersprache TIBasic ist sehr einfach aufgebaut und vergleichbar mit dem Qbasic, welches man von DOS her kennt. Der Nachteil dabei ist, dass Programme, - 25 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge welche in TIBasic geschrieben wurden, sehr langsam sind. Dies hängt damit zusammen, dass TIBasic keinen Compiler hat. Der erstellte Code wird also nicht auf die tiefstmögliche Ebene gebracht und so Byte für Byte ausgeführt. TIBasic ist eine Interpretersprache. Der Quellcode wird beim Ausführen des Programms Stück für Stück gelesen und interpretiert. Im Gegensatz zu FraCalc für Windows muss man bei der TI92plus-Version kein neues Koordinatensystem erstellen, da diese Funktion von der TI92plus Software zur Verfügung gestellt wird. Des weiteren kann der TI92plus direkt mit komplexen Zahlen rechnen. Dies führt zu einer weiteren Vereinfachung des Programmieraufwandes. Um einen Ausschnitt der Mandelbrotmenge zu berechnen, startet man das Programm und gibt in einem Fenster die benötigten Daten ein. Diese Daten entsprechen denen von FraCalc für Windows. Somit kann man auf einfachste Weise ein am PC erstelltes Bild auf den TI92plus nachzeichnen lassen. Das Berechnen des gewünschten Ausschnitts dauert je nach der Iterationstiefe zwischen 10 und 12 Stunden. Dies ist natürlich viel zu langsam. Um mein Programm beschleunigen zu können, musste ich nach neuen Wegen suchen. Es stellte sich schnell heraus, dass man mit TIBasic nicht mehr weiter kommen wird. 3.2.2.2 Assembler Programm Die zweite Version von FraCalc für den TI92plus habe ich in C geschrieben und zu Assembler kompiliert. Assembler ist eine sehr leistungsstarke Programmiersprache, da sie direkt den Prozessor anspricht, also nicht über eine weitere Software laufen muss. Assembler ist die Grundsprache, mit welcher jeder Chip programmiert wird. Assembler ist die systemnaheste und somit die schnellste Programmiersprache die es gibt. Der Nachteil von Assembler ist, dass es keine Bibliotheken mit vorgefertigten Befehlen gibt. Es existieren nur die wichtigsten Grundfunktionen. Es gibt allerdings Programmiertools, welche es dem Programmierer erlauben, sein Programm in einer benutzerfreundlicheren Umgebung und Programmiersprache zu entwickeln und anschliessend den erstellten Quellcode in Assembler zu kompilieren, also zu konvertieren. Für Assemblerprogramme, welche auf dem TI92plus laufen sollen, gibt es dazu eine entsprechende Software, mit welcher man auf dem PC entwickelte Programme in ein TI92plus passendes Format konvertieren kann. Die Programmiersprache C ermöglicht dem Programmierer viel komplexere Programme zu entwickeln als mit TIBasic, was für ein einfaches Programm zur Erzeugung der Mandelbrotmenge jedoch nicht relevant ist. Lediglich die Geschwindigkeit des erstellten Programms war mir wichtig. Einen Ausschnitt des Apfelmännchens zu berechnen und zu Zeichnen dauert mit dem Assemblerprogramm nicht mehr als fünf Minuten. Dies ist weniger als ein Prozent der Zeit, welche das TIBasic-Programm zum Berechnen braucht. Die Eingabe der Daten erfolgt wie beim TIBasic-Programm (Abb 3.3a). Als zusätzliches Feature wird am Ende der Berechnung das Bild abgespeichert und kann normal über die TI92plus-Software (Graph-Menü) geöffnet werden. - 26 Maturaarbeit 2002, Martin Wirz 3 Programmieren der Mandelbrotmenge Abb. 3.3a Eingabefenster Abb. 3.3b Bild der Mandelbrotmenge - 27 Maturaarbeit 2002, Martin Wirz 4 Mathematische Hintergründe 4 Mathematische Hintergründe und Grundwissen 4.1 Iteration Der Begriff Iteration stammt vom lateinischen Wort iterio was soviel wie Wiederholung heisst. Die Übersetzung zeigt schon die Bedeutung dieses Begriffes. Als Iteration bezeichnet man eine wiederholte Anwendung einer Funktion. Man beginnt mit dem Startwert x0 und setzte diesen Wert in die Funktion f (x) ein. So bekommt man x1 . Nun wiederholt man den Vorgang mit dem Anfangswert von x1 . Es gilt also: x 2 = f ( x1 ) . Fährt man so fort, ergibt sich eine Folge von Zahlen x1 , x 2 , x3 ,..., x n . Es ist also: x1 = f ( x0 ) x 2 = f ( x1 ) = f ( f ( x0 )) = f 2 ( x) x3 = f ( x 2 ) = f ( f ( f ( x0 ))) = f 3 ( x) x n = f ( x n −1 ) = f n ( x) Beispiel: f ( x) = 3 x x0 = 2, x1 = 3 * 2 = 6, x 2 = 3 * 2 * 3 = 6 * 3 = 18, ..., x k = 3 * 2 k 4.2 Fixpunkt Ein Punkt x heisst Fixpunkt von f (x) , wenn gilt f ( x) = x . Somit gilt auch f n ( x) = x . Der Wert der Funktion bleibt also unabhängig von der Iterationszahl immer der selbe. Beispiel: f ( x) = x 2 + 1 4 x0 = 12 , x1 = 14 + 14 = 12 , x 2 = 14 + 14 = 12 , ... Es gibt aber auch Funktionen, die erst nach einer gewissen Iterationszahl einen Fixpunkt erreichen oder ihm beliebig nahe kommen. Solche Fixpunkte nennt man anziehende Fixpunkte oder Attraktoren. Einen Attraktor kann man am einfachsten mit einem Pendel beschreiben. Der tiefste Punkt des Pendels ist der Fixpunkt. Das Pendel schwingt immer um diesen Punkt herum, er wird von ihm angezogen. Das Pendel kann das System nicht verlassen. Steht das Pendel still, so hat es den Fixpunkt für dieses System erreicht. Ein stabiler Zustand wurde erreicht. Es gibt aber auch abstossende Fixpunkte, sogenannte Repelloren. Ein Repellor ist das Gegenteil eines Attraktors, also ein besonders “unattraktiver“ Zustand, von dem sich die Systemdynamik möglichst schnell wieder zu entfernen sucht. Dieser Zustand wird daher nie stabil sein. 4.3 Orbit Die Iterationsfolge x1 , x 2 , x3 , ..., x n der Funktion f (x) mit dem Startwert x0 wird als Orbit bezeichnet. - 28 Maturaarbeit 2002, Martin Wirz 4 Mathematische Hintergründe 4.4 Fluchtpunkte/Gefangenenmenge Wird die Funktion f (x) beim Iterieren von einem Attraktor angezogen, so wird der Wert c bei der Mandelbrotmenge oder der Kontrollwert c bei der Juliamenge als ein Element der Gefangenenmenge bezeichnet. Alle Punkte der Mangdelbrotmenge, die gefangen bleiben, also Elemente der Gefangenenmenge sind, bilden das Apfelmännchen. Alle Werte c , die von keinem Attraktor angezogen werden, (ausser vom Attraktor mit dem Wert ∞ ) sind Fluchtpunkte. Sie divergieren in Richtung ∞ . - 29 Maturaarbeit 2002, Martin Wirz 5 Zusammenfassung 5. Zusammenfassung Um komplexe geometrische Gebilde wie eine Wolke oder ein Farnblatt mathematisch beschreiben zu können, wurde die Theorie der fraktalen Geometrie eingeführt. Ein Fraktal zeichnet sich dadurch aus, dass gleiche Formen in verschiedenen Grössen immer wieder auftreten und ein beliebig kleiner Ausschnitt die gleiche Struktur wie das Originalobjekt aufweist. Die Erzeugung von Fraktalen ist nicht beschränkt auf geometrische Regeln und Figuren. Ein Fraktal kann auch das Ergebnis einer mathematischen Abbildung sein. Das wohl schönste Beispiel eines Fraktals, welches auf diese Weise erzeugt wurde, ist das, von einem Mathematiker namens Mandelbrot, entdeckte Apfelmännchen. Der erste Teil dieser Maturaarbeit ist eine allgemeine Einführung in das Gebiet der fraktalen Geometrie. Im zweiten Teil wird explizit auf die Mandelbrotmenge eingegangen. Es werden die Grundlagen erklärt sowie Experimente durchgeführt. Im dritten Teil wird auf das Erzeugen der Mandelbrotmenge mit dem Computer eingegangen. In diesem Kapitel wird der Algorithmus erläutert und Optimierungsvorschläge vorgestellt. Parallel zum Skript entstanden zwei Computerprogramme, welche die Mandelbrotmenge zu berechnen vermögen. Dieser praktische Teil meiner Arbeit, sowie der gesamte Text, befinden sich auf der beigelegten CD-ROM. Fazit: Die Theorie der fraktalen Geometrie und im Speziellen der Mandelbrotmenge zeigt, dass die Komplexität, die wir in vielen Naturphänomenen entdecken, aus relativ einfachen, sich immer wiederholenden Gesetzen hervorgehen kann. Es wird deutlich, dass komplexes Verhalten nicht nur von komplexen Gesetzen abhängen. - 30 Maturaarbeit 2002, Martin Wirz 6 Anhang 6 Anhang 6.1 Literaturliste Anhang A 6.1.1 Bücher 1| Schroeder, Manfred. Fraktale, Chaos und Selbstähnlichkeit: Notizen aus dem Paradies der Unendlichkeit. Heidelberg: Spektrum Akademischer Verlag, 1994 2| Mandelbrot, Benoît B.. Die fraktale Geometrie der Natur. Hrsg. der dt. Ausg.: Ulrich Zähle. Basel: Birkhäuser, 1987 3| Peitgen, Heinz-Otto und Dsaupe Dietmar. The Science of fractal imagex. New York: Springer-Verlag, 1988 4| Peitgen, Heinz-Otto und Richter P. H... The Beauty of Fractals Images of complex dynamical Systems. Berlin: Springer, 1986 5| Barnsley, Michael. Fractals Everywhere. San Diego: Academic Press INC., 1988 6.1.1.1 Texte 1| Dimension für Fraktale. S.10-14 1| Die Mandelbrotmenge. S.313-318 2| Der Begriff des Attraktors und Repulsors. S.207-208 3| Der Begriff des Orbits. S.143-145 3| The Mandelbrot-set. S.177-179 4| The Mandelbrot-set. S.56-62 6.1.2 Internet Alfred, Peter. http://www.math.utah.edu/~alfeld/math/mandelbrot/mandelbrot.html The Mandelbrot Set. University of Utah. 10.2.2002* Schlösinger, Christian. http://www.schloesinger.de/deutsch/mandelbrot_u_juliamengen Mandelbrot- und Juliamengen. 10.2.2002* Henning, Jacobs. http://www.gymnasiumhittfeld.de/ags/faecher/ma/010423_1/fraktale_malk12fa_hj.pdf Fraktale – Die Geometrie des Chaos. 10.2.2002* Mandelbrot, Benoit. http://www.math.yale.edu/mandelbrot/ Fractal Foundation. 10.2.2002* Ermel, Stepp. http://www.faqs.org/faqs/fractal-faq/ Fractal Frequently Asked Questions and Answers. 10.2.2002* * Letzter Besuch der Homepage - 31 Maturaarbeit 2002, Martin Wirz 6 Anhang http://www.wolferseder.de/ 10.2.2002* Lichtenegger, Klaus.http://www.uni-klu.ac.at/~gossimit/lv/usw00/w/g5/gettouch.html Get in touch with chaos. 10.2.2002* Reichelt, Sebastian. http://tigcc.ticalc.org/ Homepage of the TIGCC-Team. 10.2.2002* 6.1.3 Software Vassor, Xavier. TIGCC-Compiler v0.93 beta. TIGCC-team, 2001. Microsoft Visual Basic 5.0 - 32 Maturaarbeit 2002, Martin Wirz 6 Anhang 6.2 Sourcecode Anhang B //FraCalc //TI92plus Programm zur Generiereung der Mandelbrotmenge //Software zur Maturaarbeit "Mandelbrotmenge: Erstellen und analysieren" //Martin Wirz 2002 #define OPTIMIZE_ROM_CALLS // Use ROM Call Optimization #define SAVE_SCREEN // Save/Restore LCD Contents #include <tigcclib.h> #include "extgraph.h" #define SIZE 100 #define BLACK -1 // Include All Header Files short _ti92plus; // Produce .9XZ File void InputStr (char*, short, short, short); // Main Function void _main(void) { //DEFINITION short xkoor, ykoor, count; long double zr, zi, cr, ci; //long double long double rsquared, isquared;//long double long double MaxIters, xEcke, yEcke, Spaltenbreite, Quad; //long double char buffer[50], MaxItersC[50], xEckeC[50], yEckeC[50], QuadC[50]; FontSetSys(F_6x8); ClrScr(); //INPUT DrawStr(1,10,"X-Achse",A_NORMAL); InputStr(buffer,20,65,10); xEcke = atof(buffer); DrawStr(1,22,"Y-Achse",A_NORMAL); InputStr(buffer,20,65,22); yEcke = atof(buffer); DrawStr(1,34,"Quad",A_NORMAL); InputStr(buffer,20,65,34); Quad = atof(buffer); DrawStr(1,46,"Iteration",A_NORMAL); InputStr(buffer,20,65,46); MaxIters = atof(buffer); ClrScr(); FontSetSys(F_4x6); //ALGORITHMUS sprintf(xEckeC,"%f",xEcke); DrawStr(110,10,"x-Achse",A_NORMAL); DrawStr(160,10,xEckeC,A_NORMAL); - 33 Maturaarbeit 2002, Martin Wirz 6 Anhang sprintf(yEckeC,"%f",yEcke); DrawStr(110,20,"y-Achse",A_NORMAL); DrawStr(160,20,yEckeC,A_NORMAL); sprintf(QuadC,"%f",Quad); DrawStr(110,30,"Quad",A_NORMAL); DrawStr(160,30,QuadC,A_NORMAL); sprintf(MaxItersC,"%f",MaxIters); DrawStr(110,40,"Iteration",A_NORMAL); DrawStr(160,40,MaxItersC,A_NORMAL); DrawLine (107, 10, 107, 44, A_NORMAL); DrawLine (0, 0, 101, 0, A_NORMAL); DrawLine (0, 0, 0, 101, A_NORMAL); DrawLine (101, 101, 101, 0, A_NORMAL); DrawLine (101, 101, 0, 101, A_NORMAL); //Schleife durch alle Punkte des Bildes for (ykoor = 0; ykoor < SIZE; ykoor++) { for (xkoor = 0; xkoor < SIZE; xkoor++) { //Z0=0 zr = 0.0; zi = 0.0; //Koordinaten an Screen anpassen Spaltenbreite = (Quad) / (SIZE); cr= xkoor * Spaltenbreite + xEcke; ci= ykoor * Spaltenbreite + yEcke; //zr^2 zi^2 (Beschleunigung des Programms) rsquared = zr * zr; isquared = zi * zi; //ITERATIONSSCHLEIFE für einen Punkt bis ItIters for (count = 0; rsquared + isquared <= 4.0 && count < MaxIters; count++) { //Zn+1=Zn^2+c //für imaginäre Zahlen zi = zr * zi * 2; zi += ci; //für reelle Zahlen zr = rsquared - isquared; zr += cr; rsquared = zr * zr; isquared = zi * zi; } //Testen, ob der Grenzwert 2 überschritten wurde if (rsquared + isquared <= 4.0) //Pixel(x,y) zeichnen DrawPix (xkoor,ykoor, A_NORMAL); } } DrawStr(110,60,"Done",A_NORMAL); ngetchx(); - 34 Maturaarbeit 2002, Martin Wirz 6 Anhang //BILD SPEICHERN { SCR_RECT full_screen = {{0, 0, 239, 127}}; char buffer [BITMAP_HDR_SIZE + 240*130/8]; BitmapGet (&full_screen, buffer); clrscr (); printf ("Bild abspeichern..."); ngetchx (); BitmapPut (0, 0, buffer, &full_screen, A_REPLACE); ngetchx(); { FILE *f; f = fopen ("frac", "wb"); fwrite (buffer,BITMAP_HDR_SIZE+240*130/8,1,f); fputc (PIC_TAG, f); fclose (f); } } } ClrScr(); FontSetSys(F_8x10); DrawStr(1,10,"FraCalc",A_NORMAL); FontSetSys(F_4x6); DrawStr(1,20,"M. Wirz 2002",A_NORMAL); DrawStr(1,40,"[email protected]",A_NORMAL); DrawStr(1,50,"www.westpak.ch/fw",A_NORMAL); //INPUT bearbeiten //nur die Zeichen "0,1,2,3,4,5,6,7,8,9,0,. und -" sind erlaubt void InputStr (char *buffer, short maxlen, short xini, short yini) { short key, i = 0; OSTimerRestart(APD_TIMER); strcpy(buffer,"\0"); do { MoveTo(xini,yini); printf ("%s_ ", buffer); key = GKeyIn(NULL,0); if (key >=46 && key <=57 && i < maxlen || key==173 && i < maxlen) buffer[i++] = key;//57 if (key == KEY_BACKSPACE && i) i--; buffer[ i ] = 0; if(key==KEY_CLEAR) strcpy(buffer,"\0") ; i=0; } } while (key != KEY_ENTER); ST_busy(ST_CLEAR); } - 35 Maturaarbeit 2002, Martin Wirz