Hier klicken, um zur
Untersuchung des
gleichen Problems
mit Iterationsverfahren
zu kommenHier 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.

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. 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 .

KondtestDas 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:

KondestMuster   KondestCW

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
Elemente)

Anzahl der
Gleichungen des
Gleichungssystems

Konditionszahl

vend
(Lösung mit
Matlab-Solver)

vend
(Lösung mit
Femset-Solver)

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:
"Koeffizientenmatrix
ist nicht
positiv definit"

20000

40002

1,9 · 1018

-25,0189313590242

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.