3.5 Stabilität eines Algorithmus

Werbung
42
KAPITEL 3. FEHLERANALYSE
Algorithmus 2: x =
√b
a+ a2 −b
p
d
w
s
x
:=
:=
:=
:=
:=
a∗a
p√− b
d
a+w
b/s
Für a = 6.0002, b = 0.01 und M(10, 5, s) ergibt sich im Algorithmus 1:
p = 36.002,
d = 35.992,
w = 5.9993,
x = 0.00090000,
und in Algorithmus 2:
p = 36.002,
d = 35.992,
w = 5.9993,
s = 11.999,
x = 0.00083340.
Die exakte Lösung lautet x = 0.0008333634 . . ., also in M(10, 5, s) x = 0.0008334.
Die gute oder schlechte Kondition eines Problems ist eine Eigenschaft des Problems und
nicht des numerischen Verfahrens zur Berechnung seiner Lösung. Zur Lösung gut konditionierter Probleme kann es gut- und schlechtartige numerische Verfahren geben. Dies
läßt sich mit den im folgenden vorgestellten Vorgehensweisen genauer untersuchen.
3.5
Stabilität eines Algorithmus
Typischerweise besteht ein Algorithmus aus einer Vielzahl von arithmetischen Operationen. Wie gesehen kann jede einzelne arithmetische Operation zu einem Rundungsfehler
führen. Um eine Abschätzung für den durch diese Fehler entstehenden Gesamtfehler im
Endresultat zu erhalten, gibt es unterschiedliche Vorgehensweisen.
Bei der Vorwärtsanalyse verfolgt man sämtliche Fehler von Rechenschritt zu Rechenschritt
und schätzt sofort für jedes Zwischenergebnis den bisher aufgetretenen akkumulierten Fehler ab. Für das Endergebnis steht dann eine Abschätzung des Gesamtfehlers auch direkt
zur Verfügung. Ist unser Algorithmus eine Implementation zur Berechnung einer Funktion f (x), so wird statt des exakten Wertes f (x) ein gestörter Wert fe(x) berechnet. Die
Vorwärtsanalyse liefert eine Antwort auf die Frage, wie sich f (x) und fe(x) unterscheiden
|f (x) − fe(x)| < ?.
Definition 3.24 Sei fe die Realisierung eines Algorithmus zur Lösung des Problems f
der relativen Kondition κrel . Der Stabilitätsindikator der normweisen Vorwärtsanalyse ist
die kleinstmögliche Zahl σV ≥ 0, so daß
||f (x) − fe(x)||
≤ σV κrel u+ Terme höherer Ordnung.
||f (x)||
Ein Algorithmus ist stabil im Sinne der Vorwärtsanalyse, falls σV kleiner als die Anzahl
der hintereinander ausgeführten Elementaroperationen ist.
43
3.5. STABILITÄT EINES ALGORITHMUS
Beispiel 3.25 Summe dreier Zahlen
Angenommen s1 , s2 und s3 seien positive Maschinenzahlen, deren Summe gesucht ist.
Diese Summe kann in 2 Schritten berechnet werden
x1 = s 1 + s 2 ,
x2 = x 1 + s 3 .
In Gleitkommaarithmetik wird stattdessen
x
e1 = s1 ⊕ s2 = (s1 + s2 )(1 + 1 )
x
e2 = x
e1 ⊕ s3 = (e
x1 + s3 )(1 + 2 )
mit |1 |, |2 | ≤ u berechnet. Es ergibt sich
x
e2 =
=
=
≈
(e
x1 + s3 )(1 + 2 )
((s1 + s2 )(1 + 1 ) + s3 )(1 + 2 )
(s1 + s2 )(1 + 1 + 2 + 1 2 ) + s3 (1 + 2 )
(s1 + s2 )(1 + δ1 ) + s3 (1 + 2 )
mit |δ1 | ≤ 2u. Dies können wir weiter zusammenfassen zu
Also
bzw.
x
e2 ≈ (s1 + s2 + s3 )(1 + δ1 )
= x2 (1 + δ1 ).
|x2 − x
e2 | ≤ |x2 | · |δ1 | ≤ |x2 | · 2u,
|x2 − x
e2 |
≤ 2u.
|x2 |
(3.3)
Die Summe dreier Zahlen kann als Abbildung f : R3 → R aufgefasst werden,


s1
f :  s2  7→ s1 + s2 + s3 .
s3
Berechnen wir κrel in der 1-Norm, so ergibt sich
κrel =
|s1 | + |s2 | + |s3 |
≥ 1.
|s1 + s2 + s3 |
Mit (3.3) folgt daher für den Stabilitätsindikator der Vorwärtsanalyse σ ≤ 2. Da unser
Algorithmus 2 Additionen benötigt, liegt ein stabiler Algorithmus vor.
Die Verfolgung der Fehler von Schritt zu Schritt des Verfahrens in der Rückwärtsanalyse
geschieht so, daß jedes Zwischenergebnis, das der Algorithmus liefert, als exakt berechneter Wert für gestörte Anfangsdaten interpretiert wird, d.h. der akkumulierte Fehler im
Zwischenergebnis wird als Datenfehlereffekt gedeutet. Mit den Bezeichnungen und Bedeutung f (x) und fe(x) von eben ausgedrückt, liefert die Rückwärtsanalyse eine Antwort
auf die Frage
|f −1 (fe(x)) − x| < ?.
44
KAPITEL 3. FEHLERANALYSE
Definition 3.26 Der normweise Rückwärtsfehler des Algorithmus fe zur Lösung des Problems f ist die kleinste Zahl η ≥ 0, für die für alle x
e ∈ E = {e
x| |e
x − x| ≤ |x|u} ein x
b
existiert, so daß f (b
x) = f˜(x̃)
||b
x−x
e||
≤ η.
||e
x||
Der komponentenweise Rückwärtsfehler ist analog definiert
max
i
|b
xi − x
ei |
≤ η.
|e
xi |
Der Algorithmus heißt stabil bezüglich des relativen Eingabefehlers δ, falls
η ≤ δ.
Als Stabilitätsindikator der Rückwärtsanalyse bezeichnet man
σR = η/u
Die Kondition des Problems taucht in der Definition nicht auf! Über den Gesamtfehler im
Endergebnis erhält man so zunächst ebenfalls nur die Aussage, daß er einem Datenfehlereffekt aufgrund von Datenfehlern bestimmter Größe entspricht; diese bezeichnet man
als äquivalente Datenfehler. Bei zwei verschiedenen Algorithmen für dasselbe Problem
zeigt die Größe der äquivalenten Datenfehler dann an, welcher günstigere numerische Eigenschaften besitzt. Ergibt eine Rückwärtsanalyse, daß die äquivalenten Datenfehler in
einem Algorithmus nicht viel größer sind als die im allgemeinen schon durch die Rundung
der gegebenen Daten entstehenden Darstellungsfehler, so besitzt ein solcher Algorithmus
offensichtlich sehr gute numerische Eigenschaften. Um nun den Gesamtfehler abschätzen
zu können, benötigt man Aussagen über die Auswirkungen der Störungen in den Anfangsdaten auf die Genauigkeit des Ergebnisses. Für viele Probleme gibt es dazu Abschätzungen, sogenannte Störungssätze. Erst die Kombination der Rückwärtsanalyse mit einem
Störungssatz liefert also eine Abschätzung für den Fehler im Ergebnis, während man eine solche bei der Vorwärtsanalyse direkt erhält. Dennoch erweist sich die Kombination
aus Rückwärtsanalyse und Störungssatz in vielen Fällen als vorteilhaft, da nur bei der
Rückwärtsanalyse die Rechenarithmetik zu berücksichtigen ist, während bei der Herleitung eines Störungssatzes die Eigenschaften der reellen Zahlen wie Kommutativität und
Assoziativität ausgenutzt werden können. Häufig erkennt man bei diesem Vorgehen auch,
daß der durch die fast immer auftretenden Darstellungsfehler entstehende unvermeidbare
Fehler, der durch einen Störungssatz manchmal gut geschätzt werden kann, schon recht
groß ist und Ursache für einen großen Gesamtfehler ist. Bei einer Vorwärtsanalyse kann
man dies im allgemeinen nicht so leicht erkennen, und man könnte dann dem Trugschluß
erliegen, daß ein großer Fehler im Ergebnis stets das Resultat von Mängeln des Algorithmus ist. Eine leichte Rechnung zeigt, daß stets
σV ≤ σ R
gilt. M.a.W., aus der Rückwärtsstabilität folgt die Vorwärtsstabilität.
45
3.5. STABILITÄT EINES ALGORITHMUS
Beispiel 3.27 Summe dreier Zahlen
Angenommen s1 , s2 und s3 seien positive Maschinenzahlen, deren Summe gesucht ist.
Diese Summe kann in 2 Schritten berechnet werden
x1 = s 1 + s 2 ,
x2 = x 1 + s 3 .
In Gleitkommaarithmetik wird stattdessen
x
e1 =
=
=
x
e2 =
=
=
≈
s1 ⊕ s2
(s1 + s2 )(1 + 1 )
s1 (1 + 1 ) + s2 (1 + 1 )
x
e1 ⊕ s3
(e
x1 + s3 )(1 + 2 )
s1 (1 + 1 )(1 + 2 ) + s2 (1 + 1 )(1 + 2 ) + s3 (1 + 2 )
s1 (1 + γ1 ) + s2 (1 + γ1 ) + s3 (1 + 2 )
mit |1 |, |2 | ≤ u und |γ1 | ≤ 2u berechnet. Das berechnete Ergebnis x
e2 ist exakt für die
Summe der gestörten Eingabedaten s1 (1 + γ1 ), s2 (1 + γ1 ), s3 (1 + 2 ). Ein Vergleich der
exakten Eingabedaten mit den gestörten ergibt für ζ1 = ζ2 = γ1 , ζ3 = 2
|sj − sj (1 + ζj )| ≤ |sj | |ζj | ≤ 2u,
j = 1, 2, 3.
M.a.W.,
|sj − sej |
≤ 2u,
|sj |
d.h der relative komponentenweise Rückwärtsfehler beträgt
η ≤ 2u
und die Summe dreier Zahlen ist (bei 2 Elementaroperationen) stabil im Sinne der Rückwärtsanalyse.
Beispiel 3.28 Als ein weiteres Beispiel zur Vorwärtsund Rückwärtsanalyse wird nun
√
2
der Algorithmus zur Berechnung von x = a − a − b betrachtet:
p
d
w
x
:=
:=
:=
:=
a∗a
p√− b
d
a−w
Bei der Fehleranalyse erhält man zunächst
p̃ = a2 (1 + ε1 )
d˜ = (p̃
p − b)(1 + ε2 )
˜ + ε3 )
d(1
w̃ =
x̃ = (a − w̃)(1 + ε4 )
46
KAPITEL 3. FEHLERANALYSE
mit |εi | < u für i = 1, 2, 3, 4, d.h.
p
x̃ = [a − (a2 (1 + ε1 ) − b)(1 + ε2 )(1 + ε3 ))](1 + ε4 ).
Bei der Rückwärtsanalyse wird das Ergebnis als exakt berechneter Wert für gestörte
Anfangsdaten interpretiert, d.h. der Ausdruck für x̃ ist so umzuformen, daß man eine
Aussage der folgenden Art treffen kann: Die vom Rechner gelieferte Zahl x̃ ist die Lösung
von
x2 − 2a(1 + δ1 )x + b(1 + δ2 ) = 0.
Der Ausdruck für x̃ muß daher in die Form
p
x̃ = a(1 + δ1 ) − (a(1 + δ1 ))2 − b(1 + δ2 )
umgeformt werden.
Es gilt
p
x̃ = a(1 + ε4 ) − pa2 (1 + ε1 )(1 + ε2 )(1 + ε3 )2 (1 + ε4 )2 − b(1 + ε2 )(1 + ε3 )2 (1 + ε4 )2
= a(1 + ε4 ) − a2 (1 + ε4 )2 (1 + ε5 ) − b(1 + ε6 )
mit
1 + ε5 = (1 + ε1 )(1 + ε2 )(1 + ε3 )2
1 + ε6 = (1 + ε2 )(1 + ε3 )2 (1 + ε4 )2 ,
so daß gilt
|ε5 | < 4 u,
|ε6 | < 5 u.
Weiterhin folgt
x̃ = a(1 + ε4 ) −
p
a2 (1 + ε4 )2 − b(1 + ε6 ) + a2 (1 + ε4 )2 ε5
q
= a(1 + ε4 ) − a2 (1 + ε4 )2 − b(1 + ε6 +
= a(1 + ε4 ) −
mit |ε7 | < (5 +
6a2
)
b
a2
(1
b
+ ε 4 )2 ε 5 )
p
(a(1 + ε4 ))2 − b(1 + ε7 )
u. Die vom Rechner gelieferte Zahl x̃ ist daher die Lösung von
x2 − 2a(1 + ε4 )x + b(1 + ε7 ) = 0.
Um den relativen Rückwärtsfehler abschätzen zu können, sind nun noch die relativen
Datenfehler
|a − a(1 + ε4 )|
≤ |ε4 | ≤ u
|a|
|b − b(1 + ε7 )|
6a2
≤ |ε7 | < (5 +
)u
|b|
b
47
3.6. STABILITÄT DES GAUSS-ALGORITHMUS
zu betrachten. Einen kleinen Rückwärtsfehler, wie man ihn bei einem numerische rückwärtsstabilen Algorithmus erwarten würde, erhalten wir falls a2 ≈ |b|. Ein großer Fehler ist
möglich für |a| b.
Bei der Vorwärtsanalyse ist das Ziel, eine Aussage über den relativen Fehler | x̃−x
| zu trefx
fen. Daher wird hier versucht,
x̃ √
so umzuformen, daß x̃ = x + Rest gilt. Unter Verwendung
√
der Taylorformel für d + h = d + 2√1 d h + Terme höherer Ordnung ergibt sich
p
x̃ = [a − (a2 (1 + ε1 ) − b)(1 + ε2 )(1 + ε3 )](1 + ε4 )
= a + aε4 −
= a + aε4 −
=a−
=a−
p
p
a2 (1 + ε1 )(1 + ε2 )(1 + ε3 )2 (1 + ε4 )2 − b(1 + ε2 )(1 + ε3 )2 (1 + ε4 )2 (1 + ε4 )2
a2 (1 + ε8 ) − b(1 + ε9 )
p
a2 − b + (a2 ε8 − bε9 ) + aε4
√
a2 − b −
a2√
ε8 −bε9
2 a2 −b
+ aε4
mit |ε8 | ≤ 6 u, |ε9 | ≤ 5 u und unter Vernachlässigung der Terme höherer Ordnung. Es
folgt
√
2
a2 ε8 −bε9 −2aε
4 a −b
√
√
|
=
|
|
| x̃−x
x
2
2
2 a −b(a−
a −b)
√
2
2
≤ 3 u | √a 2−b−2a√a 2−b |
a −b(a−
a −b)
Der Vorwärtsfehler kann groß werden, falls der Nenner klein wird, wobei zwei Fälle eintreten können, die sich beide auf eine Auslöschung in unserem Algorithmus zurückführen
lassen:
(i) a2 ≈ b hat Auslöschung bei der Berechnung von d = a2 − b zur Folge
(ii) |b| a2 und a > 0 hat Auslöschung bei der Berechnung von x = a − w zur Folge.
3.6
Stabilität des Gauß-Algorithmus
Man zeigt in einer genauen Rückwärtsanalyse des Verfahrens folgendes:
Satz 3.29 Es seien A ∈ Rn×n , b ∈ Rn und x̂ die durch das Gauß-Verfahren mit Spaltenpivotsuche auf dem Rechner erzeugte Lösung von Ax = b. Dann gibt es eine Matrix ∆A,
so daß
(A + ∆A)x̂ = b
und für ∆A gilt:
||∆A||∞ ≤ 2n2
Dabei ist
nu
g||A||∞.
1 − nu
(k)
g=
maxi,j,k |aij |
(1)
maxi,j |aij |
.
48
KAPITEL 3. FEHLERANALYSE
Für den Wachstumsfaktor g erhält man als obere Schranke g ≤ 2n−1 .
Ideal wäre es, wenn der äquivalente Datenfehler ∆A von der Größenordnung der Maschinengenauigkeit wäre. Wie weit er gegebenenfalls darüber hinaus geht, hängt von dem
Wachstumsfaktor g ab. Empirische Untersuchungen
zeigen g stets als moderat. Bei totaler
√
Pivotsuche kann man zeigen, daß g ≤ 2 k(2·31/2 ·· · · k 1/(k−1) )1/2 gilt. Diese obere Schranke
ist natürlich wesentlich besser als die der Spaltenpivotsuche. Jedoch ist der Aufwand der
totalen Pivotsuche um vieles größer als der der Spaltenpivotsuche. Zudem votieren empirischen Untersuchungen so klar für die Spaltenpivotsuche, daß man die totale Pivotsuche
nur in seltenen Fällen einsetzt.
Art der Matrix
invertierbar
obere Hessenberg-Matrix
A oder AT strikt diagonaldominant
tridiagonal
symmetrisch positiv definit
Statistik
Spaltenpivotisierung
ja
ja
überflüssig
ja
nein
ja
g
2
n−1
n
2
2
1
2
3
n (im Mittel)
Alles in allem können wir feststellen daß mit dem Gaußschen Eliminationsverfahren ein
numerisch, bis auf die oben angedeutete Einschränkung, zufriedenstellendes Verfahren
vorliegt.
Da das beschriebene und in der anfänglich erwähnten MATLAB-Prozedur verwendete
Lösungsverfahren für lineare Gleichungssysteme also zufriedenstellend ist, haben wir noch
keine Erklärung für das katastrophal falsche Ergebnis für die Hilbertmatrix gefunden.
Nach unseren Betrachtungen im Kapitel 2.1 kann das jetzt nur noch daran liegen, daß für
diese Daten das Problem der Gleichungslösung schlecht konditioniert ist, d.h. daß kleine
Änderungen in den Daten, sehr große Änderungen in dem Ergebnis bewirken können.
Dazu läßt sich das folgende Ergebnis beweisen.
Satz 3.30 Sei x die Lösung von Ax = b und y die Lösung von (A + ∆A)y = b + ∆b.
≤ δ und k∆bk
≤ δ. Dann
Bezeichne δ eine Schranke für den relativen Fehler, d.h. k∆Ak
kAk
kbk
gilt für y:
2δ
kx − yk
≤
κ(A)
kxk
1 − δκ(A)
wobei κ(A) = kAk kA−1 k ist.
κ(A) = kAk kA−1 k heißt Konditionszahl von A. Ist diese groß, so ist die Abweichung x − y
groß. Für unsere Hilbertmatrix H der Größe 20 ist κ(H) = 1.1896 · 1019 . Die vom Rechner
gelieferte Lösung y ist nach unseren Überlegungen die exakte Lösung von
(H + E)y = b
und E ist in der Größenordnung der Maschinengenauigkeit, bei MATLAB : 2.2204 · 10−16 .
Nach Satz 2.6 kann dann kx − yk von der Größenordnung 10−16 · 1019 = 1000 sein.
49
3.6. STABILITÄT DES GAUSS-ALGORITHMUS
Die Konditionszahl kAk kA−1 k einer Matrix A wird dann sehr groß, wenn A beinahe
singulär ist. Denn dann existiert die Inverse A−1 zwar noch, hat aber typischerweise sehr,
sehr große Einträge. (Betrachten Sie dazu einmal die Inverse der 20 × 20 Hilbertmatrix.
MATLAB liefert diese mittels invhilb(20).) kA−1 k wird dann außerordentlich groß.
Obwohl das gewählte numerische Verfahren also in Ordnung ist, kann das Ergebnis bei
sehr großer Konditionszahl von A sehr falsch sein. Gute Software wird daher neben der
eigentlichen Berechnung der Lösung auch immer eine Schätzung für die Konditionszahl
mitberechnen, und falls diese zu groß ausfällt, eine Warnung ausdrucken. (Bei der Inversenberechung von hilb(20) ist dieses auch geschehen.) Die Konditionszahl selbst zu
berechnen ist aufwendiger als das Ausgangsproblem zu lösen, so daß man sich mit einer
gut durchdachten Schätzung begnügen muß.
Zum Abschluß wollen wir uns noch überlegen, warum ein kleines Residuum r = Ax̂ − b
für eine Näherungslösung nicht unbedingt besagt, daß x̂ nahe an der Lösung x liegt. Für
unsere Hilbertmatrix hatte die sehr falsche Lösung ein winzig kleines Residuum. Es gilt
für das Residuum r und die Näherungslösung x̂
(A −
denn
1
rx̂T )x̂ = b,
kx̂k2
1
1
rx̂T x̂ =
rkx̂k2 = r.
2
kx̂k
kx̂k2
x̂ ist demnach die exakte Lösung des Problems mit der Störung
k
1
rx̂T
kx̂k2
in A. Es gilt
1
krk
1
rx̂T k =
krk kx̂k =
.
2
2
kx̂k
kx̂k
kx̂k
Ist also krk sehr klein, so auch diese Störung. Satz 2.6 sagt, daß diese Störung in die
Abweichung der Lösung mit dem Faktor κ(A) eingeht. Bei großer Konditionszahl von A
kann also auch ein x̂ mit sehr kleinem Residuum stark von x abweichen.
Weiterführende Literatur
• N.J. Higham, Accuracy and Stability of Numerical Algorithms, SIAM
• M. Overton, Numerical Computing with IEEE Floating Point Arithmetic, SIAM
• P. Deuflhard, A. Hohmann, Numerische Mathematik I, Walter de Gruyter
Herunterladen