Matlab: Probleme mit singulären Matrizen (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"

Kragträger mit Linienlast (Link zur Seite "Beispiel: System mit schlecht konditionierter Matrix"Auf der Seite "Beispiel: System mit schlecht konditionierter Matrix" werden für den nebenstehend skizzierten Kragträger die bei der Verformungsberechnung nach der Finite-Elemente-Methode entstehenden linearen Gleichungssysteme betrachtet. Die Anfangsabbrechfehler und die Rundungsfehler bei der Lösung führen dazu, dass die eigentlich regulären Koeffizientenmatrizen der Gleichungssysteme bei feiner werdender Diskretisierung zu nicht mehr lösbaren Systemen führen, weil die Kondition der Matrizen bei größerer Gleichungsanzahl sehr schnell sehr schlecht wird.

KragtraegerStatUnbestHier soll ein Beispiel betrachtet werden, das von vornherein eine singuläre Koeffizientenmatrix hat (dieses Problem wird noch einmal mit iterativen Lösungsverfahren auf der Seite "Matlab: Probleme mit singulären Matrizen (2)" untersucht). Es ist der nebenstehende Träger mit nicht ausreichender Lagerung (typischer - und sehr häufiger - Fehler bei der Erzeugung eines Modells: Eine verhinderte Verformung wird vergessen anzugeben). Das Gleichungssystem wird wieder mit dem Finite-Elemente-Algorithmus erzeugt, dies ist für die hier anzustellenden Betrachtungen nicht von Bedeutung. Im nachfolgend gelisteten Matlab-Script wird das Gleichungssystem in den Zeilen 1 bis 22 mit einer symmetrischen Bandmatrix erzeugt (für Interessenten: Matlab-Femset). Diese wird in der Zeile 24 in eine "normale" quadratische Matrix umgewandelt.

SingulTest4Q02In der Zeile 5 wird mit der Anzahl der finiten Elemente, in die der Träger unterteilt werden soll, festgelegt, wie groß das Gleichungssystem werden wird. Zunächst wird mit n = 1 das kleinstmögliche System mit nur 4 Gleichungen erzeugt.

Für die hier anzustellenden Betrachtungen sind die Zeilen 27 bis 32 interessant. Zu erwarten wären

  • eine Determinante, die den Wert Null hat (Zeile 27),
     
  • ein nach dem Gauß-Jordan-Algorithmus berechnetes gestaffeltes System mit einer reinen Null-Zeile (Matlab-Function rref in Zeile 28),
     
  • und die Lösung des Gleichungssystems in Zeile 30 sollte misslingen, weil die Koeffizientenmatrix singulär ist, so dass auch keine maximale Durchbiegung ausgegeben werden kann (Zeile 32).

 

 

 

 

 

 

 

 

 

SingulTest4QCWDer nebenstehende Bildschirm-Schnappschuss des Command windows zeigt, das diese Erwartungen nur teilweise erfüllt werden:

  • Immerhin wird das gestaffelte System korrekt berechnet. Darauf aber wird der Matlab-Anwender in der Regel verzichten.
     
  • Ob es eine gute Idee ist, nach der Warnung mit der hier ausgewiesenen reziproken Konditionszahl für die Matrix überhaupt ein Ergebnis auszugeben, darf bezweifelt werden.
     
  • Der für die Determinante ausgewiesene Wert ist allerdings katastrophal falsch.

Angemerkt werden soll, dass die Rechnung mit Matlab R14 ausgeführt wurde. Mit der Vorgängerversion Matlab R13 ergibt sich für die Determinate der korrekte Wert. Bei den Rechnungen mit einer größeren Anzahl von Gleichungen aber reagierten beide Versionen gleich (falsch).

Bei größeren Gleichungssystemen bietet sich an, die Koeffizientenmatrix als "Sparse Matrix" zu speichern (für die Erzeugung dieses Speicherformats wird in Zeile 24 die Function SymBand2Quad durch die Function SymBand2Sparse ersetzt).

Aber unabhängig vom Speicherformat ist die Determinantenberechnung immer falsch. Etwa ebenso kritisch ist, dass schon bei gar nicht besonders großen Matrizen im Speicherformat "Sparse" auch die Singularitätswarnung nicht mehr ausgegeben wird.

 

 

 

 

SingulTest50SpCWDer nebenstehende Schnappschuss des Command Windows wurde mit n = 24 berechnet, was auf eine Koeffizientenmatrix mit 50 Zeilen bzw. Spalten führt. Für die Determinante der singulären Matrix wird "Minus Unendlich" ausgewiesen, und die Lösung des Gleichungssystems liefert ohne jede Bemerkung ein völlig unsinniges Ergebnis ab.

Auf die Ausgabe der Matrix wurde hier verzichtet, ebenso auf die Ausgabe des mit rref berechneten gestaffelten Systems. Letzteres wird allerdings auch in diesem Fall korrekt berechnet.

 

Fazit: Das Erkennen der Singularität bei numerischer Rechnung ist schwierig (siehe: "Schwieriges Problem: Singularität erkennen"). Dass Matlab aber bei nicht einmal sehr großen Matrizen schon keine Warnung mehr ausgibt und schon für recht kleine Matrizen völlig unsinnige Determinantenwerte berechnet, ist doch enttäuschend.

 

Zum Download verfügbar sind das abgebildete Matlab-Script und die daraus aufgerufenen Functions und DLLs:
 
SingulTest.m, syswbc_m.dll, SymBand2Quad.m, SymBand2Sparse.m.

Home02

Homepage “Dankert/Dankert: Technische Mechanik”

Home02

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

Mail02

D

Mail202

nkert.de