| 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 ! |
ModellBetrachten 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 - 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). |
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 MittelwertDie 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, ...) |
BufferDer 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). |
||||||||||||||||
RandDie 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. |
||||||||||||||||
FarbeMit 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 ObjektGrafikDas 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. |
Einfache Varianten solcher Modelle kann man mit jedem Kalkulations-Programm herstellen,
z.B. mit LibreOffice,
OpenOffice,
MS-Office, ... |
ProgrammiersprachenNumerische 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. |