Beispiel: System mit schlecht konditionierter Matrix (1)
Lineare
Gleichungs-
systeme
Zur Startseite "Einführung, Lösbarkeit, Determinanten" Gauß, LR-Zerlegung, Cholesky, Matrix-Inversion, homogene Systeme, dünn besetzte Matrix, überbestimmte Systeme, Standard-Software, Kondition, Singularität Zur Startseite "Iterationsverfahren für lineare Gleichungssysteme" Symbolische Rechnung, numerische Berechnung, Beispiele mit verschiedenen Softwareprodukten, der Backslash-Operator in Matlab Zur Startseite "Rundungsfehler, Kondition, Singularität, Skalierung" Zum Vergleich"Direkte Verfahren vs. Iterationsverfahren" Zur Startseite "Überbestimmte Gleichungssysteme"

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", Seite 245). 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:

  • Um den Matlab-Standard-Solver verwenden zu können (Zeile 29), wird die Koeffizietenmatrix zunächst (Zeile 24) in das von Matlab unterstützte Sparse-Matrix-Format umgewandelt.
     
  • In Zeile 33 wird der zu Matlab-Femset gehörende Solver verwendet, dem die Koeffizientenmatrix als symmetrische Bandmatrix angeboten werden muss.

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:

  • Der Standard-Solver von Matlab hat den Ehrgeiz, auch für sehr schlecht konditionierte Matrizen ein Ergebnis abzuliefern. Das ist für den Anwender eine sehr gefährliche Situation. Für die beiden in den letzten Tabellenzeilen verzeichneten Ergebnisse werden tatsächlich ohne Warnung unsinnige Ergebnisse abgeliefert (der negative Wert in der letzten Zeile würde bedeuten, dass sich der Träger unter der nach unten gerichteten Belastung nach oben durchbiegt).
     
  • Die Meldung des Femset-Solvers ist natürlich auch nur in dem Sinne korrekt, dass der Test auf die positive Definitheit der Koeffizientenmatrix während der Berechnung (es dürfen nur positive Hauptdiagonalelemente bei der Cholesky-Zerlegung entstehen) infolge der Rundungsfehler schließlich negativ ausfällt (ohne Anfangsabbrechfehler ist die Matrix natürlich positiv definit). Immerhin wird kein unsinniges Ergebnis abgeliefert.

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.

Home02

Homepage “Dankert/Dankert: Technische Mechanik”

Home02

Homepage “WWW - Ergänzung - Vertiefung - WWW”

Mail02

D

Mail202

nkert.de