EbRahm17K2Das Beispiel

Die Aufgabe, die dem hier beschriebenen Problem zugrunde liegt, ist eigentlich nicht von Interesse. Es ist der nebenstehend skizzierte ebene biege- und dehnsteife Rahmen (aus dem Kapitel "Verifizieren von Computerrechnungen, ausführlich behandelt auf der Internet-Seite "Ebener Rahmen, Verifizieren ..."), dessen Finite-Elemente-Modell in der Datei Rahm17.dat gespeichert ist. Der Finite-Elemente-Algorithmus führt auf ein lineares Gleichungssystem mit nur 33 Gleichungen.

Dieses Beispiel ist auch Gegenstand von Testrechnungen an anderer Stelle, siehe z. B.: "Testrechnungen mit iterativen Verfahren (1)", "Testrechnungen mit Präkonditionierung mit Matlab" und "Test: Präkonditionierung mit 'Incomplete Cholesky'".

Lösungsversuch mit lsqr

lsqr102Das nebenstehend zu sehende Matlab-Script baut in den Zeilen 3 bis 5 das Gleichungssystem auf. Es wird in Zeile 7 mit dem Matlab-Standard-Solver gelöst, in Zeile 8 mit der Function lsqr ("Conjugate Gradients on the Normal Equations"). Die Anzahl der zugelassenen Iterationsschritte wurde auf 100 erhöht, weil mit der Standardeinstellung keine Konvergenz erzielt werden konnte

In Zeile 10 werden von den 33 Elementen lsqr1CWdes Lösungsvektors jeweils nur die ersten 8 ausgegeben.

Die von lsqr ausgegebene Meldung über die Konvergenz steht in krassem Gegensatz zum abgelieferten Ergebnis, wie der Vergleich mit dem vom Matlab-Standard-Solver berechneten Ergebnis zeigt.

Das Problem

Der Name lsqr deutet an, wo das Problem liegen könnte, er steht für "Least square". Mit der Function können wie mit dem Matlab-Standard-Solver auch überbestimmte Gleichungssysteme (Ausgleichsrechnung) gelöst werden. Matlab-Help: "... attempts to solve the system of linear equations A*x=b for x if A is consistent, otherwise it attempts to solve the least square solution x that minimizes norm(b-A*x)".

Aber auch das muss bei einer quadratischen regulären Koeffizientenmatrix zum korrekten Ergebnis führen. Vermutlich ist nur das Abbruchkriterium nicht angemessen formuliert, ein Verdacht, der dadurch bestätigt wird, dass man bei diesem Beispiel mit einer Änderung des Toleranzwertes von
10-6 (Default-Wert) auf 10-10 das richtige Ergebnis erhält.

Vorsicht!

Man sollte lsqr nicht als das "iterative Pendant" zum Backslash-Operator sehen, der sowohl für die Lösung "normaler" als auch überbestimmter Gleichungssysteme eingerichtet ist:

  • Bei der Lösung "normaler" Gleichungssysteme ist nicht nur das Konvergenzverhalten bescheiden, häufig wird auch Konvergenz signalisiert, die nicht eingetreten ist.
     
  • Für die Lösung überbestimmter Gleichungssysteme sollte man schon einen guten Grund wissen, wenn man lsqr dem Backslash-Operator vorzieht.