Transport-Modell

Simulation eines schrittweisen Transport-Vorgangs

Transport-Vorgänge wie z.B. Diffusion, Wärmeleitung kann man meist mit allgemeinen Formeln gut beschreiben. In einem komplexen Umfeld sind diese Formeln jedoch nicht einfach anwendbar. Die Informatik bietet die Möglichkeit, ein komplexes Modell durch eine große Anzahl kleiner Elemente zu simulieren. Der gesamte Vorgang wird dann als schrittweise Näherung berechnet.
Algorithmen Ausgewählte IT-Rezepte
Live-Demonstration Modell der Wärmeleitung
Algo - allgemein Ort und Zeit in vielen kleinen Teilen
Algo - speziell Gewichteter Mittelwert
Programmierung SVG, Javascript und andere Möglichkeiten

Live-Modell der Wärmeleitung

Anwendung:
Bewegen sie den Mauszeiger über die schwarze Fläche und halten sie die Maus-Taste für einige Sekunden gedrückt, um diesen Punkt zu 'heizen'.
Das Modell simuliert laufend die Ausbreitung der Wärme und 'Abkühlung' an den Rändern.
Sie können jederzeit neue Elemente 'heizen' und damit einen relativ komplexen Vorgang mit dem einfachen hier verwendeten Algorithmus (Mittelwert) darstellen.
Mit Mausklick in den weissen Rand wird das Modell jederzeit in den Anfangs-Zustand zurückgesetzt.

Mit RechtsKlick in das Modell können sie den → SVG Quelltext anzeigen: Das Modell besteht aus vielen kleinen Rechteck-Elementen, deren Farbe mit vergleichsweise einfachen → Javascript-Funktionen gesteuert wird.
Dieses Modell ist als → SVG Objekt-Grafik programmiert. Alle modernen Browser unterstützen SVG seit vielen Jahren. Lediglich die veralteten Versionen des M$IE Browsers haben Probleme mit diesem und anderen Web-Standards. Das Modell dient lediglich zur anschaulichen Demonstration der Arbeitstechnik. Es stellt keinerlei Anspruch an die physikalische Realität !

Modell

Betrachten sie das Modell als eine an den Rändern gekühlte Platte, die man mit einem heissen Stift (z.B. Lötkolben) an beliebigen Punkten erhitzen kann.

Algorithmus:

Bei 'Heizung' wird der Zahlenwert eines einzelnen Elements erhöht.
Laufend werden die Zahlenwerte aller Elemente durch die Mittelwerte aus ihrer jeweiligen Umgebung ersetzt.

Algorithmus - allgemein

Ort: Zerlegung in viele kleine Zellen

Ein komplexes Modell wird in viele kleine Elemente zerlegt. Jedes Element ist 'homogen', d.h. der beschriebene Vorgang hat innerhalb jedes Elements einen einzigen Wert. Man wählt die Elemente so klein, dass man diese Vereinfachung mit vernachlässigbaren Verlusten an Genauigkeit zulassen kann.

Das Modell einer großen Fläche stellt man durch ein 2dimensionales Gitter (Array) vieler kleiner Flächen-Elemente dar (wie im Live-Beispiel oben).
Räumliche Modelle (z.B. der Meteorologie) stellt man durch ein 3dimensionales Gitter dar.

Zeit: Zerlegung in viele kleine Schritte

Der zeitliche Ablauf wird in einzelne kleine Schritte zerlegt. Man wählt die Schrittweite passend zum Modell, d.h. so klein, dass man in jedem Zeit-Schritt möglichst einfache (Transport)-Funktionen zur Beschreibung der jeweiligen Veränderung anwenden kann.

Der Aufwand zur Berechnung steigt mit zunahmender Anzahl der Elemente und mit kürzeren Zeit-Schritten stark an.
Man beginnt daher eine Simulation meist mit wenigen Elementen und großen Zeit-Schritten. Danach steigert man die Anzahl der Elemente und verkürzt die Zeit-Schritte, bis das Modell die Realität ausreichend gut nachbildet und trotzdem noch in vertretbarer Zeit berechnet wird.

Funktionen

Der durch das Modell zu beschreibende Vorgang (im Beispiel: Der zeitliche und örtliche Verlauf der Temperatur) wird durch möglichst einfache Formeln dargestellt. Man beschreibt ein Element (hier: seine Temperatur) meistens durch seine eigenen Eigenschaften und diejenigen seiner nächsten Nachbarn im vorangegangenen Schritt der Simulation.

Die verwendeten Funktionen sollen nicht den Zustand eines Elements beschreiben, sondern dessen Veränderung !
Das ist praktisch, weil die zeitliche Veränderung meistens einfacher zu beschreiben und zu berechnen ist.

Algorithmus - speziell

Der im Live-Beispiel verwendete Algorithmus versteht sich lediglich als Beispiel (!) zur Beschreibung eines einfachen Transport-Vorgangs. Sie müssen die Formeln für eigene Beispiele an das jeweilige Modell anpassen !
Faustregel: Je einfacher die verwendeten Funktionen sind, umso besser arbeitet das Modell.
Im Beispiel wird die Temperatur eines Elements im nächsten folgenden Zeit-Schritt y aus seiner momentanen Temperatur x und den Werten seiner nächsten Nachbarn berechnet.
Der simulierte Transport (hier: von Wärme) von einem Element zu seinem Nachbarn ist in diesem Beispiel proportional zur Differenz der Werte (=Temperatur-Differenzen).
 i-1ii+1
j-1121
j252
j+1121
Die Tabelle zeigt die hier verwendete Matrix zur Berechnung eines 'gewichteten Mittelwerts' der 9 jeweils berücksichtigten Elemente. Die Überschriften bezeichnen die (XY)-Koordinaten des Elements [i,j] (in der Mitte) und seiner 8 nächsten Nachbarn.
Je stärker man die Mitte der Matrix betont, umso langsamer verläuft der Transport-Vorgang.
Mit der hier (!) verwendeten Matrix ergibt sich der neue Wert y[i,j] eines Elements aus seinem alten Wert x[i,j] und den (alten) Werten seiner 8 nächsten Nachbar-Elemente:
y[i,j] = (x[i-1,j-1] + 2*x[i,j-1] + x[i+1,j-1]
+ 2*x[i-1,j] + 5*x[i,j] + 2*x[i+1,j]
+ x[i-1,j+1] + 2*x[i,j+1] + x[i+1,j+1] ) / 17

Gewichteter Mittelwert

Die hier verwendete Formel ist nur eine von vielen möglichen zur Beschreibung eines Transports von Zelle zu Zelle.
Die Werte x der berücksichtigten Zellen werden mit der gezeigten Matrix 'gewichtet' und summiert. Die berechnete Summe wird zuletzt durch die Summe der Gewichtungs-Faktoren
1+2+1 + 2+5+2 + 1+2+1 = 17
dividiert.
Im Idealfall werden die verwendeten Faktoren physikalisch begründet. Wenn das nicht möglich ist, werden sie empirisch angepasst: Die Formeln werden so lange verändert, bis das Modell die real gemessenen Daten zufriedenstellend beschreibt (Eichung).

Details zur Berechnung verschiedener Mittelwerte (arithmetisch, geometrisch, harmonisch, ...)

Buffer

Der berechnete Wert y des nächsten Zeit-Schritts kann der Zelle noch nicht zugewiesen werden, da der 'alte' Wert noch zur Berechnung aller Nachbar-Zellen gebraucht wird. Deshalb wird er in einem temporären Array (hier y) gespeichert, bis die neuen Werte aller Zellen berechnet sind.

Erst dann werden die neu berechneten Werte aller Zellen aus dem Buffer-Array y in das Werte-Array x kopiert. Damit ist 1 Berechnungs-Schritt abgeschlossen.

Diese Methode erfordert nur wenig Rechenzeit, jedoch je nach Anzahl der Elemente zusätzlichen Speicher: Die beiden Arrays x und y müssen die gleiche Größe haben.
Für sehr große Modelle arbeitet man mit Tricks, die teilweise aus der Urzeit der Informatik stammen (wo Speicher knapp und teuer war).

Rand

Die meisten Algorithmen berücksichtigen die nähere Umgebung eines Elements in alle Richtungen. Man muss daher das Verhalten des Algorithmus an den Rändern des Modells anpassen (wo es nicht alle Nachbarn gibt).
Auch dafür gibt es keine allgemein gültigen Regeln: Man muss das Rand-Verhalten in den eigenen Modellen sinnvoll gestalten. Dazu werden einige Methoden vorgestellt:

Großes Modell
Man verwendet (weit) mehr Elemente als notwendig und betrachtet nur Vorgänge in der Mitte des Modells. Mit etwas Glück und Geschick kann man das Verhalten des Modells an den Rändern vernachlässigen. Das ist einfach, aber wenig elegant und kostet zusätzliche Resourcen (Speicherplatz, Rechenzeit).

Bedingte Verzweigungen
Man kann den Algorithmus der Berechnung mit einigen Verzweigungen (if...else) modifizieren: Vor der Berechnung jeder Zelle wird geprüft, ob die benötigten Nachbar-Zellen existieren. Je nach Ergebnis wird der Algorithmus modifiziert. Das ist sauber, jedoch relativ aufwändig: Es gibt auf einer ebenen Fläche 8 verschiedene Rand-Bedingungen (4 Ecken + 4 Kanten).

Geschlossenes Modell
Manche Modelle erlauben es, gegenüber liegende Ränder miteinander zu verbinden: Ein Algorithmus, der über den 'linken Rand' hinausgeht, wird am 'rechten Rand' fortgesetzt usw.
Man kann dann die gleiche Formel für alle Zellen verwenden, muss jedoch die verwendeten Indices (hier i,j) sorgfältig anpassen.

Rand-Trick
Im Live-Beispiel dieser Seite wird ein Trick verwendet: Der Algorithmus wird nicht auf alle (Array)-Elemente angewendet sondern nur auf die 'innen' liegenden. Dadurch bleiben alle Rand-Elemente während der Simulation auf ihren Anfangs-Werten.
Das würde in einem Temperatur-Modell bedeuten, dass die Ränder mit einem unendlich großen Themostaten verbunden sind. Man merkt das an der unsymmetrischen 'Abkühlung' heißer Stellen an den Rändern.

Farbe

Mit Hilfe der angezeigten Farben kann man die berechneten Daten rasch und übersichtlich interpretieren. Die Auswahl der Farben und ihre Zuordnung zu den numerischen Ergebnissen richtet sich nach der jeweiligen Aufgabe.

Meist wird entweder eine einfache Formel oder eine Verweis-Tabelle (Lookup table) zur Berechnung der Farbe verwendet.

In diesem Beispiel wurde ein Algorithmus zur Berechnung der → RGB-Farb-Werte (0...255) aus der absoluten Temperatur in Kelvin verwendet. Die erzeugten Farben entsprechen daher ungefähr jenen von 'glühend' heißen Körpern.
Wer es gerne etwas bunter hat, kann alternativ auch alle Farben des → Regenbogens verwenden.

Details zu Farben, RGB-Farben (Addition), Farben glühender Körper, Regenbogen-Farben

Programmierung

SVG ObjektGrafik

Das oben gezeigte Live-Beispiel ist eine in diese Webseite eingebettete → SVG-ObjektGrafik.
Man kann das SVG-Dokument mit RechtsKlick in einem neuen Tab oder Browser-Fenster anzeigen.
Wenn man den Quelltext in einer Datei *.svg speichert, kann man damit am eigenen PC experimentieren.

ObjektGrafik beschreibt ein Bild mit Hilfe von Regeln, die im Fall von SVG als einfacher lesbarer Text an ihren Browser gesendet werden. Der Quelltext ist ebenfalls mit RechtsKlick offen zugänglich. Im Gegensatz dazu beschreibt Pixel-Grafik ein Bild durch die (RGB)-Farben der einzelnen Bildpunkte.
Das hier verwendete Modell besteht aus einer großen Anzahl kleiner Rechteck-Elemente ähnlich
<rect x="20" y="30" width="10" height="10" />
Das Verhalten des Modells wird mit relativ einfachen Funktionen der Programmiersprache → Javascript gesteuert.
JavaScript wird häufig zur Programmierung von Webseiten verwendet, man kann damit jedoch auch jedes Dokument der → XML-Familie steuern, z.B. SVG.

Die JavaScript Funktionen des Beispiels sind reichlich kommentiert und in einzelne kleine Komponenten geteilt, die sich leicht durch alternative Algorithmen ersetzen lassen.

Man kann SVG auch direkt (InLine) in den Quelltext von → XHTML-Webseiten einbetten. Damit erreicht man eine ideale Integration beliebig vieler Grafik-Elemente in die Webseite. Auf die Methode wird in diesem Web vorläufig verzichtet, weil sie zwar mit jedem modernen Browser, nicht jedoch mit dem veralteten M$IE Browser anwendbar ist.
M$IE-AnwenderInnen müssten in diesem Fall nicht nur auf die Grafik und deren Animation verzichten, sondern je nach Browser-Version auf die gesamte Webseite. Der M$IE-Anteil der BesucherInnen beträgt derzeit noch ca. 30%, mit rasch fallender Tendenz.

Das Modell enthält in der gezeigten Version fast 2000 kleine Rechteck-Elemente. Es wäre mühsam und unflexibel, so viel Quelltext (ca. 200kB) manuell zu erzeugen. Das SVG-Dokument wird deshalb durch ein kleines Programm in der Programmiersprache → PHP erzeugt, welches lediglich 5kB umfasst.

Eigene Experimente:
Das PHP Script-Programm dient lediglich zur Erzeugung der zahlreichen SVG-Elemente. Die interaktive Funktionalität wird durch die im Dokument enthaltenen Javascript-Programme erreicht. Daher ist es möglich, den Quelltext des Demo-Beispiels zu kopieren, in eine Text-Datei *.svg einzusetzen und am eigenen PC auszuprobieren.

Kalkulations-Programm

Einfache Varianten solcher Modelle kann man mit jedem Kalkulations-Programm herstellen, z.B. mit LibreOffice, OpenOffice, MS-Office, ...

Die Anzahl der berechenbaren Zellen kann zwar relativ groß sein, man sollte sich jedoch auf die Fläche eines durchschnittlichen Bildschirm-Fensters beschränken.
Tipp: Reduzieren sie die Spalten-Breite so stark, dass quadratische Zellen entstehen.

Die Berechnung der einzelnen Schritte kann im einfachsten Fall durch das Kalkulations-Programm erfolgen. Man muss die automatische Berechnung abschalten und jeden einzelnen Simulations-Schritt manuell (mit Taste F9) ausführen. Mehr Möglichkeiten bietet die Verwendung der integrierten Programmiersprache → Visual Basic (LibreOffice-Basic).

Mit Hilfe der 'Bedingten Formatierung' kann man die Hintergrund-Farben der Zellen für bescheidene Ansprüche automatisch anpassen. Für hohe Ansprüche kann man dazu auch VisualBasic verwenden, der Aufwand dazu ist jedoch kaum mehr gerechtfertigt.

Programmiersprachen

Numerische Simulationen kann man mit jeder beliebigen Programmiersprache ausführen. Die Ergebnisse (Zahlen) sind allerdings nicht anschaulich, d.h. man muss evtl. nachträglich daraus eine Grafik herstellen.

Moderne Programme setzen ihre Ergebnisse unmittelbar in eine Grafik um und verwenden als 'User-Interface' einen Browser. Dazu eignet sich am besten → SVG+Javascript. Diese Lösung ist ohne Änderung und ohne Installation auf jedem gängigen PC, mit jedem Betriebssystem und mit jedem modernen Browser verwendbar. Mit einem → Webserver kann man das Programm im eigenen → lokalen Netzwerk (LAN) und/oder im Internet nutzen.

Die Programmiersprache → Java ist ebenfalls sehr flexibel: Ein Java-Programm ist unverändert auf jedes PC-System portabel, benötigt allerdings die Installation des kostenfreien Java Runtime Engine (JRE). Ein Java-Applet ist ein Programm, welches sich ebenso wie SVG in jede Webseite einbetten und damit bequem verteilen und verwenden lässt.

Alle anderen Programmiersprachen und sonstigen Programme sind nur bedingt oder überhaupt nicht portabel. Man kann sie nur nach Installation besonderer Komponenten oder nur auf bestimmten Betriebssystemen einsetzen. Diese Lösungen sind darüber hinaus oft an bestimmte Software-Versionen gebunden.

Ein Sonderfall ist die Programmiersprache → C/C++, die zwar aufwändig (und teuer) bei der Herstellung, jedoch extrem schnell in der Anwendung ist. Man verwendet sie z.B. zur numerischen Simulation besonders umfangreicher Modelle, und erzeugt die grafische Ausgabe unabhängig davon mit anderen Programmen, z.B. mit → XML+XSL+SVG.

Weitere Transport-Modelle

Anwendung:
Bewegen sie den Mauszeiger über die schwarze Fläche und halten sie die Maus-Taste für einige Sekunden gedrückt.
Das Modell arbeitet mit einer asymmetrischen Transport-Matrix. Daraus ergibt sich eine Kombination aus Diffusion und Drift (von links nach rechts).
Das Modell erstreckt sich in Richtung der X-Achse unendlich weit: Daten, welche den rechten Rand verlasssen, werden links eingefügt.
Das Modell verwendet eine andere Farb-Skala: So ähnlich wird meist die Immission von Schadstoffen (in einen Fluss, in die Atmosphäre...) dargestellt.
Anwendung:
Bewegen sie den Mauszeiger über die schwarze Fläche und halten sie die Maus-Taste für einige Sekunden gedrückt.
Das Modell arbeitet mit einer asymmetrischen Transport-Matrix. Daraus ergibt sich eine Kombination aus Diffusion und Drift (von links nach rechts).
Das Modell erstreckt sich in Richtung der X-Achse unendlich weit: Daten, welche den rechten Rand verlasssen, werden links eingefügt.
Das Modell verwendet eine andere Farb-Skala: So ähnlich wird meist die Immission von Schadstoffen (in einen Fluss, in die Atmosphäre...) dargestellt.