Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Schwelle

Wann aus vielen Teilen ein Ganzes wird. Streue zufällig Steine auf ein Gitter: Bei wenigen entstehen Inseln, bei vielen ein durchgehender Teppich. Dazwischen liegt kein sanfter Übergang, sondern eine Schwelle — und sie wird umso schärfer, je größer das Gitter ist.

Blatt öffnen

  • Das Gitter bis 160 × 160, jeder Haufen in eigener Farbe, der durchgehende in Blau
  • Anteil und Größe am Regler — der Umschlag ist beim Schieben körperlich spürbar
  • „Schwelle messen" zeichnet die Durchlässigkeit über dem Anteil, für drei Gittergrößen
  • „Schärfe messen" misst, wie schmal der Übergang mit wachsendem Gitter wird — und die Steigung im doppelt logarithmischen Bild
  • Prüflauf — sieben Zeilen, darunter der kritische Exponent

Die zwei Zahlen

gemessen bekannt
Schwelle (Quadratgitter, Felder) 0,5906 … 0,5933 0,59274605…
Steigung der Übergangsbreite −0,730 … −0,763 −1/ν = −0,750

Die erste Zahl hat keine Formel. Sie ist nur numerisch bekannt, auf viele Stellen genau, aber ohne geschlossenen Ausdruck — anders als 1/2 für Kanten auf demselben Gitter oder 2·sin(π/18) für das Dreiecksgitter.

Die zweite ist die interessantere: Die Breite des Übergangs schrumpft nach einem Potenzgesetz L^(−1/ν) mit ν = 4/3. Diese Zahl gilt für jedes zweidimensionale Gitter dieser Art — ob quadratisch, dreieckig oder wabenförmig. Die Schwelle selbst ist überall anders; die Schärfe des Übergangs ist überall dieselbe. Und sie fällt hier aus ein paar tausend gewürfelten Gittern heraus, ohne dass sie irgendwo im Code steht.

Was der Prüflauf zeigt

Behauptung Ergebnis
zwei Verfahren, dieselben Haufen 96 Gitter · 21 356 Felder · Verschmelzen gegen Breitensuche: 0 Abweichungen
die Haufengrößen ergeben zusammen alle Felder 0 Fälle mit fehlenden oder doppelt gezählten Feldern
ein Stein mehr macht es nie schlechter 3264 Schritte, Feld für Feld gefüllt · 0 Rückschritte
gedreht ist dasselbe 30 Gitter · oben-unten im gedrehten = links-rechts im ursprünglichen
die Schwelle liegt, wo sie liegen soll 24² : 0,5852 · 48² : 0,5933 · 96² : 0,5906 gegen 0,59275
aus der Schärfe fällt ein kritischer Exponent Breite 26,4 → 6,8 Punkte · Steigung −0,730 gegen −0,750
dieselbe Saat, dasselbe Gitter 0 Unterschiede bei gleicher Saat, 752 bei anderer

Warum die dritte Zeile die schönste Prüfung ist

„Ein zusätzlicher Stein kann eine Verbindung nicht zerstören" klingt trivial und ist genau die Sorte Aussage, an der eine kaputte Implementierung auffliegt: Wer beim Verschmelzen einen Haufen falsch anhängt oder die Ränder verwechselt, produziert früher oder später ein Gitter, das durch Hinzufügen undurchlässig wird. Der Test füllt deshalb leere Gitter Feld für Feld in zufälliger Reihenfolge und prüft nach jedem einzelnen Schritt.

Was mich das gekostet hat

Der Messwert ist verrauscht, und das muss man sagen dürfen. Die Schwelle kommt bei drei Gittergrößen als 0,5852 · 0,5933 · 0,5906 heraus — nicht monoton, nicht auf drei Stellen genau. Das ist keine Schwäche des Verfahrens, sondern die Natur der Sache: Jeder Punkt beruht auf ein paar hundert gewürfelten Gittern, und der Fehler fällt nur wie die Wurzel aus der Anzahl. Die Versuchung war, mehr Proben zu rechnen, bis die Zahl schön aussieht. Stattdessen steht die Streuung jetzt im Blatt — mit dem Abstand zum Literaturwert in Tausendsteln, damit sichtbar bleibt, wie genau diese Messung ist und wie genau nicht.

Der Exponent ist der ehrlichere Wert. Ausgerechnet die Zahl, die schwerer zu messen aussieht, kommt zuverlässiger heraus: −0,730 bis −0,763 gegen die theoretischen −0,750, über mehrere Läufe. Der Grund ist, dass sie aus einer Steigung über sieben Gittergrößen kommt und nicht aus einem einzelnen Punkt — der Ausgleich über mehrere Größenordnungen glättet, was einzelne Messungen verzittern.

Beim ersten Anlauf hat mir eine Schleife den Speicher zerlegt. Nicht in diesem Blatt, sondern im Nachbarblatt — aber es gehört hierher, weil es dieselbe Sorte Fehler ist: for (j = k/2; j > 0; j /= 2) terminiert nie, weil eine Ganzzahl halbiert 0,5 wird und nicht 0. Seitdem schreibe ich in solchen Schleifen >>= 1.

Was das Blatt nicht kann: keine Kantenperkolation (dort ist die Schwelle exakt 1/2 und der Beweis eine Perle für sich), keine anderen Gitter, keine drei Dimensionen, keine unendlichen Cluster im strengen Sinn — gemessen wird immer nur „reicht ein Haufen von oben nach unten". Keine Cluster-Größenverteilung mit ihrem eigenen Exponenten, keine fraktale Dimension des durchgehenden Haufens (91/48, auch so eine Zahl), keine gerichtete Perkolation.

Technik

Eine einzelne HTML-Datei. Kein Build, keine Bibliothek, nichts verlässt den Browser. Verschmelzen mit Pfadverkürzung, Breitensuche als Gegenprobe, Halbierungssuche für die Schwelle, Canvas 2D, hell und dunkel.

Die ganze Sammlung

Alle Blätter nach Feld geordnet, jedes mit eigenem Repo: ssims437.github.io

Lizenz

MIT

About

Perkolation: die Schwelle 0,5927 selbst gemessen, und aus der Schaerfe des Uebergangs faellt der kritische Exponent 4/3 heraus

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages