Gleitkommaarithmetik und Pivotsuche bei Gauß-Elimination Vorlesung Computergestützte Mathematik zur Linearen Algebra Lehrstuhl für Angewandte Mathematik Wintersemester 2009/10 14. Januar 2010 Instabilitäten bei Gauß-Elimination Beispiele: ◮ ◮ 0 1 A= 1 1 Division durch 0 im 1. Schritt, LR-Zerlegung existiert nicht −20 10 1 A= 1 1 Pivotelement 10−20 = 6 0, LR-Zerlegung existiert −20 1 0 10 1 L= , R= 1020 1 0 1 − 1020 richtig, wenn keine Rundefehler auftreten Gleitkommaarithmetik ◮ Wie werden Zahlen im Rechner dargestellt? ◮ Welche Fehler können bei Grundrechenarten passieren? ◮ Wie kann man Instabilitäten im Gauß-Algorithmus vermeiden? Gleitpunktdarstellung reeller Zahlen x ∈ R, x 6= 0 kann eindeutig durch x = ±a · 10b dargestellt werden: ◮ a Mantisse, 0.1 ≤ a < 1 ◮ b Exponent Einschränkungen durch den Rechner: ◮ nur ℓ Ziffern für die Mantisse ◮ nur ℓ′ Ziffern für den Exponenten hier zur Vereinfachung: ℓ′ = ∞ Gleitpunktdarstellung reeller Zahlen sei a auf ℓ Ziffern gerundete Mantisse von x = ±a · 10b , so kann nur mit fl(x) = ±a · 10b statt x gerechnet werden. Beispiel: ℓ = 8, x = π = 3.141592653 . . . fl(π) = 0.31415927 · 101 Definition. Die Maschinengenauigkeit eps ist die kleinste positive Zahl für die fl(1 + eps) > 1. Dezimalsystem mit ℓ-stelliger Genauigkeit: eps = 5 · 10−ℓ , Binärsystem (Basis 2): eps = 2−ℓ (Matlab: ℓ = 52) IEEE std 754 - 1985: Gleitkommazahlen Standardisierung der Darstellung im Rechner durch IEEE: single precision: 32 bit, double precision 64 bit Genauigkeit einfach = single doppelt = double Vorzeichen 1(31) 1(63) Exponent 8(30-23) 11(62-52) Mantisse 23(22-0) 52(51-0) Eine Gleitkommazahl x wird dargestellt durch x = s · m · be ◮ ◮ ◮ b Basis (b = 2) e Exponent (8 bzw. 11 bits) m Mantisse (23 bzw. 52 bits) Damit ergibt sich eps = 2−23 ≈ 1.2 · 10−7 bzw. eps = 2−52 ≈ 2.2 · 10−16 In Matlab wird standardmäßig doppelt genau gerechnet. Relative Fehler Satz. Für jedes x 6= 0 ist |fl(x) − x| ≤ eps|x|, der relative Fehler ist also durch die Maschinengenauigkeit beschränkt. Beweis. Sei x = a · 10b und fl(x) = a · 10b . Bei ℓ signifikanten Stellen ist |a − a| ≤ 5 · 10−l−1 , also |fl(x) − x| |a − a| · 10b 5 · 10−l−1 = ≤ = eps, |x| |a| · 10b 10−1 da a ≥ 10−1 . Schreibe daher fl(x) = x(1 + ǫ) mit |ǫ| ≤ eps Kondition eines Problems Ein Problem sei durch Auswertung einer Abbildung F : Rn → R beschrieben, wobei F z.B. ◮ Polynom ◮ rationale Funktion ◮ Lösung von Ax = b ◮ Lösung eines Eigenwertproblems Ax = λx Wie wirken sich Störungen in den Eingabedaten x = (x1 , . . . , xn ) auf das Resultat F (x) aus? Kondition eines Problems Definition. Die relative Kondition κr von F ist die kleinste Zahl, für die für eine Störung ǫ gilt |b xi − xi | ≤ǫ |xi | =⇒ |F (b x ) − F (x)| ≤ κr · ǫ. |F (x)| Definition. Die absolute Kondition κa von F ist die kleinste Zahl, für die für eine Störung ǫ gilt |b xi − xi | ≤ ǫ =⇒ |F (b x ) − F (x)| ≤ κa · ǫ. Das Problem heißt gut konditioniert, falls κr und/oder κa nicht zu groß ist und anderenfalls schlecht konditioniert. Multiplikation zweier reeller Zahlen Sei F (x1 , x2 ) = x1 x2 . Für die gestörten Werte ist b x1 = x1 (1 + ǫ1 ), b x2 = x2 (1 + ǫ2 ), |ǫi | ≤ eps b x2 − x1 x2 x1 b = (1 + ǫ1 )(1 + ǫ2 ) − 1 = ǫ1 + ǫ2 + ǫ1 ǫ2 . x1 x2 eps klein, vernachlässige ǫ1 ǫ2 : b x2 − x1 x2 x1 b ≤ 2eps. x1 x2 damit: κr (F ) = 2, Multiplikation ist gut konditioniert. Subtraktion zweier reeller Zahlen Für F (x1 , x2 ) = x1 − x2 ist (b x2 ) − (x1 − x2 ) x1 ǫ1 − x2 ǫ2 |x1 | + |x2 | x1 − b = x1 − x2 ≤ |x1 − x2 | eps = κeps. x1 − x2 ◮ signx1 = −signx2 (Addition): κr (F ) = 1, Problem gut konditioniert ◮ x1 ≈ x2 : κr (F ) sehr groß, Subtraktion zweier etwa gleich großer Zahlen ist sehr schlecht konditioniert (Auslöschung) Beispiel bei eps = 10−16 A= 10−20 1 1 1 Pivotelement 10−20 6= 0, LR-Zerlegung von A existiert: −20 1 0 10 1 L= , R= 1020 1 0 1 − 1020 damit fl(L) = e L= damit 1 0 , 1020 1 −20 10 1 e fl(R) = R = 0 −1020 −20 −20 10 1 10 1 e e LR = 6 A= = 1 0 1 1 also fl(L) = e L= 1 0 , 1020 1 e= fl(R) = R 10−20 1 0 −1020 −20 −20 10 1 1 e e = 10 6 A= = LR 1 1 1 0 1 e e , so ergibt sich löst man mit L und R das LGS Ax = b mit b = 0 1 e x = ye (richtig) und dann aus Re aus e Le y = b zunächst ye = −1020 0 −1 die Lösung e x= (statt richtig x = ) 1 1 Spaltenpivotsuche Problem. L-Faktor enthält großes Element. Erinnerung: k − 1 Schritte Gauß-Elimination liefern × · · · × α1 × · · · .. .. .. . . . × α × ··· k−1 A → Ak−1 = αk × ··· .. .. . . αn × ··· × .. . × × .. . × Spaltenpivotsuche: wähle |αj | = max |αi | als Pivotelement. k≤i≤n damit: |ℓik | ≤ 1 Beispiel für n = 4 2 4 A= 8 6 Matlab-Demo: lrdemo 1 0 0 1 0 3 1 0 0 0 1 4 0 1 0 0 A = 1 − 2 2 7 1 3 1 0 0 0 − 4 7 1 3 7 7 1 3 9 9 0 1 5 8 8 7 9 9 7 4 4 1 − 76 1 3 1 5 17 4 − 27 2 3 Gauß-Elimination mit Spaltenpivotsuche nach n − 1 Schritten Gauß-Elimination: Ln−1 Pn−1 · · · L2 P2 L1 P1 A = R mit Permutationsmatrizen P1 , . . . , Pn−1 oder Ln−1 Pn−1 · · · L2 P2 L1 P1 = (L′n−1 · · · L′2 L′1 )(Pn−1 · · · P2 P1 ) =: L−1 P mit −1 −1 L′k = Pn−1 · · · Pk+1 Lk Pk+1 · · · Pn−1 wichtig: Pj führt nur Vertauschungen zwischen Zeilen j und m mit m > j durch, daher bleibt die Struktur von Lk unverändert, lediglich die Elemente unterhalb der Diagonalen werden permutiert LR-Zerlegung mit Spaltenpivotsuche Satz. Jede nichtsinguläre Matrix A ∈ Kn,n hat eine Zerlerung PA = LR mit 1. P Permutationsmatrix 2. L untere Dreiecksmatrix mit ℓi,i = 1 und |ℓj,k | ≤ 1 3. R obere Dreiecksmatrix mit rj,j 6= 0 Anwendung: Lösung linearer Gleichungssysteme Ax = b ⇐⇒ PAx = Pb ⇐⇒ LRx = Pb ⇐⇒ Ly = Pb, Rx = y Stabilität Definition: Ein Verfahren zur Berechnung von y = F (x) heißt stabil im Sinne der Vorwärtsanalyse, falls bei einer Rechengenauigkeit von eps für das berechnete Resultat ŷ |ŷ − y | ≤ C κr eps |y | für eine nicht zu große Konstante C gilt. Stabilität Definition: Ein Verfahren zur Berechnung von y = F (x) heißt stabil im Sinne der Rückwärtsanalyse, falls bei einer Rechengenauigkeit von eps das berechnete Resultat ŷ als exakte Lösung eines leicht gestörten Problems aufgefasst werden kann, d.h. ŷ = F (x̂), mit |x̂ − x| ≤ C eps |x| für eine nicht zu große Konstante C gilt.