FH Graubünden PH Graubünden

Fraktale Kurven

Algorithmisches Denken in der Primarschule

Zusammenfassung

Dieser Baustein ermöglicht (zukünftigen) Lehrpersonen einen Einstieg in die fraktale Geometrie, welche seit den 1970er Jahren sowohl an Bekanntheit als auch an Bedeutung gewonnen hat und er enthält geeignete Aufgaben für die Primar- und Sekundarstufe. Der Baustein steht in enger Verbindung mit den Bausteinen fraktale Dimension und Box-Counting-Methode. Obwohl diese drei Bausteine so aufgebaut sind, dass jeder für sich verwendet werden kann, ist eine Bearbeitung in der Reihenfolge Fraktale Kurven, fraktale Dimension, Box-Counting-Methode zu empfehlen. Für eine unterrichtliche Umsetzung können auch sinnvolle Lerneinheiten aus allen drei Bausteinen zusammengestellt werden (siehe didaktischer Kommentar im Baustein Box-Counting-Methode).

Aus dem Geometrieunterricht sind uns die Begriffe der euklidischen Geometrie geläufig. Begriffe wie Gerade, Strecke, Ebene, Kreis, Quadrat, Zylinder, Prisma und andere eignen sich gut, um durch Menschenhand geschaffene Formen unserer Umwelt wie Häuser oder Brücken zu beschreiben. Für natürliche Formen unserer Umwelt stossen wir diesbezüglich an Grenzen. Küstenlinien, Bäume oder Wolken lassen sich schlecht durch solche Begriffe fassen oder gar mit diesen Mitteln konstruieren. Eine wichtige Eigenschaft solcher Objekte ist die Selbstähnlichkeit. Ein Ast eines Baumes sieht aus wie die verkleinerte Form des ganzen Baumes, ein Blumenkohlröschen wie die verkleinerte Form des ganzen Blumenkohls oder ein Ausschnitt einer Wolke wie die verkleinerte Form einer ganzen Wolke. Entsprechendes lässt sich auch bei einem Farnblatt, einem Küstenausschnitt, in den Verästelungen der Blutgefässe in unseren Lungen, bei einem Blitz oder bei der Ausbreitung des Öls bei einem Tankerunfall erkennen.

Derartige «ausgefranste», selbstähnliche Gebilde nennt man Fraktale. Dieses Wort wurde aus dem lateinischen fractus (= zerbrochen) abgeleitet. Wir unterscheiden in den drei oben genannten Bausteinen zwischen den artifizellen (Beispiele in den Bausteinen fraktale Kurven und fraktale Dimension) und den natürlichen Fraktalen wie eine Küstenlinie (Baustein Box-Counting-Methode). Lassen sich die Objekte der euklidischen Geometrie mit Zirkel und Lineal konstruieren, so können die Objekte der fraktalen Geometrie durch Algorithmen erzeugt werden. Deshalb spielen Computer in der fraktalen Geometrie eine ausschlaggebende Rolle. Einfachere Algorithmen können zumindest für wenige Durchgänge von Hand ausgeführt werden. Für das Verständnis der zu erzeugenden Formen kann dies vor allem in der Primarstufe vorteilhaft sein (siehe Aufgabe 1).

Das Grundprinzip der Algorithmen in der fraktalen Geometrie ist die Iteration. Ausgehend von einem Initiator (ein Punkt, eine Strecke oder eine beliebige andere Figur) wird durch die wiederholte Ausführung eines bestimmten Befehlssatzes ein sogenanntes Limesbild erzeugt. Mathematisch gesehen entwickelt sich das Limesbild in unendlich vielen Iterationen. Durch die beschränkte, endliche Anzahl der zur Verfügung stehenden Pixel auf dem Grafikdisplay eines Computers wird ein optimales Erscheinungsbild des Fraktals bereits nach wenigen Iterationen erreicht. Programmiertechnisch wird der Befehlssatz in einer Schleife wiederholt ausgeführt bis eine bestimmte Bedingung erreicht ist. Ein bekanntes Beispiel eines derartigen Fraktals ist das Sierpinkskidreieck, welches durch die wiederholte Abbildung einer beliebigen Ausgangsfigur (eventuell nur ein Punkt) erzeugt werden kann (siehe Aufgabe 2 im Baustein fraktale Dimension). Die iterative Erzeugung, ausgehend von einem Initiator, ist die Ursache für die Selbstähnlichkeit von artifiziellen Fraktalen.

Bei der Erzeugung fraktaler Kurven wird eine bestimmte Vorschrift, ein Generator, vorerst auf eine vorgegebene Strecke (Initiator) angewendet. Dadurch werden in der sogenannten ersten Generation mehrere Teilstrecken erzeugt. Im nächsten Schritt wird auf jede Teilstrecke der ersten Generation der Generator erneut angewendet, es entsteht die zweite Generation usw. Bei jeder weiteren Wiederholung erhöht sich die Anzahl der Teilstrecken und stets wird im nächsten Iterationsschritt wiederum auf jede Teilstrecke die vorgegebene Vorschrift angewendet. Wird in einem Algorithmus diese Vorschrift als Funktion definiert, welche sich für jede Teilstrecke selbst aufruft, so handelt es sich um eine Rekursion. Programmiertechnisch enthält der Hauptteil einer rekursiven Funktion eine Abbruchbedingung, eine bedingte Anweisung, welche die Rückkehr der Funktion erzwingt.

Die Umsetzung dieser Iterationen bzw. Rekursionen in einer Programmiersprache kann auf verschiedenen Niveaus erfolgen und eignet sich daher für den Unterricht in einer heterogenen Lerngruppe. So kann für jede Generation einer fraktalen Kurve mit wenigen, einfachen Befehlen ein eigenes Programm geschrieben werden. Der Generator kann jedoch auch als Unterprogramm umgesetzt werden, welcher im Hauptprogramm aufgerufen wird. Für die Erzeugung der folgenden Generation kann ein Generator denjenigen der aktuellen Generation für jede Teilstrecke einbinden. Dadurch kann die Rekursion auf Niveau der Volksschule umgesetzt werden. Möglich ist auch die rekursive Programmierung in einem einzigen Programm, so dass damit jede beliebige Generation der Kurve erzeugt werden kann. Dies ist allerdings äusserst anspruchsvoll und für Lernende der obligatorischen Schule kaum eigenständig zu bewältigen. Allerdings kann zu einem passenden Zeitpunkt ein derartiges Programm für eine bestimmte fraktale Kurve den Lernenden zur Verfügung gestellt werden. Durch die Anwendung dieses Programms und dessen Anpassung für weitere Beispiele können die Schülerinnen und Schüler ebenfalls ihre Programmierfähigkeiten weiter entwickeln.

Beispielsequenz

Aufgabe 1

Zeichnen Sie auf einem A4-Blatt (Querformat) in der unteren Blatthälfte mit Bleistift eine Strecke der Länge 27cm. Wir nennen diese Strecke die Generation 0 der Kochkurve. Nehmen Sie das mittlere Drittel dieser Strecke weg (ausradieren) und fügen Sie zwei Seiten eines gleichseitigen Dreiecks hinzu (Generation 1 der Kochkurve; siehe Abbildung 1). Wie lang ist diese Generation der Kochkurve?

Wiederholen Sie diesen Vorgang für jede der vier Teilstrecken (Generation 2). Wie viele Teilstrecken erhalten Sie? Wie lang ist die zweite Generation der Kochkurve?

Wiederholen Sie den Vorgang erneut für jede dieser Teilstrecken (Generation 3). Berechnen Sie die Anzahl der entstandenen Teilstrecken ohne zu zählen und die Länge der 3. Generation der Kochkurve.

.Kochinsel_Abb1.png.
Abbildung 1. Kochkurve: Generationen und 0 und 1
Wie viele Teilstrecken wären es, wenn Sie den Vorgang ein viertes, fünftes, sechstes, ... Mal wiederholen würden?

Können Sie eine allgemeine Rechenvorschrift für die Anzahl der Teilstrecken und für die Länge der Kochkurve nach \(n\) Wiederholungen des Vorgangs formulieren (in Worten oder algebraisch)?

Aufgabe 2

Schreiben Sie Logo-Programme für mindestens die ersten vier Generationen der Kochkurve.

Aufgabe 3

Wenden Sie den Konstruktionsprozess für die Kochkurve auf die drei Seiten eines gleichseitigen Dreiecks an. Die entstehende Figur heisst Kochinsel (erste, zweite, dritte, ... Generation). Zeichnen Sie die ersten beiden Generationen von Hand und die ersten vier Generationen mithilfe der Programmiersprache Logo.

Aufgabe 4

Die Kochinsel ist die Figur, welche nach unendlich vielen Iterationen entsteht. Was können Sie über den Umfang und die Fläche der Kochinsel aussagen? Begründen Sie Ihre Antworten.

Aufgabe 5

Es sind zahlreiche weitere fraktale Kurven konstruierbar, wobei für die Generatoren eigene Erfindungen genutzt werden können. In Abbildung 2 sind jeweils die Generationen 0 und 1 von fraktalen Kurven vorgegeben. Ändern Sie die Programme aus Aufgabe 2 so ab, dass die ersten vier Generationen der Kurven gezeichnet werden.

.Kurve1.png.
(a)
.peano.png.
(b)

Abbildung 2. (a) Übung 1 und (b) Übung 2 (Peano-Kurve)
Entsprechend der Kochinsel können auch mit diesen Kurven Inseln erzeugt werden, wobei das Ausgangsbild ein Quadrat ist. Berechnen Sie für die der Übung 1 entsprechende Insel wiederum den Umfang und die Fläche.

Sie können eigene Generatoren für beliebige weitere fraktale Kurven verwenden und die Programme entsprechend ändern.

Lösungen zu den Aufgaben

Aufgabe 1

Stellt man sich vor, dass dieser Vorgang unendlich oft wiederholt wird, so entsteht die Kochkurve. Der schwedische Mathematiker Helge von Koch hat mit der nach ihm benannten Kurve bereits 1904 eine formale Beschreibung eines Fraktals geschaffen. Der Begriff Fraktal wurde jedoch erst in den 1970er Jahren durch den französisch-amerikanischen Mathematiker Benoît Mandelbrot eingeführt. In höheren Klassen kann man anstatt mit der vorgegeben Länge 27cm auch von der Einheitslänge 1 ausgehen. In diesem Fall gibt der Zähler des Terms für die Länge der Kurve die Anzahl der Teilstrecken an. In Abbildung 3 sind die Lösungen für die einzelnen Generationen angegeben.

Der Term \((4/3)^n\) strebt für wachsendes \(n\) gegen unendlich, da \((4/3)\) grösser ist als 1. Die Kochkurve ist folglich unendlich lang.

.Lsg_Aufgabe1.png.
Abbildung 3. Bilder und Länge einiger Generationen der Kochkurve

Aufgabe 2

Einzelne Programme in Logo für die ersten Generationen zu schreiben, ist für Primarschüler wenig herausfordernd, da nur die Befehle fd, rt beziehungsweise lt notwendig sind. Um gewisse Vereinfachungen für die Programmierung zu erzielen, wird jeweils der Generator der betreffenden Generation in einem Unterprogramm definiert, welches dann durch das Hauptprogramm aufgerufen wird. In jeder nächsthöheren Generation kann der neue Generator auf der Basis des aktuellen Generators programmiert werden. Dadurch kann die Rekursion bereits auf Primarstufe umgesetzt werden (siehe Zusammenfassung).

Das Hauptprogramm positioniert die Turtle links auf dem Grafikbildschirm, so dass die Kurve jeweils auf dem Bildschirm zentriert erscheint. Es ist vorteilhaft, diese Positionierung durch ein Unterprogramm (turtleinit) zu erreichen, welches für jede Genration gleich bleibt. Im Hauptprogramm selbst wird die Streckenlänge s der Generation 0 als Parameter eingegeben und durch Division durch eine 3er-Potenz die der Generation entsprechende Streckenlänge berechnet. Ausserdem werden die Unterprogramme turtleinit und gen1 für die erste Generation aufgerufen. Für die folgenden Generationen kann im Unterprogramm, welches den Generator definiert, jeweils der Generator der vorhergehenden Generation für jede Teilstrecke aufgerufen werden (also 4-mal). Das Hauptprogramm muss leicht angepasst werden. Es wäre sehr anspruchsvoll durch rekursive Programmierung ein einziges Programm zu entwerfen, welches für alle Generationen der Kochkurve passt. Als Ergänzung wird hier ein entsprechendes Programm in Python beigefügt (siehe Zusammenfassung).
from gturtle import *
def koch(s, n):
  if n == 0:
    forward(s)
    return
  koch(s / 3, n-1)
  left(60)
  koch(s / 3, n-1)
  right(120)
  koch(s / 3, n-1)
  left(60)
  koch(s / 3, n-1)
n = input("Generation?")
makeTurtle()
hideTurtle()
setPos(-240, 0)
right(90)
koch(600, n)

Aufgabe 3

Das Aussehen der ersten Generationen der Kochinsel kann aus Abbildung 3 abgeleitet werden. Für die Programmierung in Logo können die bestehenden Programme aus Aufgabe 2 verwendet werden. Das folgende Programm zeigt das Unterprogramm für den Generator 5 (welcher gemäss den Lösungen zu Aufgabe 2 auf dem Generator zur Generation 4 aufbaut), das Programm für die 5. Generation der Kochkurve und das Programm für die 5. Generation der Kochinsel, welches direkt auf dem Generator 5 aufbaut.

Durch eine leichte Anpassung des Programms zur rekursiven Programmierung der Kochkurve mit Python lässt sich jede beliebige Generation der Kochinsel zeichnen. Abbildung 4 zeigt die 10. Generation.
.kochinsel2.png.
Abbildung 4. 10. Generation der Kochinsel

Aufgabe 4

Aus den Lösungen zu Aufgabe 1 ist bekannt, dass die Kochkurve unendlich lang ist. Daher ist auch der Umfang der Kochinsel unendlich lang. Die Fläche ist jedoch endlich gross. Dies kann leicht erkannt werden: Wir können die Insel mit einem endlich grossen Blatt (zum Beispiel A4-Blatt) vollständig abdecken.

Die exakte Grösse der Fläche lässt sich auch berechnen. Für die Länge 1 der Dreiecksseite gilt \begin{align*} F_0 &= \frac{\sqrt{3}}{4},\\ F_1 &= \frac{\sqrt{3}}{4} + 3 · \frac{1}{3^2} · \frac{\sqrt{3}}{4} = \frac{\sqrt{3}}{4} · \left(1+\frac{1}{3}\right),\\ F_2 &= F_1 + 3 · 4 · \frac{1}{3^4} · \frac{\sqrt{3}}{4} = \frac{\sqrt{3}}{4} · \left(1+\frac{1}{3}+\frac{4}{3^3}\right),\\ F_3 &= F_2 + 3 · 4^2 · \frac{1}{3^6} · \frac{\sqrt{3}}{4} = \frac{\sqrt{3}}{4} · \left(1+\frac{1}{3}+\frac{4}{3^3}+\frac{4^2}{3^5}\right) \end{align*} und allgemein \[ F_n = \frac{\sqrt{3}}{4} · \left(1+\frac{1}{3}+\frac{4}{3^3}+\frac{4^2}{3^5}+\ldots+\frac{4^{n-1}}{3^{2n-1}}\right). \] Sei nun \[ s_n = \frac{1}{3}+\frac{4}{3^3}+\frac{4^2}{3^5}+\ldots+\frac{4^{n-1}}{3^{2n-1}} \] und damit \[ \frac{4}{3^2} · s_n = \frac{4}{3^3}+\frac{4^2}{3^5}+\ldots+\frac{4^{n-1}}{3^{2n-1}}+\frac{4^n}{3^{2n+1}}. \] Dann folgt \[ s_n-\frac{4}{3^2} · s_n = \frac{5}{9} · s_n = \frac{1}{3}-\frac{4^n}{3^{2n+1}} = \frac{1}{3} · \left(1-\left(\frac{4}{9}\right)^n\right) \] und es gilt \[ 1-\left(\frac{4}{9}\right)^n \xrightarrow{\hspace{0.5em} n\to\infty\hspace{0.5em}} 1, \] was bedeutet, dass \(s_n\) gegen \[ \frac{9}{5} · \frac{1}{3}=\frac{3}{5} \] konvergiert, wenn gegen \(\infty\) strebt. Damit folgt schliesslich \[ F_n \xrightarrow{\hspace{0.5em} n\to\infty\hspace{0.5em}} \frac{\sqrt{3}}{4} · \left(1+\frac{3}{5}\right)=\frac{2 · \sqrt{3}}{5} \approx 0.7. \] Für eine andere Ausgangsgrösse des gleichseitigen Dreiecks kann mit dem Quadrat der entsprechenden Länge einer Dreiecksseite multipliziert werden. Der Mathematiker Benoît Mandelbrot verglich natürliche Küsten mit fraktalen Kurven. Die Länge einer natürlichen Küste hängt von der Genauigkeit der verwendeten Karten und der Genauigkeit der Messung ab. Je detaillierter eine Küstenlinie ausgemessen wird, desto länger wird diese. Daraus ergibt sich auch ein Zusammenhang mit der Komplexität einer Küstenlinie (siehe didaktischer Kommentar im Baustein Box-Counting-Methode).

Aufgabe 5

Da die Änderung der Programme leicht möglich ist, werden hier lediglich einige Bilder der verschiedenen Generationen gezeigt.

.ueb_1_2.png.
Abbildung 5. Generationen zu den Übungen 1 und 2
Die Berechnung von Umfang und Fläche der Insel zu Übung 1 kann wie folgt analog zur Kochinsel erfolgen. Es gilt \begin{align*} U_n &= 4 · \left(\frac{5}{3}\right)^n \xrightarrow{\hspace{0.5em} n\to\infty\hspace{0.5em}} \infty\\ F_n &= 1 + 4 · \frac{1}{3^2} + 5 · 4 \frac{1}{3^4} + 5^2 · 4 · \frac{1}{3^6} + \, ... \\ &= 1 + \frac{4}{9} · \left(1+5 · \frac{1}{3^2}+5^2 · \frac{1}{3^4} + \, ...\right) \\ &= 1 + \frac{4}{9} · \frac{9}{4} \\ &= 2. \end{align*} Aus Abbildung 5 ist ersichtlich, dass die Kurven die zweidimensionale Fläche unterschiedlich «füllen». Daraus ergeben sich nicht ganzzahlige Dimensionen (siehe Baustein fraktale Dimension).

Didaktischer Kommentar

Der Baustein richtet sich an Lehrpersonen und bietet diesen einen passenden Einstieg in die Thematik Fraktale. Für die Schülerinnen und Schüler muss eine für die Schulstufe bzw. Klassenstufe geeignete Auswahl der Aufgaben getroffen werden. Dabei können auch Anpassungen einzelner Fragestellungen an das Leistungsniveau erforderlich sein. Für das Programmieren wird in der Primarstufe Logo und in der Sekundarstufe I Python empfohlen. Die Programme können auf einfachem Niveau geschrieben werden, wobei sich jedoch ein breites Spektrum für die Anwendung vertiefter Programmierkenntnisse öffnet (siehe Zusammenfassung und Aufgabe 2). Um die Programmierfähigkeiten der Lernenden zu fördern, kann das zur Verfügung stellen von Programmteilen oder lauffähigen Programmen sinnvoll sein. Die Schülerinnen und Schüler bauen diese Programmteile in ihren Programmen ein oder passen fertige Programme an neue Bedürnisse an. Letzteres bietet sich beispielsweise in höheren Klassen für die rekursive Programmierung mit Python an. So kann das rekursive Programm für die Kochkurve (siehe Lösung zu Aufgabe 2) den Lernenden abgegeben werden und diese ändern dieses Programm so ab, dass die Kochinsel und andere fraktale Kurven erzeugt werden können. Sie erhalten auf diese Weise ein zunehmend tieferes Verständnis der Funktionsweise des Programms.

Bei einigen Aufgaben können die Schülerinnen und Schüler kreativ Programmideen umsetzen und eigene fraktale Kurven erfinden. Die Berechnungen der Längen fraktaler Kurven sollten auch in der Primarstufe möglich sein (siehe Aufgabe 1). Für die Flächen genügt auf dieser Stufe eine approximative Bestimmung durch eine Abdeckung mit berechenbaren Figuren, im einfachsten Fall mit einem Quadrat. Auch in der Sekundarstufe I ist die exakte Berechnung der Fläche anspruchsvoll. Daher kann auch auf dieser Stufe eine Approximation durch eine Abdeckung mit möglicherweise mehreren, auch unterschiedlichen Figuren, vorgezogen werden.

In einigen Aufgaben wird auf die Bausteine fraktale Dimension und Box-Counting-Methode verwiesen. Es ist gut möglich, für die Lernenden eine passende Zusammenstellung von Aufgaben aus zwei oder allen drei Bausteinen zu machen. So kann beispielsweise die Kochinsel im Zusammenhang mit der Länge und der Dimension einer Küstelinie zu einer Lerneinheit verschmolzen werden (siehe didaktischer Kommentar im Baustein Box-Counting-Methode).

Quellenangaben und Weiterführende Literatur

  1. Paul S. Addison: Fractals and Chaos. An illustrated course. IOP Publishing Ltd., London, 1997.
  2. Kristin Dahl und Sven Nordqvist: Zahlen, Spiralen und magische Quadrate. Mathe für jeden. Oetinger Verlag, Hamburg, 1996.
  3. Benoît B. Mandelbrot: Die fraktale Geometrie der Natur. Birkhäuser, Basel, 1987.
  4. Heinz-Otto Peitgen, Hartmut Jürgens und Dietmar Saupe: Chaos and Fractals. New Frontiers of Science. Springer, New York, 1992.
  5. Thomas Schweingruber: Auf zum MATHerhorn. Spannende Mathematik für Kinder. Pestalozzianum Zürich, 2. Auflage, 2006.

Abbildungsverzeichnis

Alle Abbildungen wurden durch den Autor erzeugt.

Zurück PDF Übungen als PDF