Entsprechend der Antwort hier verringert eine große Bedingungszahl (für das Lösen eines linearen Systems) die garantierte Anzahl korrekter Stellen in der Gleitkomma-Lösung. Differenzierungsmatrizen höherer Ordnung in pseudospektralen Verfahren sind typischerweise sehr schlecht konditioniert. Warum sind sie dann immer noch sehr genaue Methoden?
Ich verstehe, dass die geringe Präzision, die von den schlecht konditionierten Matrizen ausgeht, nur ein garantierter Wert ist, aber ich frage mich trotzdem, warum schlecht konditionierte Matrizen durch direkte Methoden in der Praxis genau gelöst werden - zB die LCOL
Spalten in Tabelle 3.1 auf Seite 11 von Wang et al., Eine gut konditionierte Kollokationsmethode unter Verwendung einer PSEUDOSPECTRAL INTEGRATION MATRIX , SIAM J. Sci. Comput., 36 (3) .
quelle
Antworten:
Nach meiner ersten Antwort hinzugefügt:
Es scheint mir jetzt, dass der Autor des referenzierten Papiers Bedingungsnummern (anscheinend 2-Norm-Bedingungsnummern, möglicherweise aber Unendlich-Norm-Bedingungsnummern) in der Tabelle angibt, während er maximale absolute Fehler anstelle von normrelativen Fehlern oder maximalen elementweisen relativen Fehlern angibt ( Dies sind alles unterschiedliche Maße.) Beachten Sie, dass der maximale elementweise relative Fehler nicht mit dem relativen Fehler der Unendlichkeitsnorm identisch ist. Darüber hinaus beziehen sich die Fehler in der Tabelle eher auf die exakte Lösung des ursprünglichen Differentialgleichungsgrenzwertproblems als auf das diskretisierte lineare Gleichungssystem. Aus diesem Grund sind die in diesem Dokument enthaltenen Informationen nicht für die Verwendung mit dem Fehler geeignet, der auf der Bedingungsnummer basiert.
In meiner Replikation der Berechnungen sehe ich jedoch Situationen, in denen der relative Unendlich-Normfehler (oder der relative Zwei-Norm-Fehler) wesentlich kleiner ist als die Grenze, die durch die Unendlich-Norm-Bedingungsnummer (bzw. die 2-Norm-Bedingungsnummer) festgelegt wird. Manchmal hat man einfach Glück.
Ich habe das DMSUITE MATLAB-Paket verwendet und das Beispielproblem in diesem Artikel mithilfe der Pseudospektralmethode mit Chebyshev-Polynomen gelöst. Meine Zustandszahlen und maximalen absoluten Fehler entsprachen denen, die in der Veröffentlichung angegeben wurden.
Ich sah auch Fehler in Bezug auf die Norm, die etwas besser waren, als man aufgrund der Bedingungsnummer erwarten würde. Zum Beispiel erhalte ich für das Beispielproblem mit mitN = 1024ϵ=0.01 N= 1024
cond (A, 2) = 7,9e + 8
cond (A, inf) = 7,8e + 8
norm (u-uexact, 2) / norm (uexact, 2) = 3.1e-12
Norm (u-uexact, inf) / Norm (uexact, inf) = 2,7e-12
Es scheint, dass die Lösung ungefähr 11-12 Stellen gut ist, während die Bedingungsnummer in der Größenordnung von 1e8 liegt.
Interessanter ist jedoch die Situation mit elementweisen Fehlern.
max (abs (u-uexact)) = 2,7e-12
Das sieht immer noch gut aus.
max (abs ((u-uexact) ./ uexact) = 6.1e + 9
Wow, es gibt einen sehr großen relativen Fehler in mindestens einer Komponente der Lösung.
Was ist passiert? Die exakte Lösung dieser Gleichung enthält winzige Komponenten (z. B. 1,9e-22), während die ungefähre Lösung einen viel größeren Wert von 9e-14 ergibt. Dies wird durch die normrelative Fehlermessung (sei es die 2-Norm oder die Unendlichkeitsnorm) ausgeblendet und erst sichtbar, wenn Sie die elementweisen relativen Fehler betrachten und das Maximum nehmen.
Meine ursprüngliche Antwort unten erklärt, warum in der Lösung ein normbezogener Fehler auftreten kann, der geringer ist als die durch die Bedingungsnummer angegebene Grenze.
Wie Sie in der Frage bemerkt haben, ergibt die Bedingungsnummer einer nicht singulären Matrix einen relativen Fehler im ungünstigsten Fall , der für die Lösung eines gestörten Gleichungssystems bestimmt ist. Das heißt, wenn wir genau lösen und genau lösen , dannA ( x + & Dgr; x ) = b + & Dgr; b A x = bκ(A) A(x+Δx)=b+Δb Ax=b
Bedingungsnummern können in Bezug auf eine Vielzahl von Normen berechnet werden, aber die Zwei-Normen-Bedingungsnummer wird häufig verwendet, und das ist die Bedingungsnummer, die in dem Artikel verwendet wird, auf den Sie sich beziehen.
Der schlimmste Fehler tritt auf, wenn ein linker Singularvektor von , der dem kleinsten Singularwert von . Der beste Fall liegt vor, wenn ein linker Singularvektor von , der dem größten Singularwert von . Wenn zufällig ist, müssen Sie die Projektionen von auf alle linken Singularvektoren von und die entsprechenden Singularwerte betrachten. Abhängig vom Spektrum von können die Dinge sehr schlecht oder sehr gut laufen. A A Δ B A A Δ B Δ B A AΔb A A Δb A A Δb Δb A A
Betrachten Sie zwei Matrizen , beide mit der 2-Norm-Bedingungsnummer . Die erste Matrix hat die Singularwerte , , , . Die zweite Matrix hat Singularwerte , , , , . 1,0 × 10 10 1 1 × 10 - 10 … 1 × 10 - 10 1 1 … 1 1 × 10 - 10A 1.0×1010 1 1×10−10 … 1×10−10 1 1 … 1 1 × 10- 10
Im ersten Fall ist es unwahrscheinlich, dass eine zufällige Störung in Richtung des ersten linken Singularvektors auftritt, und es ist wahrscheinlicher, dass sie nahe an einem der Singularvektoren mit dem Singularwert . Daher ist die relative Änderung in der Lösung wahrscheinlich sehr groß. Im zweiten Fall ist fast jede Störung in Richtung eines singulären Vektors mit dem singulären Wert , und die relative Änderung in der Lösung ist gering. 11 × 10- 10 1
PS (später hinzugefügt, nachdem ich vom Yoga-Kurs zurückkam ...)
Die Formel für die Lösung von lautetA Δ x = Δ b
Nach dem Satz von Pythagoras
Wenn wir behalten , dann wird diese Summe maximiert, wenn und minimiert, wenn .∥Δb∥2=1 Δb=Un Δb=U1
In der hier betrachteten Situation ist das Ergebnis zufälliger Rundungsfehler, daher sollten die Werte für ungefähr alle gleich groß sein. Die Terme mit kleineren Werten von tragen viel zum Fehler bei, während Terme mit größeren Werten von nicht viel beitragen. Abhängig vom Spektrum kann dies leicht viel kleiner sein als im ungünstigsten Fall.Δb UTiΔb σi σi
quelle
?getrs
tl; dr Sie berichteten , eine Konditionszahl, die nicht unbedingt die richtige Kondition für die Matrix, weil es einen Unterschied gibt.
Dies ist spezifisch für die Matrix und den Vektor auf der rechten Seite. Wenn man sich anschaut , die Dokumentation
*getrs
, sagt es der Vorwärtsfehler gebunden ist Dabei istcond(A,x)nicht ganz die übliche Bedingungszahlκ∞(A), sondern cond(A,x)=‖| A - 1In Ihrem Beispiel habe ich einen Pseudospektraldifferentialoperator für ein ähnliches Problem mit , und es gibt tatsächlich einen großen Unterschied zwischen ‖ | A - 1 | | A | ‖ Und κ ∞ ( A ) berechnete ich 7 × 10 3 und 2,6 × 10 7n = 128 ∥ | EIN- 1| | A | ∥ κ∞( A ) 7 × 103 2,6 × 107 Dies reicht aus, um die Beobachtung zu erklären, dass dies für alle rechten Seiten der Fall ist, da die Größenordnungen in etwa mit den in Tabelle 3.1 gezeigten Werten übereinstimmen (3-4 ordnen bessere Fehler zu). Dies funktioniert nicht, wenn ich dasselbe nur für eine zufällige schlecht konditionierte Matrix versuche, also muss es eine Eigenschaft von .EIN
Ein explizites Beispiel, bei dem die beiden Bedingungsnummern, die ich von Higham (7.17, S.124) aufgrund von Kahan genommen habe, nicht übereinstimmen, ist Ein anderes Beispiel, das ich gefunden habe, ist nur die einfache Vandermonde-Matrixmit zufälligemb. Ich bin durchgegangenund einige andere schlecht konditionierte Matrizen produzieren ebenfalls diese Art von Ergebnis, wieund.
[1:10]
MatrixDepot.jl
triw
moler
Wenn Sie die Stabilität der Lösung linearer Systeme in Bezug auf Störungen analysieren, müssen Sie zunächst angeben, welche Störungen Sie berücksichtigen. Bei der Lösung linearer Systeme mit LAPACK berücksichtigt diese Fehlergrenze komponentenweise Störungen in , aber keine Störungen in b . Dies unterscheidet sich also von dem üblichen κ ( A ) = ‖ A - 1 ‖ ‖ A ‖ , bei dem sowohl in A als auch in b normweise Störungen berücksichtigt werden .EIN b κ ( A ) = ∥ A- 1∥ ∥ A ∥ EIN b
Betrachten Sie (als Gegenbeispiel) auch, was passieren würde, wenn Sie nicht unterscheiden. Wir wissen, dass wir mit iterativer Verfeinerung mit doppelter Genauigkeit (siehe Link oben) den bestmöglichen relativen Fehler von für die Matrizen mit κ ( A ) ≪ 1 / u in Vorwärtsrichtung erhalten können . Wenn wir also die Idee berücksichtigen, dass lineare Systeme nicht mit einer Genauigkeit besser als κ ( A ) u gelöst werden können , wie würden Verfeinerungslösungen möglicherweise funktionieren?O ( u ) κ ( A ) ≤ 1 / u κ(A)u
PS Es kommt darauf an, dassE A b b
?getrs
die berechnete Lösung die wahre Lösung von(A + E)x = b
mit einer Störung in A , aber keiner Störung in b ist . Anders wäre es, wenn Störungen in b zugelassen würden .Bearbeiten Damit dies im Code direkter funktioniert, ist dies kein Zufall oder Glücksfall, sondern die (ungewöhnliche) Folge, dass zwei Bedingungsnummern für bestimmte Matrizen sehr unterschiedlich sind, z. B.
Durchschnittlicher Fall (fast 9 Größenordnungen besserer Fehler):
quelle