Doppelpendel

Das ist ein Doppelpendel. Ein Doppelpendel ist neben dem Dreikörperproblem und dem Lorenz-Attraktor [1, 2] das Paradebeispiel für analytisch unlösbare Bewegungsgleichungen und chaotisches Verhalten. Aus diesem Grund sollte ein Doppelpendel auf keinem Schreibtisch fehlen und bietet sich als grandiose Geschenkidee für Physiker an.

Dass es analytisch unlösbar ist, lässt sich mit einem nicht rigorosen Argument anschaulich machen: Ein Blick auf die Bewegungsgleichungen:

\begin{align*} (m_1 + m_2) l_1 \ddot\vartheta_1 + m_2 l_2 \ddot\vartheta_2 \cos(\vartheta_1 - \vartheta_2) + m_2 l_2 \dot\vartheta_2^2 \sin(\vartheta_1 - \vartheta_2) + g(m_1 + m_2) \sin(\vartheta_1) &= 0\\ m_2 l_2 \ddot\vartheta_2 + m_2 l_1 \ddot\vartheta_1 \cos(\vartheta_1 - \vartheta_2) - m_2 l_1 \dot\vartheta_1^2 \sin(\vartheta_1 - \vartheta_2) + m_2 g \sin(\vartheta_2) &= 0 \end{align*}

Das sind die Differentialgleichungen für die beiden Winkel \(\vartheta_1\) und \(\vartheta_2\) des Doppelpendels. \(m_i\) sind die beiden Massen und \(l_i\) die Fadenlängen.

Unser Ziel ist es das obige Video zu erstellen, dazu müssen wir die Bahnkurve, also \(\vartheta_1(t)\) und \(\vartheta_2(t)\) bestimmen. Dazu müssen wir die obigen Gleichungen, die sich relativ simpel, wenn auch mühsam, per Lagrange-Formalismus herleiten lassen, zunächst nach den Winkelbeschleunigungen aufgelösen.

\begin{align*} \ddot\vartheta_1 &= \frac{m_2 \cos(\vartheta_1 - \vartheta_2) (l_1 \sin(\vartheta_1 - \vartheta_2) \dot\vartheta_1^2 - g \sin(\vartheta_2)) + m_2 l_2 \sin(\vartheta_1 - \vartheta_2) \dot\vartheta_2^2 + (m_1 + m_2) g \sin(\vartheta_1)}{m_2 l_1 \cos^2(\vartheta_1 - \vartheta_2) - (m_1+m_2) l_1} \\ \ddot\vartheta_2 &= \frac{m_2 l_2 \cos(\vartheta_1 - \vartheta_2) \sin(\vartheta_1 - \vartheta_2) \dot\vartheta_2^2 + (m_1+m_2) l_1 \sin(\vartheta_1 - \vartheta_2) \dot\vartheta_1^2 + (m_1+m_2) g \cos(\vartheta_1 - \vartheta_2) \sin(\vartheta_1) - (m_1+m_2) g \sin(\vartheta_2)}{(m_1+m_2) l_2 - m_2 l_2 \cos^2(\vartheta_1 - \vartheta_2)} \end{align*}

Diese Gleichungen sind durchaus sehr unhandlich und können nicht analytisch, gelöst werden — aber numerisch ist es kein Problem.

Ising Modell zur Bildentrauschung

Eines der bekanntesten Modelle der statistischen Physik ist das Ising-Modell. Es besteht aus (klassischen) Spins auf einem Gitter im Wärmebad und soll magnetische Eigenschaften von Festkörpern modellieren. Es zeigt nämlich in 2D und 3D (und 4D … ) einen Phasenübergang zweiter Ordnung von „magnetisch“ zu „nicht magnetisch“, so wie ferromagnetische Materialien, die oberhalb der Curie Temperatur nicht mehr ferromagnetisch sind.

In einfachen Worten: Die Spins des Ising-Modells richten sich so aus wie ihre Nachbarn und die Temperatur bringt sie wieder durcheinander.

Aber es wäre natürlich langweilig das Modell so zu benutzen, wie alle anderen auch. Deshalb stelle ich hier eine Anwendung aus Pattern Recgonition and Machine Learning vor, die nichts mehr mit Magneten zu tun hat: Rauschunterdrückung in Bildern.

Andererseits bin ich Physiker und darf deshalb nichts machen, was direkt nützlich wäre, also beschränke ich mich auf schwarz-weiße Bilder, die man direkt auf das „spin up“-„spin down“ des Ising-Modells abbilden kann.

Die Idee ist, das jeder Spin einem Pixel \(x_i\) entspricht. Dann koppelt man die Spins des Ising-Modells \(x_i\) an die Pixel \(y_i\) des verrauschten Bildes über einen zusätzlichen Energie-Term

$$\mathcal{H} = - \beta \sum_{\left< i,j \right>} x_i x_j - \eta \sum_i x_i y_i.$$

Dabei bedeutet \(\left< i,j \right>\), dass man über alle Nachbarn von \(i\) summiert.

Von diesem Modell kann man dann per Simulated Annealing den Grundzustand suchen oder man macht es sich einfach equilibriert bei \(T=0\).

Ising-Modell

Das Schema dazu wurde bereits in diesem Post gezeigt. Graue Knoten entsprechen den Pixeln des verrauschten Bilds \(y_i\) und weiße Knoten den Ising-Spins \(x_i\), die am Ende als Pixel des entrauschten Bilds interpretiert werden.

Genug der Theorie. Es wird Zeit für pixelige Bilder. Leider hatte ich kein verrauschtes Bild, also habe ich ein beliebiges Bild gemalt und 10% aller Pixel invertiert.

Vorher-Nachher Vergleich

Links das verrauschte Bild und rechts das entrauschte. Ja, nicht perfekt. Und in dem zitierten Buch wird auf der gleichen Seite noch eine sehr viel bessere Methode angesprochen. Aber die hatte nichts mit dem Ising-Modell zu tun. Und man sieht ja auch eine Verbesserung. Oder?

Nebenbei bemerkt, kann man das Ising-Modell auch als zellulären Automaten mit zufälligem Element betrachten, denn jeder Spin ist eine Zelle, die nur lokal von seinen Nachbarn und zufällig durch die Temperatur beeinflusst wird.

Der Code ist als Gist auf Github.

Oberflächenkachelung mit TikZ

Man arbeitet an einem Seminarvortrag und will ein Modell auf einem periodischen Gitter erklären. Natürlich kann man sich nicht entscheiden, wie viele Elementarzellen man darstellen möchte. Außerdem ist es einem zuwider mehrere Elementarzellen per Hand zu schreiben.

Wer kennt das nicht?

Glücklicherweise gibt es eine Lösung. Weil man alle seine Aufzeichnungen sowieso in LaTeX setzt, benutzt man TikZ, bastelt eine Elementarzelle und kachelt sie über die Ebene, bis man das Gefühl hat, dass es genau passend für die Präsentation ist. Als Bonus kann man noch mit den Parametern spielen, um einen möglichst überzeugenden pseudo 3D-Effekt zu erzielen.

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \newcommand*{\shear}{0.2}
        \newcommand*{\height}{1.0}
        \newcommand*{\radius}{0.1}
        \newcommand*{\xspacing}{1}
        \newcommand*{\yspacing}{0.5}

        % two-dimensional lattice, with three dimensional basis
        % decreasing counter, otherwise there will be lines through the circles
        \foreach \x in {4,...,0}{
            \foreach \y/\dx in {3,...,0}{
                % primitive vectors
                \draw (\x+\y*\shear-\xspacing/2 , \y*\yspacing            )
                    -- (\x+\y*\shear+\xspacing/2, \y*\yspacing            );
                \draw (\x+\y*\shear-\shear/2    , \y*\yspacing-\yspacing/2)
                    -- (\x+\y*\shear+\shear/2   , \y*\yspacing+\yspacing/2);
                \draw (\x+\y*\shear             , \y*\yspacing            )
                    -- (\x+\y*\shear            , \y*\yspacing+\height    );

                % base
                \fill[white] (\x+\y*\shear, \y*\yspacing        ) circle(\radius);
                \draw        (\x+\y*\shear, \y*\yspacing        ) circle(\radius);

                \fill[gray]  (\x+\y*\shear, \y*\yspacing+\height) circle(\radius);
                \draw        (\x+\y*\shear, \y*\yspacing+\height) circle(\radius);
            }
        }
    \end{tikzpicture}
\end{document}

Isingmodell mit Kopplung

Und damit wäre wiedereinmal die Vorliebe dieses Blogs für schwarz-weiße Bilder, die entweder Linien und Kreise oder zu große Pixel enthalten, bestätigt.