

		Chaos und Apfelmnnchen


Wer und was ist eigentlich Chaos ? Wie schmeckt es ?
Chaos ist in dynamischen Systemen zu finden, in die keine
stochastischen (zufallsabhngigen) Faktoren einwirken und
trotzdem nicht vorhersagbar sind. Eigentlich widerspricht es dem
gesunden Menschenverstand, da etwas, was nur nach festen Regeln
erzeugt wurde, nicht vorhersagbar ist. Das ist auch prinzipiell
richtig, aber praktisch werden sehr kleine nicht bercksichtigte
Faktoren so sehr verstrkt, da nur eine kurzfristige Vorhersage
mglich, eine langfrtistige aber fast unmglich ist. Ein gutes
Beispiel hierfr ist das Wetter. In der Regel ist es richtig, was
die Wetterfrsche prognostiziert haben, aber hufig liegn sie mit
ihren Vermutungen auch daneben. Wie kommen kommen Wettervorher-
sagen zustande? Dafr hat man sich mal wieder die Natur als Bei-
spiel genommen. Mutter Natur berechnet Tag fr Tag das Wetter an-
hand aller nur erdenklichen Daten. Dies versucht man mithilfe von
mathematischen Modellen nachzumachen. Also fttert man den Compi
mit allen zur verfgung stehenden Daten und der berechnet das
Wetter dann fr die nchste Stunde. Die Ergebnisse dieser Rech-
nung nimmt er dann als neue Eingabedaten und rechnet noch eine
Stunde weiter. Dies wiederholt sich nun 24mal. Jetzt wird deut-
lich, da, wenn eine winzig kleine Abweichung nach der ersten
Stunde, verursacht durch z.b einen nicht zur Verfgung stehenden
Wert, auftritt, sich diese kleine Ungenauigkeit immer mehr ver-
grert, so da der Wert fr den nchsten Tag absolut falsch ist.
Das eben kennengelernte Verfahren, die Ausgabedaten der 1.Rech-
nung als Eingabedaten der 2.Rechnung zu verwenden, nennt sich
Rckkopplung oder Iteration. 

Iteration bedeutet: Mit bestimmten Daten wird ein Rechenprozess
ausgefhrt. Die Ergebnisse dieses Rechenprozesses werden in dem
nchsten Durchlauf als Eingabedaten verwendet.

Dieses Chaos ist bei vielen Prozessen zu erkennen:
 - in der Wirtschaft
 - bei Geburtsraten und Epedemien
 - bei Wasserwirbeln, Laser, Gehrinstrmungen,etc.

Es gibt einfachen mathematische Funktionen, mit denen man mit
Hilfe der Rckkopplung genau diesen bergang vom berechenbaren
zum Unberechenbaren, zum CHAOS !!!, grafisch darstellen kann.
Dadurch kann man versuchen zu berechnen, wann eine Vorhersage
mglich ist.

Attraktoren sind "Anziehugs"- Punkte, Linien, Flchen und Vo-
lumen, auf die sie ein dynamischer Prozess einpendelt. Man unter-
scheidet dabei endliche und unendliche Attraktoren.
Dazu folgende Beispiele :
Ein Fadenpendel kommt aufgrund der Luftreibung irgendwann in
ENDLICHER Zeit zum Stillstand. Der tiefste Punkt der Pendelbewe-
gung ist also der Attraktor.
Wenn man untersucht, zu welchen Werten die Iteration einer Folge
fhrt, dann nimmt man unterschiedliche Werte als Eingabedaten
(Z(0), die in der Klammer stehende Zahl oder die Variable ist ein
Index bzw. eine Indexvariable!) und iteriert sie einige male auf
der Folge und vergleicht dann die Ausgabedaten.
Untersucht man, zu welchen Werten die Iteration der Folge
X(n+1) = X(n)^2 fhrt, so stellt man fest, da fr Betrag von
(X(0)) < 1 die Folge sich Null nhert und fr Betrag von
(X(0)) > 1 gegen Unendlich luft. In diesem Fall liegen ZWEI
Attraktoren vor: Null und Unendlich. Man kann sogar die Grenze
angeben : X(0) = 1. Denkt man sich einen Kreis mit dem Radius 1,
so ist es offensichtlich, da alle Punkte, die innerhalb des
Kreises liegen, den Attraktor Null haben,alle auerhalb dieses
Kreises liegen im Einflubereich des Attraktors Unendlich. Die
Grenze ist der Kreisumfang.

So weit, so gut...
Nun wissen wir schon, was eine Iteration und ein Attraktor ist.
Aber was hat das alles mit Apfelmnnchen zu tun ?
Also, ich glaube, um das zu erlutern, mssen wir erstmal etwas
ber die komplexen Zahlen "lernen". Diejenenigen die das schon
kennen, knnen diesen Abschnitt ruhig berspringen, da hier nur
ganz allgemeine Regeln zu den komplexen Zahlen erklrt werden.

Komplexe Zahlen bestehen aus zwei Teilen. Der erste Teil ist eine
REAL-Zahl (var x : Real), der zweite Teil eine REAL-Zahl, die mit
Wurzel aus (-1) multipliziert wird. Wurzel aus (-1) hat einen
Namen bekommen, und zwar klein i. Die komplexe Zahl wird folgen-
dermaen geschrieben:
1.Teil(Realteil) + 2.Teil(Imaginrteil, d.h. unvorstellbar, da
Wurzel aus (-1) nicht definiert ist). Z.B.: 0+0*i oder 3+7*i oder
3+Wurzel aus (7)*i. Diese Zahlen kann man nun darstellen, und
zwar in der Gauschen Zahlenebene. Die Gausche Zahlenebene ist
ein Koordinatensystem, bei dem auf der X-Achse der Realteil, auf
der Y-Achse der Imaginrteil der komplexen Zahl zu finden ist.
Jetzt kann man die komplexen Zahlen, wie bei "normalen" Zahlen
gewohnt, in dem Koordinatensystem durch einen Punkt darstellen.

Jetzt mal endlich was von den Apfelmnnchen...
Jeder Punkt in der Gauschen Zahlenebene hat einen bestimmten
Abstand zu dem Ursprung. Wenn nun dieser Abstand zum Ursprung
nach 100 Iterationen auf der Folge Z(n+1) = Z(n)^2 + C (n ist ein
Index, der die n. Iteration auf der Folge angibt; das Ergebnis
ist die Zahl Z(100)) grer ist als 2, dann liegt der Punkt im
Einflubereich des Attraktors Unendlich. Aber wenn nach der 100.
Iteration die Zahl Z(100) kleiner ist als 2, dann NIMMT MAN AN,
da der Punkt zu dem Attraktor NULL gehrt. Ganz korrekt ist es
nicht bereits nach 100 Iterationen das zu behaupten, da z.B. nach
der 105. Iteration mehr Punkte die 2er- Grenze berschritten
htten, aber je mehr Iterationen, desto grer der Rechenaufwand,
also wird auch die Rechenzeit grer. Damit der Rechenknecht mit
der Eben genannten Folge Z(n+1) = Z(n)^2 + C etwas anfangen kann,
mu sie soweit umgeformt werden, da kein i mehr in ihr enthalten
ist, da Wurzel aus -1 (i) nicht def. ist! Mithilfe spezieller
Rechenregeln fr komplexe Zahlen habe ich es nun soweit umge-
formt, da folgende Gleichungen (Plural ist schon richtig, denn
wegen der speziellen Regeln sind aus der einen zwei entstan-
den...) entstanden sind:
(Zr(n) bedeutet: Realteil der komplexen Zahl Z mit der Indexva-
riablen n)
(Zi(n) bedeutet: Imaginrteil der komplexen Zahl Z mit der Index-
variablen n)

             Zr(n+1) = Zr(n) * Zr(n) + Zi(n) * Zi(n) + Cr
             Zi(n+1) = 2 * Zr(n) * Zi(n) + Ci

Damit wir jetzt dem Compi die Aufgabe stellen knnen, mssen wir
wissen, was C und was Z ist.
Um das Apfelmnnchen (eingentlich MANDELBROTMENGE, da sie von dem
franz. Mathematiker Benoit B. Mandelbrot entdeckt wurde) zu er-
zeugen, legen wir ein Raster ber den Bildschirm.
Jede Bildschirmkoordinate ist ein Rasterfeld. Der zu untersuchen-
de Bereich (in dem sich das Apfelmnnchen befindet) geht auf der
X-Achse von -2 bis 1.3 und auf der Y-Achse von 1.25 bis -1.25. Um
jetzt jedem Rasterpunkt seine Koordinate zu geben, berechnen wir
zuerst die Spalten und Zeilenbreite des Koordinatensystems, indem
wir den X-Bereich durch die Anzahl der X-Koordinaten des Bild-
schirmes (z.B. 640 bei VgaHI) teilen und in eine Variable schrei-
ben. Das gleiche Verfahren wenden wir bei der Y-Achse an (bei
VgaHI durch 480 teilen). Jetzt berechnet man die Koordinate eines
Punktes folgendermaen :

Beispiel: 	Punkt : (138/11) 

 X-Bereich : 3.3 {1.3+2} / 640 = 0.0051563 Einheiten pro Grafikp.
             auf der X-Achse 

 Y-Bereich : 2.5 {1.25+1.25} / 480 = 0.0052083 Einheiten pro
             Grafikp. auf der Y-Achse 

(Die beiden Werte sollten mglichst bereinstimmen , da sonst die
Verzerrung des Apfelmnnchens zu gro wird)

	Berechnung des Wertes der 138. X-Koordinate :
		-2 + 138 * 0.0051563 = -1.2884306
	Berechnung des Wertes der 11. Y-Koordinate :
		1.25 - 11 * 0.0052083 = 1.1919167

	=> Bildschirm-Punkt (138/11) = 
	    Koordinatenpunkt (-1.2884306/1.1919167)

Dieser Koordinatenpunkt ist jetzt das C in der Berechnungsformel,
und zwar ist der X-Wert der Realteil und der Y-Wert der Imagi-
nrteil der komplexen Zahl C.

Jetzt fehlt nur noch die komplexe Zahl Z mit dem Real- und Imagi-
nrteil. Wie bei dem Beispiel mit dem Wetter, sind bei dieser
Folge die Z-Teile erst die Eingabe-, dann Ausgabe-, dann wieder
Eingabedaten, usw... Bei der 1. Iteration setzt man das Z einfach
auf Null (beide Teile =>0+0i). Der Vorgang der Iteration wird 100
mal wiederholt, bis man die Zahl Z(100) hat, dann kontrolliert
man zu welchem Attraktor diese Zahl (also der Punkt) gehrt, und
frbt ihn dementsprechend ,z.B. endlicher Attraktor schwarz, un-
endlicher Attraktor wei. So wie hier beschrieben kann man das
nun nicht programmieren, da der 1.Punkt nach der 100. Iteration
einen sehr groen Wert liefert, so da TP mit der Fehlermelung
"Floating Point overflow" abbricht. Also kontrolliert man in dem
Programm nach jeder Iteration, ob der Wert ber zwei gestiegen
ist. Wenn das der Fall ist, wird die Variable UnendlicherAttraktor
auf true gesetzt. Aber wenn nach der 100. Iteration immer noch
nicht die 2er Grenze berschritten wurde, wird Unendlicher-
Attraktor auf false gesetzt. Spter wird entsprtechend gefrbt.

Jetzt das Listing, zum zeichnen eines s/w - Apfelmnnchens :

program Apfeldemo;
uses crt,graph;
var start_r,start_i,end_r,end_i : real;
    spalt_r,spalt_i : real;
    max_x,max_y,i,j,k : integer;
    Cr,Ci,Zr,Zi,Zr_n,Zi_n : real;       {Zi_n : Imaginrteil}
                                                      {von Z_neu}
    treiber,modus : integer;
    unendlicherAttraktor : boolean;

procedure iterationen;
begin
  for k := 1 to 100 do begin
                                {100 Iterationen auf jedem Punkt}
    Zr_n := Zr * Zr - Zi * Zi + Cr;
                          {Das Ergebnis der Umformung der Apfel-}
    Zi_n := 2 * Zr * Zi + Ci;
                           {mnnchen - Folge Z(n+1) = Z(n)^2 + C}
    Zr := Zr_n;
                               {Ausgabedaten(Ergebnis) werden zu}
    Zi := Zi_n;
                                                   {Eingabedaten}
    if sqrt(Zr*Zr + Zi*Zi) > 2 then begin
                                      {berprfung des Abstandes}
      unendlicherAttraktor := true;
                                        {mit Hilfe von Phytagoras}
      exit;
    end;
  end;
  unendlicherAttraktor := false;
end;

procedure Welcher_Attraktor;
begin
  start_r := -2; end_r := 1.3;	
  start_i := 1.25; end_i := -1.25;

{Der Bereich kann beliebig gesetzt werden,aber in diesem Bereich
ist das Apfelmnnchen zu finden}

  max_x := 640;			    
  max_y := 480;

{Die Anzahl der Koordinaten auf X- und Y-Achse}

  Spalt_r := (end_r - start_r) / max_x;    
  spalt_i := (end_i - start_i) / max_y;

{Berechnung der Spaltengre des Rasters}

  for i := 0 to max_x do begin

{Jeder Bidschirmpunkt wird untersucht}

    Cr := start_r + i * spalt_r;

{Jeweils wird die Koordinate des Rasters berechnen}

    for j := 0 to max_y do begin
      putpixel (i,j,15);
      Ci := start_i + j * spalt_i;
      Zr := 0.0;			    
      Zi := 0.0;

{Das Z wird auf Null gesetzt}

      Iterationen;
      if unendlicherAttraktor then putpixel (i,j,15)
                                               {"...(i,j,k)" fr}
      else putpixel (i,j,16);
                                            {farbige Darstellung}

{Frbung nach Art des Attraktors}

    end;
  end;
end;

begin
  treiber := detect;
  initgraph (treiber,modus,'');
  welcher_Attraktor;
  readln;
end.

Bei diesem Programm dauert die Erschaffung eines Apfelmnnchens
sehr lange. Man kann, um Zeit zu sparen, die Koordinaten auf z.B.
max_x := 100; max_y := 100; setzen, so da das Programm ca. 30.72
mal schneller wird! Auch dauert das Wurzel ziehen sehr lange.
Stattdessen kann man die Phytagoras-Gleichung folgendermaen um-
formen :

statt    if sqrt(Zr*Zr+Zi*Zi) > 2 then begin...
         if Zr*Zr+Zi*Zi > 4 then begin...

Das bewirkt eine erhebliche Beschleunigung!
Bunte Apfelmnnchen erhlt man, wenn man Iteration fr Iteration
eine andere Farbe whlt. Z.B. kann man dann die Punkte, die nach
der 1.Iteration den unendlichen Attraktor offenbaren, blau frben.
Die nach der 2. Iteration grn, ... .
Auf das Programm bezogen bedeutet das, da man "putpixel (i,j,k)"
{k ist die Zhlvariable der Iterationen} einfgt...
Natrlich mchte man seine gezeichneten Apfelmnnchen gerne ab-
speichern und dann wieder laden, was weitere Optionen fr ein gu-
tes Apfelmnnchenprogramm wren. Auerdem kann man, indem man den
Bereich verndert (verkleinert) in die Mandelbrotmenge "Zoomen". 
Aber man sollte darauf achten, da man keinen Ausschnitt er-
wischt, in dem nur eine Farbe vertreten ist, denn das ist sehr
langweilig, weil dann auch in der Vergrerung nur eine Farbe zu
sehen ist, irgendwie logisch...
Aber direkt am Rand des Apfelmnnchens sind wunderschne Gebilde
zu finden !!! Hier eine Stelle, die IN FARBE sehr gut aussieht : 

	Start_r : -1.7681516673
	End_r    : -1.7681379126
	Start_i  : 0.0051910676297
	End_i     : 0.0051900322495

Diese Methode (durch ausprobieren gute Stellen zu finden) ist na-
trlich sehr umstndlich. Besser wre eine Methode, bei der man
ein kleines Kstchen ber das Apfelmnnchen mit den Cursortasten
steuert, und wenn man Return drckt vergrert der Compi genau
diesen Ausschnitt.

Viel Spa...

	SkyLab


