QUICK Ecke Teil 11 von Harald Schönfeld Das vorige Mal beschäftigten wir uns mit der Einbindung von Fließkommazahlen in QUICK. Heute sehen wir uns eine interessante Anwedung zu diesem Thema an. Eine einfache Gleichung... Sehen Sie sich bitte die folgende, ganz einfache, quadratishe Gleichung an: XN1 = PAR - XN*XN Diese Gleichung gibt an, wie XN1 von einer Konstanten PAR (z.B. 0.5) und von XN abhängt. Der Computer gibt uns nun die Möglichkeit, diese Gleichung zu iterieren. Das bedeutet folgendes: Wir wählen uns einen Startwert für XN (z.B. 0) und ein festes PAR. Dann berechnen wir XN1. Dieses so gewonnenen XN1 schreiben wir in XN, und berechnen so die Gleichung ein weiteres mal. Das erhaltene XN1 schreiben wir wieder in XN, und so weiter. Wir setzen also die Lösung der Gleichung immer wieder in sich selbst ein. Fixpunkte Sehen wir uns an, welche Werte sich ergeben. Als Startwerte nehmen wir PAR=0.5, XN=0. Als Ergebnis XN1 erhalten wir 0.5. Das setzen wir als XN wieder in die Gleichung ein, und erhalten 0.25. Wie es weitergeht, zeigt die Tabelle: XN XN1 1. Iteration: 0 0.5 2. Iteration: 0.5 0.25 3. Iteration: 0.25 0.4375 4. Iteration: 0.4375 0.309 ... Uns so weiter. Wie man sehen kann, ergeben sich ständig neue Ergebnisse, was kein Wunder ist, denn wir setzten ja dauernd verschiedene XN in die Gleichung ein. Aber irgendwann ergibt sich ein interessantes Phänomen. Wir erhalten plötzlich das selbe Ergebnis wie in der vorherigen Iteration! Wie kommt das? Nun, sobald die Lösung der Gleichung (XN1) ein einziges Mal gleich XN ist, haben wir einen stabilen Punkt erreicht, denn wir setzen dann ja XN1 wieder ein, aber das ist ja das selbe wie vorher XN war. Einen solchen Punkt XN nennt man Fixpunkt. Was passiert wenn wir den Startwert XN ändern (also z.B. 0.2 anstatt 0)? Zunächst erhalten wir zwar andere Ergebnisse, aber nach einer Weile landen wir doch beim selben Fixpunkt! (man muß nur darauf achten, daß XN nicht größer als 1 ist). Was passiert, wenn wir PAR ändern? Hier ergeben sich interessante Phänomene, mit denen sch dann unser QUICK-Programm beschäftigen wird. Eine Änderung von PAR führt auch zu einer Änderung des Fixpunkts der Gleichung. Es ändert sich aber nicht nur die Lage des Fixpunkts, sondern, es kann sein, daß die Gleichung mehrere solcher Fixpunkte aufweist und dann ständig zwischen diesen hin und her springt. Sie kreiselt also zwischen einigen (2, 4, 8,...) Fixpunkten herum. Solche Fixpunktmegen nennt man dann Orbits (Umlaufbahnen). Der Feigenbaum Nun, das Ganze klingt bisher sicher recht trocken, aber wenn nun ein Stichwort fällt, geht dem einen oder anderen vielleicht ein Licht auf. Chaos Unsere schöne Gleichung, die sich zunächst so vorhersehbar verhält, und einen, oder mehere Fixpunkte liefert, ist ein sogenanntes choatisches System, denn irgendwann, gibt es so viele "Fixpunkte", die so nah aufeinander folgen, daß man, egal wie genau man rechnet (d.h. egal wieviele Iterationen man macht und egal auf wieviele Stellen hinter dem Komma man achtet), diese Fixpunkte nicht mehr richtig trennen und beobachten kann. Es scheinen sich völlig wahllose Iterationsergbenisse zu ergeben. Da wir nicht bloß einen Taschenrechner, sondern einen Computer vor uns haben, liegt es nahe, die Ergebnisse der Gleichung nach genügend vielen Iterationen (50 bis 200), d.h. deren Fixpunkte, grafisch darzustellen. Dazu tragen wir nach rechts den Parameter der Gleichung (also PAR) auf, den wir etwa von 0.4 bis 1.6 durchlaufen lassen, und nach oben den/die gewonnenen Fixpunkt(e). Wir gehen also so vor: In einer Hauptschleife, wird der Funktionsparameter PAR von 0.4 bis 1.6 in kleinen Schritten (0.004) erhöht. Mit diesem Wert (und dem Startwert 0 für XN) starten wir die Iteration unserer Gleichung. Wir rechnen die Gleichung dann etwa 100 mal durch, wobei wie jeweils das erhaltene XN1 in XN einsetzen. Nach diesen 100 Iterationen nehmen wir an, daß sich die Gleichung inzwischen auf den Fixpunkt eingependelt hat. Wir plotten diesen Punkt nun (X-Position PAR, Y-Pos. XN). Da wir aber nicht nur einen Fixpunkt, sondern sogar ganze Orbits haben, rechnen wir nun ca. 20 weitere Iterationen durch und plotten auch deren Ergebnisse. Haben wir nur einen Fixpunkt, werden wir also 20 mal den gleichen Punkt plotten, haben wir einen Orbit, so werden wir 2, 4 oder mehr verschiedene Punkte setzen. Sind wir schon im chaotischen Bereich ( PAR > 1.4), so erscheinen dann eben 20 "willkürlich" in Y-Richtung verteile Punkte. Und die Hauptschleife beginnt mit um 0.004 erhöhtem PAR von vorne. Das Ergebnis dieser Berechnungen ist der sogenannte Feigenbaum (benannt nach seinem "Entdecker" Feigenbaum). Ein astähneliches Gebilde, das sich immer schneller immer öfter teilt, und wo im Kleinen immer wieder die gleichen Strukturen wie im Großen zu sehen sind. Das QUICK-Programm Das Program tut im Großen und Ganzen genau das oben Beschriebene: Zunächst werden die Startwerte in PAR, und in INC gesetzt. INC wird in der Hauptschleife zu PAR addiert, so daß wir damit die X-Achse durchlaufen. Außerdem werden einige Skalierungsfaktoren gesetzt, denn wir müssen ja den Bereich von Y(-1 bis 1) und X(0.4 bis 1.6) auf dem Bildschirm Y(0 bis 191) und X(0 bis 319) darstellen. Nun schalten wir Grafik 8 ein. Dann starten wir die Hauptschleife. Hier wird die Gleichung zunächst MAXFORGET mal durchlaufen. MAXFOGET ist am Anfang klein (ca.40) und wird mit der Zeit (wenn PAR wächst) vergrößert, denn es dauert dann länger bis die Gleichung sich auf die Orbits einpendelt. Dann starten die Plot- Iterationsschleife, wo wir MAXPIX mal das Ergebnis plotten. Nun erhöhen wir FORGETZAE und PIXZAE um 1. Wenn diese einen bestimmten Wert erreicht haben, setzen wir sie wieder auf Null und erhöhen MAXFORGET bzw. MAXPIX, um eine höhere Genauigkeit zu erzielen. Dann beginnt die Hauptschleife wieder von vorne. Das Programm muß irgendwann mit RESET abgebrochen werden. Das Unterprogramm PIXEL bekommt zwei Fließkommakoordinaten übergeben, rechnet sie um, überträgt sie in Integervariablen und setzt sie auf den Schirm. Wenn Sie das Programm starten, sehen Sie, wie sich der Feigenbaum langsam aufbaut. Pro X-Koordinate sind ja immerhin bis zu 200 Gleichungsdurchläufe nötig. Sie können ja auch mal an manchen Parametern drehen, aber dadurch erreichen Sie nur eine Verzerrung und eine Verfeinerung des Bildes. Etwas wirklich neues kann man nicht sehen, denn die Gleichung ergibt nun mal diese Ergebnisse. Quick-Sourcetext D1:QE11.QIK ---------------- Length: $0672 Free : $70F9 ---------------- * QUICK ECKE Teil 11 * Fliesskommazahlen in QUICK Teil 2 * (c) '91 by H.Schoenfeld * Chaotische Systeme: Der Feigenbaum * Iteration der Gleichung: * XN_1=PAR-XN*XN * Zuerst Fliesskomma-Library einbinden INCLUDE (+ D:MATH.LIB )+ BYTE (+ I,MAXFORGET,MAXPIX,FORGETZAE,PIXZAE )+ ARRAY (+ XN(6),PAR(6),XNQ(6),TEMP(6) XFAK(6),YFAK(6),INC(6),DX(6),DY(6) )+ MAIN * Variablen und Konstaten setzen .AFP("0.2",PAR) .AFP("190",XFAK) .FMUL(PAR,XFAK,DX) .AFP("70",YFAK) .AFP("120",DY) .AFP("0.004",INC) * Grafik- und Iterationsparameter MAXFORGET=45 MAXPIX=4 * Grafik 8 CLOSE(6) OPEN(6,12,8,"S:") SETCOL(2,0,8) SETCOL(1,0,0) COLOR(1) FORGETZAE=0 PIXZAE=0 REPEAT * Voriterationsschleife die zum * "Einpendeln" dient I=0 .AFP("0.0",XN) REPEAT * XN=PAR-XN*XN .FMUL(XN,XN,XNQ) .FSUB(PAR,XNQ,XN)) I+ UNTIL I=MAXFORGET * Hauptiterationschleife, deren Werte * dann geplottet werden I=0 REPEAT .FMUL(XN,XN,XNQ) .FSUB(PAR,XNQ,XN)) .PIXEL(PAR,XN) I+ UNTIL I=MAXPIX * Ierationsgleichungsparameter erhoehen .FADD(PAR,INC,PAR) * Genauigkeit mit der Zeit erhoehen FORGETZAE+ IF FORGETZAE=1 IF MAXFORGETZAE<255 MAXFORGET+ ENDIF FORGETZAE=0 ENDIF PIXZAE+ IF PIXZAE=9 * je kleiner, je mehr * Punkte MAXPIX+ PIXZAE=0 ENDIF UNTIL 1=0 ENDMAIN * Ein Pixel setzen PROC PIXEL IN ARRAY (+ P(6),X(6) )+ LOCAL WORD (+ BX,BY )+ BEGIN * X-Koordinate anpassen * "BX=DX-P*XFAK" .FMUL(P,XFAK,P) .FSUB(P,DX,P) .FPI(P,BX) * Y-Koordinate anpassen * "BY=DY-X*YFAK" .FMUL(X,YFAK,X) .FSUB(DY,X,X) .FPI(X,BY) PLOT(BX,BY) ENDPROC