Informatik mit Java LFB Köln ©Hermes Bedingungen und Wiederholungen: Eine Vertiefung Bedingungen und Wiederholungen:........................................................................................... 1 Eine Vertiefung .......................................................................................................................... 1 Hinführung zur Mandelbrotmenge......................................................................................... 2 Übung 1: Rückkopplung .................................................................................................... 2 Übung 2: mehrfache Rückkopplung .................................................................................. 3 Übung 3: Die Mandelbrotmenge........................................................................................ 3 Die Juliamenge........................................................................................................................... 4 1 Bedingte Anweisungen, Schleifen Übungen Hinführung zur Mandelbrotmenge 2 0 -2 -2 0 2 Abbildung: Mandelbrotmenge Die Konstruktion der Mandelbrotmenge beruht auf komplexen Zahlen und deren fortwährender Quadrierung. Komplexe Zahlen lassen sich grafisch als Punkte im kartesischen Koordinatensystem interpretieren: Jeder Punkt mit seinen beiden Koordinaten beschreibt eine komplexe Zahl. Die x-Werte liefern den so genannten Realteil der komplexen Zahl, die y-Werte den Imaginärteil. Falls der Imaginärteil gleich null ist, bleiben wir auf der reellen Zahlengeraden. Das Zahlenpaar z = (1,5 | 0,8) beispielsweise repräsentiert eine komplexe Zahl z mit dem Realteil 1,5 und dem Imaginärteil 0,8. Eine alternative Schreibweise lautet z = 1,5 + 0,8 i Der Buchstabe i steht für die imaginäre Einheit. Es gilt: i² = -1 Mit den genannten Voraussetzungen lässt sich das Quadrat unserer komplexen Zahl z berechen: z² = = = = = = = = (1,5 | 0,8)² (1,5 + 0,8i)² 1,5² + 2*1,5*0,8i + (0,8i)² 2,25 + 2,4i + 0,64i² 2,25 + 2,4i + 0,64*(-1) 2,25 – 0,64 + 2,4i 1,61 + 2,4i (1,61 | 2,4) Allgemein gilt (a | b)² = (a + bi)² = a² + 2abi + b²i² = a² + 2abi + b²(-1) = a² - b² + 2abi = (a²-b² | 2ab) Übung 1: Rückkopplung Schreibe ein Programm, das eine komplexe Zahl mit Real- und Imaginärteilen zwischen -2 und 2 am Bildschirm als Punkt darstellt, das Quadrat dieser Zahl berechnet und anzeigt, deren Quadrat präsentiert und diese „Iteration“ zehnmal wiederholt. (a | b) Quadratmaschine (x | y) Abbildung: Quadratmaschine Die fortlaufende Ersetzung einer Zahl z durch f(z) heißt Rückkopplung 2 Informatik mit Java LFB Köln Abbildung: Orbit Es gilt: f(z) = z²+c =(a²-b²+d, 2ab+e) ©Hermes Seien z = a+b*i=(a,b) und c = d+e*i = (d,e) komplexe Zahlen mit den Realteilen a, d und Imaginärteilen b, e. Sie lassen sich als Zahlenpaare und damit als Punkte im Koordinatensystem interpretieren. Das Bild zeigt die Entstehung von Zahlenfolgen nach der Iterationsvorschrift f(z) = z² + c und der Rückkopplung, dass z anschließend den Wert f(z) annimmt. Nach dem vierten Iterationsschritt hat z von (0,0) ausgehend den Wert (0.363,0.821). Nach dem ersten Schritt stimmen z und c überein (eingekreister Punkt in der Abb.). Die Folge entkommt entweder nach endlich vielen Iterationen dem Kreis um (0,0) mit dem Radius 2 oder bleibt darin gefangen. Im zweiten Fall gehört c zur Mandelbrotmenge (benannt nach dem Mathematiker Benoit B. Mandelbrot). Übung 2: mehrfache Rückkopplung Schreibe ein Programm, das die oben beschriebene Rückkopplung für vorgegebene komplexe Zahlen jeweils 20 mal ausführt und die Zahlenfolge ausgibt (graphisch oder als Text) Übung 3: Die Mandelbrotmenge Die Mandelbrotmenge (siehe Abbildung: Mandelbrotmenge) entsteht nach der folgenden Vorschrift: Für jede komplexe Zahl c = (a, b) mit -2 ≤ a ≤ 2 und -2 ≤ b ≤ 2 führe man, ausgehend von z = (0, 0) bis zu 50 Iterationen der Form z = z² + c durch. Sobald z den Kreis um (0, 0) mit dem Radius 2 verlässt, endet die jeweilige Iteration für die komplexe Zahl c. Sollte z nach 50 Iterationsschritten immer noch innerhalb des Kreises liegen, markieren wir c = (a, b) durch einen roten Punkt. Auf diese Weise werden alle komplexen Zahlen im Abstand von 2 Einheiten von (0, 0) gefärbt, die nach 50 Iterationsschritten, beginnend mit z = (0, 0) nicht aus dem besagten Kreis ausbrechen. Diese Menge ist die Mandelbrotmenge. Es macht keinen relevanten Unterschied, wenn wir statt des Kreises (a²≤4 && b²≤4) das Quadrat um (0,0) als „inneres Gebiet“ ansehen. Wir orientieren uns an dem folgenden Programmgerüst: betrachte jeden darstellbaren Punkt des Rechtecks (2 for-Schleifen) int iterationsNummer = 0; boolean innen = true; do iterationsNummer++; berechne das neue z nach der Iterationsvorschrift prüfe, ob z im Quadrat liegt (a>=-2 && a<=2 && b>=-2 && b <=2) while (iterationsNummer < 50 && innen); if (innen) {kennzeichne den Punkt) 3 Bedingte Anweisungen, Schleifen Die Juliamenge Betrachten wir erneut die Folge z -> -> -> -> z²+c = (a²-b²+d, 2ab+e) (z²+c)² + c ((z²+c)² + c)² ... Die Folge hat je nach dem Wert von z eine der folgenden Eigenschaften: • entweder entweicht die Folge gegen unendlich, d.h. die Elemente verlassen jeden Kreis um den Ursprung • oder die Folge bleibt gebunden bzw. gefangen in einem Kreis um den Ursprung. Juliamengen zu einer komplexen Zahl c sind diejenigen Punkte z, der zugehörige Iterationsfolge „gefangen“ bleibt. Man schreibe ein Programm, das für unterschiedliche Eingaben von c (z.B. (-0.83, 0.16)) für alle Punkte z = (a,b) mit -2 < a < a und -2 < b < 2 im Abstand 0.01 diejenigen Punkte z markiert, die zur Juliamenge gehören. Ein Punkt z gehört nicht zur Juliamenge, wenn ein Element der Iterationsfolge außerhalb des vorgegebenen Bereiches liegt. 4