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

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

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.