Numerik-Labor www.igpm.rwth-aachen.de/Numa/NumaMB Sommersemester 2008 IGPM, RWTH Aachen Laborübung 3: Rundungsfehler und Auslöschung Vorversuch 1 In der rechnerinternen Fließkommadarstellung von Zahlen sind selbst einfache Brüche im allgemeinen nicht exakt darstellbar, so dass schon bei einfachen Rechnungen Rundungsfehler auftreten. Dieser Effekt wird durch folgendes Beispiel demonstriert. Wir berechnen für N = 1, 2, . . . , 20 in SciLab die Ausdrücke x = 1/N, √ y = ( x)2 − x, z =1− N X x. i=1 y und z sind bei exakter Rechnung 0. Welche Werte liefert SciLab? Obiges Beispiel zeigt insbesondere, dass es wegen der unvermeidlichen Rundungsfehler nicht sinnvoll ist, Fließkommazahlen auf exakte Gleichheit zu testen. Wie sieht eine sinnvolle Abfrage der Bedingung y = 0 aus? Vorversuch 2 Wir berechnen mit SciLab den Ausdruck f = 333.75b6 + a2 (11a2 b2 − b6 − 121b4 − 2) + 5.5b8 + a , 2b wobei a = 77617 und b = 33096 seien. Beachten Sie, dass sowohl a und b als auch die Konstanten 333.75 und 5.5 im Dualsystem exakt darstellbar sind. 54767 Hinweis: Maple liefert für obigen Ausdruck den Wert − 66192 = −0.82739 . . . Vorversuch 3 Die Exponentialfunktion lässt sich auf Matrizen verallgemeinern. Für eine quadratische Matrix A wird exp(A) durch die Potenzreihe exp(A) = ∞ X Ak k=0 k! definiert. In der Funktion my_exp wird exp(A) gemäß der Definition ausgewertet. Dazu wird in einer Schleife der k-te Summand Sk = Ak , k! berechnet, indem S0 mit der Einheitsmatrix (eye) initialisiert und in den folgenden Schritten Sk+1 = (Sk · A)/(k + 1) 1 Numerik-Labor www.igpm.rwth-aachen.de/Numa/NumaMB Sommersemester 2008 IGPM, RWTH Aachen gesetzt wird. Es wird solange summiert, bis kSk k2 ≤ 10−20 gilt oder k größer als 1000 wird. Wir führen my_exp(A) für die Matrix −78 108 −40 A = −17 26 −37 −3 11 −48 aus, und vergleichen das Ergebnis mit dem, das die SciLab–Funktion expm liefert. Wie groß ist der relative Fehler? Wie lässt sich der auftretende Unterschied erklären? Hinweis: Ausgabe des Summanden Sk . 2