Betrachte mit nahezu singulär, was bedeutet, dass es einen sehr kleinen Eigenwert von gibt. Das übliche einer iterativen Methode basiert auf dem Residuum und die Iterationen anhalten können, wenn mit der Iterationsnummer. Aber in dem Fall, den wir betrachten, könnte es einen großen Fehler , der in dem mit dem kleinen Eigenwert assoziierten Eigenraum lebt, was einen kleinen Rest ergibt . Angenommen, der anfängliche Rest ist groß, dann kann es vorkommen, dass wir anhalten aber der Fehler ist immer noch groß. Was ist in diesem Fall eine bessere Fehleranzeige? Ist Ein guter Kandidat?
linear-algebra
Hui Zhang
quelle
quelle
Antworten:
Bitte verwenden Sie niemals den Unterschied zwischen aufeinanderfolgenden Iterationen, um ein Stoppkriterium zu definieren. Diese Fehldiagnose führt zu einer Stagnation der Konvergenz. Die meisten nicht symmetrischen Matrixiterationen sind nicht monoton, und selbst GMRES in exakter Arithmetik ohne Neustart kann für eine beliebige Anzahl von Iterationen (bis zur Dimension der Matrix) stagnieren, bevor sie plötzlich konvergieren. Siehe Beispiele in Nachtigal, Reddy und Trefethen (1993) .
Eine bessere Möglichkeit, die Konvergenz zu definieren,
In der Regel interessiert uns die Genauigkeit unserer Lösung mehr als die Größe des Rests. Insbesondere möchten wir garantieren, dass die Differenz zwischen einer Näherungslösung und der exakten Lösung erfüllt für einige Benutzer angegebenen . Es stellt sich heraus, dass dies erreicht werden kann, indem ein so gefunden wird, dass wobei der kleinste singuläre Wert von , bedingt durch x | x n - x | < C c x n | A x n - b | < C & egr; & egr; Axn x
wobei wir verwendet haben, dass der größte Singularwert von (zweite Zeile) ist und dass genau (dritte Zeile) löst .1/ϵ A−1 x Ax=b
Abschätzen der kleinste Einzelwertϵ
Eine genaue Schätzung des kleinsten Singularwerts ist normalerweise nicht direkt aus dem Problem verfügbar, kann jedoch als Nebenprodukt eines konjugierten Gradienten oder einer GMRES-Iteration geschätzt werden. Es ist zu beachten, dass, obwohl Schätzungen der größten Eigenwerte und Singularwerte normalerweise nach nur wenigen Iterationen recht gut sind, eine genaue Schätzung des kleinsten Eigen- / Singularwerts normalerweise erst erhalten wird, wenn die Konvergenz erreicht ist. Vor der Konvergenz wird die Schätzung im Allgemeinen deutlich größer sein als der wahre Wert. Dies deutet darauf hin , dass Sie müssen tatsächlich die Gleichungen lösen , bevor Sie die richtigen Toleranz definieren . Eine automatische Konvergenztoleranz , die eine vom Benutzer bereitgestellte Genauigkeit nimmtϵ cϵ c Für die Lösung und Schätzungen könnte der kleinste singuläre Wert mit dem aktuellen Stand der Krylov-Methode zu früh konvergieren, da die Schätzung von viel größer war als der wahre Wert.ϵ ϵ
Anmerkungen
-ksp_monitor_singular_value
mit jedem PETSc Programm. Siehe KSPComputeExtremeSingularValues () singuläre Werte von Code zu berechnen.-ksp_gmres_restart 1000
, in PETSc).quelle
Ein anderer Weg , um dieses Problem zu betrachten , ist , die Werkzeuge zu prüfen , aus diskreten inversen Problemen, das heißt, die Probleme beinhalten die Lösung oder min | | A x - b | | 2 , wo A sehr schlecht konditioniert ist (dh das Verhältnis zwischen dem ersten und dem letzten Singulärwert σ 1 / σ nA x = b min | | A x - b | |2 EIN σ1/ σn groß ist ).
Hier haben wir verschiedene Methoden zur Auswahl des Abbruchkriteriums, und für ein iteratives Verfahren, würde ich das L-Kurve Kriterium empfehlen, da es nur Mengen handelt, die bereits verfügbar sind (HAFTUNGSAUSSCHLUSS: Mein Berater diese Methode Pionierarbeit geleistet, so dass ich auf jeden Fall bin voreingenommen gegen es). Ich habe dies mit Erfolg in einem iterativen Verfahren verwendet.
Die Idee ist es, die Restnorm zu überwachen und die Lösung Norm η k = | | x k | | 2 , wobei x k das k istρk= | | A xk- b | |2 ηk= | | xk| |2 xk k -te Iteration ist. Wie Sie Iterierte, diese die Form eines L in einem loglog (rho, eta) Grundstück und an der Stelle , an der Ecke des L zu zeichnen beginnen , ist die optimale Wahl.
Auf diese Weise können Sie ein Kriterium implementieren, bei dem Sie nach dem Überqueren der Ecke ein Auge auf die Steigung von( ρk, ηk) ), und dann die Iterierte wählen , die an der Ecke lag.
Die Art und Weise, wie ich es gemacht habe, beinhaltete das Speichern der letzten 20 Iterationen und wenn der Gradientabs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1)) war größer als ein gewisser Schwellwert 20 für aufeinanderfolgende Iterationen, wusste ich , dass ich auf dem vertikalen Teil der Kurve war und daß ich die Ecke passiert hatte. Ich habe dann die erste Iteration in meinem Array (dh die vor 20 Iterationen) als meine Lösung genommen.
Darüber hinaus gibt es weitere Einzelheiten der Verfahren zur Ecke zu finden, und diese Arbeit besser, aber eine beträchtliche Anzahl von Iterierten erfordern speichern. Spielen Sie mit ihm ein bisschen herum. Wenn Sie in Matlab sind, können Sie die Toolbox Regularisierung Werkzeuge verwenden, die einige dieser implementiert (insbesondere die „Ecke“ Funktion anwendbar ist).
Beachten Sie, dass dieser Ansatz besonders für große Probleme geeignet ist, da die zusätzliche Rechenzeit winzig ist.
quelle