Das Problem

Ein lineares Gleichungssystem mit quadratischer Koeffizientenmatrix (n Gleichungen mit n Unbekannten)

Lineares Gleichungssystem

hat nur dann eine eindeutige Lösung, wenn die Koeffizientenmatrix nicht singulär ist. Bei Ingenieurproblemen, die durch lineare Gleichungssysteme beschrieben werden, deutet Singularität z. B. auf eine nicht tragfähige Konstruktion hin, der häufigste Fall sind aber einfach Fehler, die beim Aufstellen des Gleichungssystems passieren. In jedem Fall ist das Erkennen der Singularität beim Versuch, das Gleichungssystem zu lösen, eine ganz wichtige Information für den Anwender.

Wegen der unvermeidlichen Rundungsfehler bei der Computerrechnung kann eigentlich Singularität nie sicher erkannt, sondern immer nur vermutet werden, vgl. z. B .: "Schwieriges Problem: Singularität erkennen". Aber der Anwender vertraut natürlich darauf, dass im Falle singulärer Matrix wenigstens eine Warnung (auf der Basis der "Vermutung") generiert wird. Ein besonders kritischer Fall tritt dann ein, wenn (ohne Warnung) einfach unsinnige Ergebnisse abgeliefert werden. Dass dieser Fall eintreten kann, wird nachfolgend an einem Beispiel gezeigt, weitere Beispiele dazu findet man unter "Matlab: Probleme mit singulären Matrizen (1)" und "Matlab: Probleme mit singulären Matrizen (2)".

FEM-Modell "Rechteckscheibe"Das Beispiel

Auch wenn die Herkunft des betrachteten Gleichungssystems für die hier angestellten Überlegungen keine Rolle spielt, sollen doch wenigstens einige Informationen über das behandelte Berechnungsmodell gegeben werden: Es wird ein einfaches Finite-Elemente-Modell aufgebaut (die nebenstehend zu sehende ebene Scheibe). Es ist eine ebene Scheibe, diskretisiert mit nur zwei finiten Elementen (8-Knoten-Scheiben-Vierecke, für Interessenten: Matlab-Femset).

Das System ist mit zwei Kräften belastet und ausreichend gelagert (Verschiebungen in beiden Richtungen am Knoten unten rechts verhindert und verhinderte Vertikalverschiebung am Knoten unten links). In der skizzierten Variante ist es also ein tragfähiges und korrekt modelliertes System.

Der Finite-Elemente-Algorithmus erzeugt für dieses System ein lineares Gleichungssystem mit 26 Gleichungen. Die Koeffizientenmatrix des Gleichungssystems (Steifigkeitsmatrix) ist symmetrisch und positiv definit.

Im nachfolgend zu sehenden Matlab-Script wird das FEM-Modell in den Zeilen 5 bis 9 aufgebaut und in Zeile 13 gelöst. Anschließend wird noch einmal (Zeilen 21 und 22) nur das lineare Gleichungssystem erzeugt und verschiedenen Matlab-Solvern zur Lösung übergeben.

Matlab-Script Rechteckscheibe1


Ergebnis des Scripts Rechteckscheibe1Im nebenstehenden Command Window sind die Ergebnisse der erfolgreichen Rechnung zu sehen:

  • Für die FEM-Rechnung (Zeile 13) wird die Vertikalverschiebung unter der Vertikalkraft als Ergebnis ausgegeben, das ...
     
  • ... von der Lösung des Gleichungssystems mit dem Matlab-Standard-Solver (Zeile 24) und ...
     
  • ... von der Lösung mit dem für Systeme mit positiv definiter Koeffizientenmatrix geeigneten Iterationsverfahren pcg (Zeile 26) bestätigt wird.
     
  • Die Cholesky-Zerlegung der Koeffizientenmatrix in Zeile 25 würde nur dann eine Ausgabe erzeugen, wenn diese Matrix nicht positiv definit ist.
     
  • Dass der ausgewiesene Wert der Determinante der Koeffizientenmatrix sehr groß ist, liegt sowohl an der Größe der Matrix als auch an der Größenordnung ihrer Elemente, ist normal und hat keine Auswirkungen.

Fehlerhaftes FEM-ModellDer kleine Fehler und die Folgen

Ein typischer Fehler bei Finite-Elemente-Berechnungen ist die falsche Modellierung der Lagerung. Wenn man versehentlich in dem oben zu sehenden Script in Zeile 8 nur eine Ziffer ändert und

kr(3,1) = 1 ;

an Stelle von  kr(3,2) = 1 ; schreibt, dann bedeutet das, dass das linke Lager nicht mehr die vertikale, sondern die horizontale Verschiebung verhindert (nebenstehende Graphik). Solch ein Fehler ist typisch auch für die interaktive Erzeugung von Finite-Elemente-Modellen über die Benutzer-Oberfläche von FEM-Programmsystemen.

Dieses (nun falsche) Modell beschreibt eine nicht tragfähige Konstruktion, denn es sind unendlich kleine Starrkörper-Drehungen um das rechte Lager möglich. Für die Generierung des Finite-Elemente-Modells bedeutet das, dass ein lineares Gleichungssystem mit singulärer (und damit auch nicht mehr positiv definiter) Koeffizientenmatrix entsteht.

Der Anwender darf hoffen, dass er auf die Fehlerhaftigkeit seines Modells bei der versuchten Lösung des Gleichungssystems aufmerksam gemacht wird. Es ist für ihn schon schlimm genug, dass er in der Regel nicht die Ursache, sondern nur eine Meldung wie "Steifigkeitsmatrix ist nicht positiv definit" erfährt, aber wenigstens dieses Indiz erwartet er.

Ergebnis der Berechnung mit dem fehlerhaften FEM-ModellNebenstehend ist das Command Window mit den Ergebnissen dieser Rechnung zu sehen:

  • Die FEM-Rechnung zeigt die erwartete Reaktion und bemängelt die Steifigkeitsmatrix.
     
  • Das Iterationsverfahren pcg erkennt zwar nicht die Singularität, weil es aber aus anderem Grunde nicht konvergierte, warnt es vor dem (falschen) Ergebnis, das abgeliefert wird.
     
  • Der Matlab-Standard-Solver spricht keinerlei Warnung aus, liefert ohne Hinweis ein völlig unsinniges Ergebnis.
     
  • Auch die Cholesky-Zerlegung äußert sich nicht, so dass es für den Anwender so aussieht, als wäre die zu zerlegende Matrix positiv definit.
     
  • Da verwundert es schließlich auch nicht, dass für die Determinante ein riesiger Wert abgeliefert wird (Singularität bedeutet ja eigentlich: Determinante hat den Wert Null).

Abschließende Bemerkungen

Bei Rechnung mit voll besetzer Matrix reagieren die Lösungsverfahren angemessenDas hier demonstrierte Verhalten der Matlab-Solver bei singulärer Koeffizientenmatrix ist kein Einzelfall. Vornehmlich (aber durchaus nicht ausschließlich) kommt es zu diesem Verhalten bei Benutzung des "Sparse matrix"-Formats. Für das oben gezeigte Beispiel ergeben sich ganz andere Reaktionen, wenn die Koeffizientenmatrix als volle Matrix gespeichert ist. Das nebenstehende Command Window zeigt das Ergebnis eines solchen Tests:

  • Der Matlab-Standard-Solver liefert zwar ein Ergebnis, warnt aber, weil er die Singularität der Koeffizientenmatrix vermutet (die zusätzlich ausgegebene reziproke Konditionszahl ist ein weiteres deutliches Indiz).
     
  • Die Cholesky-Zerlegung mit der Function chol misslingt, weil der Algorithmus erkennt, dass die Matrix nicht positiv definit ist.

Beide Reaktionen sind angemessen.

Vorsicht!

Dass der Matlab-Standard-Solver dazu neigt, auf jeden Fall ein Ergebnis abliefern zu wollen, ist schon dann nicht ganz ungefährlich, wenn wenigstens eine Warnung bei vermuteter Singularität ausgegeben wird (die ist nämlich häufig im Command Window bereits verschwunden, wenn man sich den Ergebnisvektor auch ausgeben lässt).

Dass aber (speziell bei Arbeit mit dem "Sparse matrix"-Format) ohne jeden Hinweis falsche Ergebnisse bei singulärer Koeffizientenmatrix ausgegeben werden, kann wirklich gefährlich sein.

Liebe Matlab-Entwickler,

die Schwierigkeit, Singularität bei der Computer-Rechnung zu erkennen, ist bekannt. Dass immer nur Warnungen bei Vermutungen ausgegeben werden können, ist akzeptabel.

Aber falsche Ergebnisse ohne Warnung können nicht akzeptiert werden, und weil z. B. das Cholesky-Verfahren für voll besetzte Matrix und "Sparse matrix"-Format doch wohl aus mathematischer Sicht nach gleichen Algorithmen arbeitet, ist nicht einzusehen, warum die unterschiedlichen Speicherformate unterschiedliches Verhalten zeigen.

Zum Download verfügbar sind