Das Programm LINALG
4 dient im ersten Kapitel als Beispiel für die
verschiedenen Tools und Methoden. Es löst ein lineares Gleichungssystem
und berechnet die Inverse der Koeffizienten-Matrix auf zwei verschiedene
Weisen, nämlich durch Gauss-Jacobi-Elimination und mittels LU-Zerlegung.
Das Hauptprogramm in main.f hat folgende Struktur:
Zunächst wird die Anzahl N der Gleichungen vorgegeben und mit GETMAT eine
Koeffizienten-Matrix A mit zufälligen Koeffizienten gefüllt und mit
GETVEC ein Zufalls-Vektor R für die rechten Seiten der Gleichungen
erzeugt. Da die i.f. benutzten Verfahren die Koeffizienten-Matrix A und den
Vektor R überschreiben, werden mit SETMAT bzw. SETVEC Arbeitskopien B und
X angelegt. Nun wird mit der Routine GAUSSJ die Inverse bestimmt und die
Gleichungen gelöst.5 Die Ergebnisse
stehen dann in B und X. Anschließend werden sie getestet: TESTMT
untersucht, ob
, und gibt eine entsprechende Meldung
aus, ERNORM
bestimmt die Größe des Fehlervektors
.
Anschließend werden B und
X wieder auf die Ausgangswerte gesetzt. Die Routine LUDCMP zerlegt B in
, wobei in INDEX eventuelle Zeilenvertauschungen
angezeigt werden, in
LUBKSB wird das Gleichungssystem gelöst, die Lösung steht in X. Die
Routine LUINV bestimmt die Inverse BINV von
durch sukzessives
Aufrufen von LUBKSB für die Spalten der Einheits-Matrix als rechten
Seiten. Schließlich werden mit TESTMT und ERNORM die Ergebnisse
überprüft.
Matrix-Vektor- und Matrix-Matrix-Operationen, wie sie in LINALG
durchgeführt werden, sind Bestandteil vieler numerischer Verfahren. Sie
sind geradezu Grundmodelle für die Operationen, für die Vektorrechner
konstruiert wurden. Die Verfahren, die wir zur Beschleunigung von LINALG
kennenlernen werden, lassen sich daher auf viele Programme für
Vektorrechner übertragen. Dabei kommt es uns natürlich mehr auf die
Auswirkungen auf einzelne Routinen an als darauf, das Programm LINALG
insgesamt zu beschleunigen.
Peter Junglas 18.10.1993