Hinweis: Am 18.5.2011 lieferte Herr Dr. Thomas Pieper den Hinweis, dass das auf dieser Seite beschriebene Beispiel in den neueren Matlab-Versionen korrekt gelöst wird. Die unten beschriebene fehlerhafte Lösung wurde mit Matlab 7 (R14) erzeugt.

Das Beispiel

KragtraegerStatUnbest02Die Aufgabe, die dem hier beschriebenen Problem zugrunde liegt, ist eigentlich nicht von Interesse. Es soll mit ihr nur gezeigt werden, dass es durchaus kein spitzfindig konstruiertes Problem ist, mit dem die Matrix erzeugt wird, die eine falsche Determinante liefert.

Für den im Bild zu sehenden Biegeträger gelten die folgenden sinnvollen Parameter:

l = 1000 mm   ;   EI = 2 · 1010 Nmm2   ;   q0 = 2 N/mm .

Der Träger ist - wie unschwer zu erkennen ist - nicht ausreichend gelagert, um tragfähig sein. Eine Finite-Elemente-Berechnung eines solchen Systems führt deshalb auf ein Gleichungssystem mit einer singulären Koeffizientenmatrix. Im folgenden Matlab-Script wird das FEM-Gleichungssystem aufgebaut, die Koeffizientenmatrix wird auf Singularität (Berechnung des Wertes ihrer Determinante) getestet.

Berechnung der Determinante

detKsMatlab03Der Aufbau des Gleichungssystems in den Zeilen 4 bis 6 des nebenstehend zu sehenden Scripts ist für die Betrachtungen hier uninteressant (für Interessenten: Matlab-Femset).

Die Koeffizientenmatrix wird in Zeile 6 in das Command Window ausgegeben. In Zeile 8 wird ihre Determinante berechnet und ausgegeben.

In Zeile 9 wird der Rang der Matrix mit der Matlab-Function rank berechnet und ausgegeben.

Die in Zeile 10 aufgerufene Matlab-Function rref erzeugt mit dem Gauß-Jordan-Algorithmus die "reduced row echelon form" der Matrix, die auch den Rang der Matrix erkennen lässt.

detKsMatlabCW02Im Command Window findet man die Ergebnisse der Berechnung:

  • Der berechnete Wert der Determinante wird mit 240 107 322 ausgewiesen. Dass er deutlich größer ist als das größte Matrixelement, ist nicht verdächtig (und eigentlich eher der Regelfall). Dass er aber falsch ist, könnte selbst ein wenig geübter Rechner in weniger als 5 Minuten per Handrechnung nachweisen.
     
  • Der Rang der vierreihigen Matrix wird mit 3 ausgewiesen, das heißt: Singularität und damit "Determinante gleich Null".
     
  • Das nachfolgend mit rref berechnete "Gauß-Jordan-Ergebnis" zeigt die Singularität der Matrix dadurch, dass eine komplette Nullzeile entstanden ist.
     

Fazit: Die beiden Functions rank und rref erkennen die Singularität der Matrix, det liefert für den Wert der Determinante ein völlig falsches Ergebnis ab.

Vorsicht!

Die Problematik, die hier am Beispiel der Determinantenberechnung verdeutlicht wurde, zeigt ein grundsätzliches Problem der numerischen Rechnung. Die unvermeidlichen Rundungsfehler bei der Rechnung lassen speziell den Sonderfall "Singuläre Matrix" häufig unerkannt bleiben, nicht nur bei der Determinantenberechnung.

Weil das Erkennen der Singularität in der Ingenieurmathematik sehr wichtig ist (häufig sogar das wesentliche Ziel einer Untersuchung), bleibt nur die Empfehlung, im Zweifelsfall mehrere unterschiedliche Verfahren zu benutzen.

Liebe Matlab-Entwickler,

natürlich, das Erkennen von Singularität ist ein schwieriges Problem, und deshalb ist die Berechnung des Wertes einer Determinante besonders kritisch, wenn diese den Wert Null hat.

Aber: Das oben gezeigte Beispiel ist nun wahrlich so klein, dass dieser Fehler von det wohl nicht akzeptiert werden kann, zumal rref und rank zeigen, dass dieses Problem beherrschbar ist.

Um Ihren Ehrgeiz anzuspornen, auch noch diese Bemerkung: Keine andere Software ließ sich mit dieser Determinante überlisten, nachfolgend nur ein Beispiel.

detKsMaple