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 auch 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.
|
|
|