Hier soll exemplarisch gezeigt werden, wie die direkten Lösungsverfahren für lineare 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 die Rundungsfehler (in der Darstellung des Gleichungssystems und bei seiner Lösung) zurückzuführen.
Bei 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
ab (vgl. z. B. "Dankert/Dankert: Technische Mechanik"). 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 .
Das nebenstehend zu sehende Matlab-Script 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.
Das Gleichungssystem wird nach zwei verschiedenen Verfahren gelöst:
In Zeile 25 wird das Muster der dünn besetzen Matrix mit der Matlab-Function spy gezeichnet. In das Command Window werden neben der Anzahl der Gleichungen (Zeile 26) und der nach beiden Verfahren berechneten maximalen Absenkungen (Zeilen 31 und 35) auch die mit der Matlab-Function condest berechnete Konditionszahl (Zeile 26) der Koeffizientenmatrix ausgegeben (Matlab kann verschiedene Konditionszahlen berechnen, für das Sparse-Matrix-Format ist allerdings nur condest verfügbar).
Nachfolgend ist die Ausgabe des Matlab-Scripts zu sehen:
![]() |
![]() |
Das "Belegungsmuster" der dünn besetzten Matrix zeigt, dass von den 484 Elementen der Koeffizientenmatrix mit 22 Zeilen bzw. Spalten nur 96 von Null verschieden sind. Im Command Window sieht man eine für diese relativ kleine Matrix schon recht große Konditionszahl, die auf eine schlecht konditionierte Matrix hinweist. Dies wirkt sich in diesem Fall allerdings bei beiden Gleichungssystemlösern nur in den den letzten 4 Stellen der mit 16 Dezimalstellen durchgeführten Rechnung aus.
Durch Änderung des Wertes n in der Zeile 5 des Matlab-Scripts kann die Anzahl der Gleichungen des linearen Gleichungssystems beliebig verändert werden. Die nachfolgende Tabelle zeigt eine Zusammenstellung der Ergebnisse verschiedener Rechnungen (es werden 15 wesentliche Dezimalstellen angegeben):
n (Anzahl der Anzahl der Konditionszahl vend vend 1 4 1,3 · 106 12,5000000000000 12,5000000000000 10 22 1,7 · 108 12,4999999999729 12,5000000000092 100 202 1,7 · 1010 12,4999999605807 12,4999999605110 1000 2002 7,5 · 1012 12,5000828935572 12,5001987346142 10000 20002 1,2 · 1017 25,1408513728516 Meldung: 20000 40002 1,9 · 1018 -25,0189313590242
Elemente)
Gleichungen des
Gleichungssystems
(Lösung mit
Matlab-Solver)
(Lösung mit
Femset-Solver)
"Koeffizientenmatrix
ist nicht
positiv definit"
Die Konditionszahlen werden mit größeren Koeffizientenmatrizen zunehmend größer, die Ergebnisse dementsprechend schlechter, ab etwa 5000 Gleichungen kann man sie als unbrauchbar bezeichnen (die Größenordnungen der Konditionszahlen lassen bei Rechnung mit etwa 16 Dezimalstellen nichts anderes erwarten). Die beiden verwendeten Solver reagieren unterschiedlich:
Fazit: Das ohne Warnung vom Matlab-Solver abgelieferte unsinnige Ergebnis bei sehr schlechter Kondition mahnt zur Vorsicht, denn dieses Beispiel ist typisch für viele Probleme der Ingenieur-Praxis. Natürlich hat es in der hier behandelten Form akademischen Charakter (man wird ein Tragwerk nicht in 10000 Elemente einteilen, wenn ein Element genügt). Aber schon bei nicht mehr konstanter Linienlast und bei veränderlichem Querschnitt ist dies durchaus sinnvoll, weil dann nur eine feinere Elementeinteilung genaue Ergebnisse liefert. Die Probleme bei der Lösung des Gleichungssystems können hier eine Grenze setzen.
Das Erkennen von und das Reagieren auf Matrizen, die tatsächlich singulär sind, ist in Matlab auch unbefriedigend. Man vergleiche hierzu: "Matlab: Probleme mit singulären Matrizen".
Zum Download verfügbar sind das abgebildete Matlab-Script und die daraus aufgerufenen Functions und DLLs:
KondTest.m, syswbc_m.dll, SymBand2Sparse.m, symsol_m.dll.