Bedingungen und Wiederholungen: Eine Vertiefung - Lo-net2

Werbung
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
Herunterladen