Hier klicken, um zur
Untersuchung des
gleichen Problems mit
direkten Lösungsverfahren
zu kommen

Beispiel

Hier soll exemplarisch gezeigt werden, wie die Iterationsverfahren zur Lösung linearer Gleichungssysteme auf eine schlecht konditionierte Koeffizientenmatrix reagieren.

Obwohl die Entstehung des im Folgenden betrachteten Gleichungssystem für die Betrachtungen hier unbedeutend sind, soll doch der Hintergrund mit einigen Bemerkungen verdeutlicht werden: Die Methode der finiten Elemente führt in der Regel auf lineare Gleichungssysteme mit symmetrischen, positiv definiten Koeffizientenmatrizen, die gut konditioniert sind. Dass auch diese Aussage ihre Grenzen hat, zeigt das folgende kleine Beispiel, für das die exakte Lösung bekannt ist, die auch von der Finite-Elemente-Methode geliefert werden muss, weil in diesem Fall die Ansatzfunktionen die exakte Lösung abbilden können. Das bedeutet, dass schon mit einem einzigen Element die exakte Lösung erzielt wird. Die üblicherweise mit der Anzahl der Elemente zunehmende Genauigkeit ist hier also nicht zu erwarten. Man müsste bei beliebiger Elementanzahl das exakte Ergebnis erzielen. Jede Abweichung davon ist also ausschließlich auf Rundungsfehler (in der Darstellung des Gleichungssystems und bei seiner Lösung) oder mangelde Konvergenz zurückzuführen.

KragtraegerMitLinienlastBei einem einseitig starr eingespannten Träger der Länge l mit konstanter Biegesteifigkeit EI, der durch die konstante Linienlast q0 (z. B. sein Eigengewicht) belastet ist, senkt sich das freie Ende um

KragAbsEnde

ab (vgl. Kapitel "Verformungen durch Biegemomente"). Für die (willkürlich angenommenen) Zahlenwerte

l = 1000 mm   ,   EI = 2 · 1010 Nmm2   ,   q0 = 2 N/mm

beträgt die Absenkung am freien Trägerende also

vmax = 12,5 mm .

In den Test einbezogen werden die 9 Iterationsverfahren, die in Matlab angeboten werden, und das Matlab-Script KonjugGrad.m, das im Anhang des Buchs "A. Meister: Numerik linearer Gleichungssysteme" gelistet und über den Link http://www.mathematik.uni-kassel.de/~meister/buch_online zum Download verfügbar ist.

Das nachfolgend zu sehenden Matlab-Script KondTestIter2.m baut in den Zeilen 1 bis 22 mit dem Matlab-Femset-Algorithmus das lineare Gleichungssystem mit einer symmetrischen Bandmatrix auf. Wie dies geschieht, ist für die Betrachtungen hier nicht von Belang (für Interessenten: Matlab-Femset). Von Interesse ist nur Zeile 5, in der festgelegt wird, in wieviele Elemente n der Träger eingeteilt wird und dass dabei (siehe Zeile 26) 2n+2 Gleichungen entstehen.

KondTestIter203

Ergebnis der Testrechnungen:

Präkonditionierung

Alle Matlab-Functions für die iterative Lösung von Gleichungssystemen sind darauf eingerichtet, mit Präkonditionierung zu arbeiten. Den Functions muss dafür (als 5. Parameter) eine reguläre Matrix M übergeben werden, als Präkonditionierer wird die Inverse dieser Matrix benutzt. Hier wird jeweils die einfachste Variante der Präkonditionierung (Skalierung, vgl. "Skalierung eines linearen Gleichungssystems") verwendet. Dafür wird eine Diagonalmatrix M an die Matlab-Functions übergeben, die die Diagonalelemente der Koeffizientenmatrix enthält. Die Inverse dieser Diagonalmatrix ist genau die, die auf der Seite "Skalierung eines linearen Gleichungssystems" empfohlen wird, um auf der Hauptdiagonalen Eins-Elemente zu erzeugen (die Inverse einer Diagonalmatrix ist auch eine Diagonalmatrix, die die reziproken Elemente der Originalmatrix enthält).

Die oben im Script KondTestIter2.m zusätzlich zu den Matlab-Functions getestete Function KonjugGrad wird durch die Function PKG ersetzt, die genau diese Präkonditionierung durch Skalierung in jedem Fall ausführt.

Das Matlab-Script KondTestIter3.m, das für die folgende Testrechnung verwendet wird, unterscheidet sich von dem oben abgebildeten nur im Bereich der Zeilen 32 bis 45 (siehe nachfolgenden Ausschnitt). In Zeile 32 wird die Diagonalmatrix aus den Diagonalelementen der Koeffizientenmatrix erzeugt, die an die Matlab-Functions als Parameter 5 für die Präkonditionierung übergeben wird (Zeilen 34 bis 42). Die Function PKG (Zeile 33) erzeugt genau diese Diagonalmatrix für die Präkonditionierung selbst. Vorsichtshalber wird allen Functions eine sehr große Anzahl von Iterationsschritten gestattet:

KondTestIter3

KondTestIter3CWDas Ergebnis ist erwartungsgemäß deutlich besser als bei der Rechnung ohne Präkonditionierung, allerdings auch nur bei einigen Verfahren. Diese konvergieren auch bei n = 100 Elementen (Gleichungssystem mit 202 Unbekannten), siehe nebenstehenden Ausschnitt aus dem Command Window. Der für das PKG-Verfahren ausgewiesene Wert der ausgeführten Iterationsschritte entspricht etwa der Anzahl, die auch die 5 erfolgreichen Matlab-Functions benötigten, die 4 anderen Matlab-Functions stoppten nach Erreichen der zugelassenen maximalen Anzahl von Iterationsschritten.

Bei einer weiteren Erhöhung der Gleichungsanzahl konnten nach jeweils außerordentlich großer Anzahl von Iterationsschritten nur die Konjugierte-Gradienten-Verfahren PKG, bicg und pcg vernünftige Ergebnisse abliefern, bei  n = 1000  Elementen (Gleichungssystem mit 2002 Unbekannten) allerdings erst nach etwa 70000 Iterationsschritten. Nur für diese Verfahren ist der Erfolg im Umgang mit diesem schlecht konditionierten System etwa so gut (bzw. so schlecht) wie beim Test der direkten Verfahren.

Download

Die Matlab-Scripts auf dieser Seite und die von ihnen aufgerufenen Functions, DLLs und Dateien sind zum Download verfügbar: