Rule 90

Vor kurzem habe ich angefangen „Think Complexity“ zu lesen — ein leicht verständliches, interessantes Buch, in dem unter anderem Zelluläre Automaten angesprochen werden. Und zwar die von Stephen Wolfram — ja der Stephen Wolfram, der Mathematica und Wolfram|Alpha entwickelt hat (vermutlich jedoch nicht allein). Zelluläre Automaten eignen sich natürlich sehr gut, pixelige Bilder zu erstellen, wie der Conways-Game-of-Life-Post beweist. Daher, lasse ich erstmal ein Bild sprechen.

Wolframs Rule 90

Die Idee ist, dass man mit einem eindimensionalen Zustand startet, und einen neuen Zustand daraus mit lokalen Regeln, die je einen rechten und linken Nachbarn berücksichtigen, erzeugt. Stellt man diese Zustände untereinander da, entstehen Strukturen, wie die, die an ein Sierpinski-Dreieck erinnert. Die Erklärung, wie genau diese Regeln lauten, und wie sie definiert sind, überlasse ich passenderweise Wolfram|Alpha.

Und damit ich auch etwas sage, das tiefsinnig erscheint: Die Dreieckige Form entspricht übrigens dem Vorwärtslichtkegel des Startwertes in der ersten Zeile. Die \(y\)-Achse entspricht hier schließlich einer Zeit und die „Lichtgeschwindigkeit“, mit der Beeinflussungen propagieren können, ist 1 Pixel pro Iteration.

Den Quellcode gibt es natürlich bei GitHub. Wenn auch nur in einem „kleine Fingerübungen in C“-Repo.

Für Liebhaber, hier noch eins im original 1982 Retro-Look.

Wolframs Rule 150

Passend zur Jahreszeit, wie ich finde.

Schmetterlingseffekt

Differentialgleichungen numerisch zu lösen macht mehr Spaß, als man erwarten würde, wenn man es hört. Und sobald man den ersten Runge-Kutta-Algorithmus in einer kommerziellen Interpretersprache geschrieben hat, bemerkt man, dass dieses Skript doch recht lange braucht.

Für dieses Problem gibt es zwei Lösungen: Entweder wird man zum Guru und wendet irgendeine okkulte Matlab-Magie an, um das Programm schneller laufen zu lassen, oder man schreibt das Programm in einer schönen Sprache neu. In C zum Beispiel.

Lorenzattraktor

Ich habe mich für den einfachen Weg entschieden und wenig überraschend eine Tempoverbesserung von Faktor \(\sim 140\) festgestellt. Jedenfalls für diesen Lorenzattraktor.

\begin{align} \dot{X} &= a(Y - X) \\ \dot{Y} &= X(b - Z) - Y \\ \dot{Z} &= XY - cZ \\ \end{align}

Geplottet habe ich die Werte dann mit Python und matplotlib.

Warum ich den Titel „Schmetterlingseffekt“ gewählt habe? Naja, das Bild hier sieht ein wenig nach einem Schmetterling aus. Und tatsächlich wurde der Schmetterlingseffekt nach diesem Differentialgleichungssystem benannt — und nicht nach der Geschichte aus Jurassic Park.

Er bewegt in Peking die Flügel, und im Central Park gibt’s Regen statt Sonne.

Dr. Ian Malcolm (1993)

Wie genau der Lorenzattraktor mit Chaos zusammenhängt, habe ich in diesem Post dargestellt.

Der Quellcode ist als Gist auf GitHub.