Umfangreichere Programmieraufgabe |
||
Projekt | Bearbeitung | Download |
Berechnung und Darstellung von Staupunkten in (von Punktladungen erzeugten) elektrischen Feldern | Meik Puppe | swintest (Solaris 2.7 binary) Dokumentation (Word-Document) |
Es wird ein durch endlich viele Punktladungen Q1 , ... , Qm
an Positionen x1 , ... , xm erzeugtes elektrisches Feld E(x) betrachtet.
E(X) läßt sich dazu als negativer Gradient eines eindeutig bestimmten Potentialfeldes darstellen.
Das Problem:
Man kann sich nun für die singulären Punkte des Potentialfeldes (die aufgrund obiger Beziehungen auch Nullstellen von E(x) sind) und für ihren Typus (Minimum, Maximum, Sattelpunkt) interessieren. Man nennt diese Punkte Stau- oder Stagnationspunkte.
Die Frage nach solchen Punkten ist äußerst reizvoll, da sie eines von vielen der klassischen n-Körper-Probleme ist, die in der Physik auftreten. Dies soll heißen, im Falle von zwei Punktladungen ist man in der Lage, mittels expliziter Formeln die Lage eines möglichen Staupunktes zu berechnen. Dies geht bei einer Zahl von drei oder mehr Punktladungen nicht mehr. Es ist unmöglich, die Wechselwirkungen dieser Ladungen (auf mögliche Probeladungen) so zu bestimmen, dass sie in Formeln gepackt werden können und auf diese Weise Staupunkte berechenbar sind. Man hat somit nur die Möglichkeit, Näherungen von möglichen Staupunkten zu berechnen, was in diesem Programm geschehen soll.
Fähigkeiten des Programmes:
Das vorliegende Programm erlaubt die Erzeugung eines Modells eines elektrischen Feldes durch maximal 20 Punktladungen im Zwei- oder Dreidimensionalen. Nach Erzeugung des Modells und Festlegung eines Rechteckes bzw. Quaders, in welchem nach Staupunkten gesucht werden soll, beginnt die Berechnung oder Darstellung der Staupunkte.
Im zweidimensionalen Fall hat man die Möglichkeit, zwischen der Darstellung des elektrischen Feldes im festgelegten Rechteck, der Berechnung der Staupunkte innerhalb dieses Rechteckes oder beidem zu wählen; im Dreidimensionalen entfällt diese Option, hier erfolgt direkt die Berechnung der Staupunkte.
Die Suche nach Staupunkten erfolgt in folgender Weise: Das Rechteck oder der Quader wird in jeder Dimension in hundert äquidistante Gitterpunkte zerlegt, wobei in jedem der Punkte der Wert des elektrischen Feldes berechnet wird. Unterschreitet das Quadrat der euklidischen Norm eines dieser Funktionswerte die Grenze von 10-4 ,so setzt das Newtonsche Näherungsverfahren für Nullstellen mit dem aktuellen Gitterwert als Startwert ein.
Verläuft das Newton-Verfahren erfolgreich, d.h. erhält man nach spätestens 20 Schritten einen Vektor, dessen Normquadrat kleiner als 10-12 ist, wird der berechnete Vektor als Näherung für die Position eines Staupunktes ausgegeben.
Im Falle einer gefundenen Näherung eines Staupunktes wird sein Typ mit Hilfe des Definitheits-Kriteriums bestimmt. Hierzu wird die Hessematrix aufgestellt und ihre (zwei oder drei) Eigenwerte mittels expliziter Nullstellenberechnung des charakteristischen Polynoms bestimmt und mit ihrer Hilfe eine Analyse des Types des gefundenen Staupunktes vorgenommen und ausgegeben.
Die graphische Darstellung im Zweidimensionalen Fall erfolgt so: Das eingegebene Suchtrechteck wird äquidistant in ein Raster aus 640x480 Gitterpunkten zerlegt. Für jeden Gitterpunkt wird das Normquadrat des elektrischen Feldes berechnet und je nach Größe wird in einem extra erzeugten, 640x480 Pixel großen Fenster der zugehörige Pixel eingefärbt, so dass ein Niveaulinienbild entsteht, der bei geschickter Wahl einer Konstanten die ungefähre Lage von Staupunkten anzusehen ist.
Systemvoraussetzungen und Ausführung:
Dieses Programm gibt es für das Betriebssystem Unix. Die Eingaben für das elektrische Feld sowie die gefundenen Staupunkte werden im Fall der Sun (Univ.-Rechner Solaris 2.6) wie bei einer Kommandozeilenapplikation, z.B. im cmd-tool-Fenster von OpenWindows erledigt. Für die graphische Darstellung wird ein separates Fenster geöffnet. Die Diskette enthält das kompilierte Programm, genannt swintest, sowie den Quelltext swintest.cpp. Zur Installation des Programmes einfach die Datei von Diskette in einen beliebigen Ordner kopieren und als Kommandozeilenbefehl swintest eingeben.