Die Lorenz-Attraktor in RISC OS auf dem Raspberry Pi

Sie interessieren sich für ein neues Projekt Raspberry Pi? Die Lorenz-Attraktor stammt fast singlehandedly eine ganze Zweig der Wissenschaft, die Chaostheorie. Es scheint passend, dass ein Mann, der so viel von seinem Leben in Cambridge, Massachusetts gearbeitet, für ein Programm in Erinnerung bleiben, die auf einem Betriebssystem läuft entworfen in Cambridge, England.

Edward Norton Lorenz arbeitete an Systemen, das Wetter vorherzusagen. Er hatte ein einfaches mathematisches Modell konstruiert, wie die Atmosphäre Konvektion verhalten soll. Es gekocht, um ein System von drei gewöhnlichen Differentialgleichungen nach unten. Er wurde unter Verwendung einer der ersten Computer in den 1950er Jahren diese Gleichungen durch numerische Methoden zu lösen, weil es keine analytische Weise, sie zu lösen, ist. Dabei wurden Berechnungen oder Iterationen von Werten, um zu Hause wiederholt in das Ergebnis. Die Ausgabe eines Satzes von Berechnungen wurde in den Eingang eines anderen zugeführt. Dies ist eine gut bekannte Technik zuerst von Isaac Newton die Ergebnisse entweder nach Hause in auf die richtige Antwort erfunden, immer kleiner und kleiner, oder ins Unendliche schießen.

Was Lorenz fand, war eine Klasse von Gleichungen, die weder auf ein Ergebnis homed in noch ins Unendliche weggeschossen aber tat etwas dazwischen. Es produziert, was schien, ein Radsport Ergebnis mit den gleichen Werten Wiederholung in einem Muster zu sein. Eine genauere Untersuchung ergab, dass, obwohl die Ergebnisse Zyklus tat, sie nie wiederholt - mit anderen Worten, sie radelte ohne Ende blieb aber innerhalb gewisser Grenzen. Eine Art nie endende, nie wiederholenden endliche Menge von Zahlen.

Dieses Muster von Zahlen aus drei Werte, die in Bezug zueinander verändern würde. Wenn Sie diese Zahlen zu verwenden waren eine Position im dreidimensionalen Raum zu zeichnen, würden sie eine Linie oder Bahn beschreiben, die nie wiederholt, aber immer ging. Diese Form wurde später getauft ein fraktal, und diese Klasse von Fraktalen ist als bekannt seltsamen Attraktor. Egal, was die anfänglichen Startbedingungen waren, endete die Gleichungen immer auf dieser Kurve nach oben (daher der Name Attraktor, und weil es ist eine seltsame Sache zu passieren, wird das Wort komisch).

Die Form dieser Kurve ist eine verdrillte Achter-Schleife als Schmetterling Kurve oder der Lorenz-Attraktor bekannt. Im Jahr 1969 beschrieb Lorenz der Schmetterling-Effekt, der besagt, dass eine fast unbedeutende Veränderung der Anfangsbedingungen (wie der Flügelschlag eines Schmetterlings) eine große Änderung im Ergebnis eines iterativen Systems führen könnte.

Alles, was Lorenz hatte seine Zahlen zu visualisieren mit war eine grobe Fernschreiber, aber in diesen Tagen haben wir High-Speed-Computer mit Grafikdisplays Lorenz von nie geträumt. Es ist vergleichsweise leicht, seine Kurve näher als Lorenz je könnte, um zu sehen.

bild0.jpg

Die Umsetzung der BASIC-Sprache in RISC OS macht es einfach, ein Programm zu schreiben, das Lorenz-Attraktor angezeigt werden sehr schnell und sehr detailliert. Dies wird im folgenden Code gezeigt.

 10: REM Die Lorenz-Attraktor - von Mike Cook20: MODE 2830: CLS: CLG40: PROC_Size50: S = Ymax% / 80: SX = Xmax% / 70: SZ = 260: N% = 70: F% = 0: INC = 4E-370: SX% = Xmax% / 2: SY% = Ymax% / 2: SZ% = 080: X = -6.5: Y = -8.8: Z = 2090: P1 = 10: P2 = 28: P3 = 2,66666100 : 110: REPEAT120: N% = N% + 1130: WENN N% = 0 N%> 200 THEN: GCOL 0, RND (63) TINT 255.140: D1 = P1 * (YX) 150: D2 = P2 * XYX * Z160 : D3 = X * Y-P3 * Z170: X = X + D1 * INC180: Y = Y + D2 * INC190: Z = Z + D3 * INC200: PROC_PLOT (X, Y) 210: TIME = 0220: REPEAT230: UNTIL ZEIT> 0240: B% = ADVAL (-1) 250: BIS B% lt;> 0260: A $ = GET $ 270: IF A $ = "s" THEN * screen Attract280: END290: 300: DEF PROC_PLOT (X, Y ) 310: X% = X * SX: Y% = Y * S320: X% = X% + SX%: Y% = Y% + SY% 330: IF F% = 0 THEN MOVE X%, Y% ELSE DRAW X%, Y% 340: F% = 1: REM Bewegung nur der erste time350: ENDPROC360: 370: DEF PROC_Size380: SYS "OS_ReadModeVariable", - 1,3 auf ,, Ncolours% 390: SYS "OS_ReadModeVariable", - 1, SYS "OS_ReadModeVariable", - 1,5 bis Yfact% 410 ,,:: 4 bis Xfact% 400 ,, SYS "OS_ReadModeVariable", - 1,11 TO Xlim% 420 ,,: SYS "OS_ReadModeVariable", - 1,12 ,, YLim% 430: Xmax% = Xlim% lt;

Die anfänglichen Startpositionen sind in Zeile 80 und die Parameter der Gleichung sind in Zeile 90. Die Hauptschleife im Programm geht von der Linie 110 bis 280. Zeile Dieses einfach wiederholt sich, bis Sie eine beliebige Taste der Tastatur drücken gegeben gegeben. Wenn die gedrückte Taste eine S ist, dann wird ein Bildschirmausdruck ein Bild des Bildschirms in Sprite-Format zu speichern getan. Die Schleife arbeitet durch Linien 140 bis 160 die Differenz in Werten von der letzten der vorliegenden Iteration finden. Die Iteration Berechnung wird dann mit der Variablen skaliert INC, , die festgelegt ist 0.004 in den Zeilen 170 bis 190 sein, und die resultierende Zahl wird auf dem Bildschirm dargestellt. Beachten Sie, wie nur die x und y Werte aufgetragen sind, einen Blick in die Suche geben z-Achse. Sie können die beiden Variablen in den übergebenen ändern PROC GRUNDSTÜCK rufen zwei beliebige Werte sein, um eine andere Sicht auf die Kurve zu bekommen. Sie können den Mähdrescher x, y, und z in diesem Aufruf Werte einen beliebigen Winkel von orthographischer Projektion zu geben, wenn Sie möchten. Beispielsweise auf den Code folgende Änderungen vorgenommen werden eine isometrische Ansicht der Kurve geben:

 42: C1 = 0,707107: C2 = 0,40824143: C3 = 0,816597: C4 = -C2200: PROC_PLOT (C1 * X + C1 * Z, C2 * X + C3 * Y + C4 * Z)

Linien 210 bis 230 machen einfach eine Zeitverzögerung, es länger zu machen, indem die Zahl am Ende der Linie 230 zu erhöhen oder ganz durch Überspringen diese drei Zeilen zu eliminieren.

Das GRUNDSTÜCK Verfahren selbst einfach skaliert die zwei Punkte und dann verschiebt sie in der Mitte des Bildschirms. Schließlich, wenn es das erste Mal Plotten ist, gibt es ein Bewegung Kommando- sonst gibt es ein Unentschieden aus den letzten Befehl Punkt Grafiken.

Das Größe Verfahren erhält die Größe des Bildschirms in Pixeln, sodass die Grafik den Bildschirm ausfüllt, und Linien 120 und 130 ein bisschen Abwechslung hinzufügen, indem Sie die Farbe der Linie alle 200 Punkte zu ändern.

Menü