Übung Numerische Mathematik für LA SS08 Eva Roth Beispiel 28 In Maple alle bestehenden (benutzerdefinierten) Bindungen lösen: > restart; Angabe Berechne in 5-stelliger Gleitpunkt-Arithmetik die Nullstellen des Polynoms x2 − bx + c = 0 für b = 3,6778 und c = 2,0789*10 ( −3 ) Funktion definieren und Graph zeichnen Wir betrachten ein quadratisches Polynom p(x) = x2 − bx + c mit speziellen Koeffizienten b = ( −3 ) 3,6778 und c = 2,0789*10 > b:=3.6778;c:=2.0789*10^(-3);p(x):=x^2-b*x+c; b := 3.6778 c := 0.002078900000 p( x ) := x2 − 3.6778 x + 0.002078900000 Wir suchen die Nullstellen von p(x), d.h. die Lösungen der quadratischen Gleichung p(x) = 0: > glg:=p(x)=0; glg := x2 − 3.6778 x + 0.002078900000 = 0 Der Graph der Funktion p(x) sieht so aus: (scaling = constrained bewirkt ein unverzerrtes Bild (die Koordinatenachsen werden im selben Maßstab dargestellt)) > plot(p(x), x=-2..6,y=-4..8,scaling=constrained); Die beiden Nullstellen (wir nennen sie r+ und r− ) befinden sich ungefähr bei 0 und in dem Intervall [3.6, 3.8]. exakte Berechnung der Nullstellen Exakte Berechnung der Nullstellen durch Maple mit dem Befehl solve ("Löse glg nach x"): > r_exakt:= solve(glg,x); r_exakt := 3.677234657, 0.0005653433066 Man sieht, dass Maple standardmäßig auf 10 relevante (= signifikante) Stellen rechnet ( Digits:=10 ist die automatisch vorgegebene Einstellung). Eine relevante Stelle = eine Stelle, die nicht Null ist (die Nuller mittendrin sind schon relevant; die Nuller davor oder danach sind nicht relevant). r_exakt[1] bedeutet, dass auf die 1.Zahl in r_exakt zugegriffen wird. > r_plus_exakt:=r_exakt[1]; r_minus_exakt:=r_exakt[2]; r_plus_exakt := 3.677234657 r_minus_exakt := 0.0005653433066 numerische Berechnung/ Abschätzungen (jeweils nur 5 relevante Stellen) Die quadratische Gleichung x2 − bx + c = 0 kann mit Hilfe der großen quadratischen − (−b) ± (−b) 2 − 4.1.c b ± b 2 − 4c = gelöst werden. 2 .1 2 b + b 2 − 4c b − b 2 − 4c Die Lösungen sind somit r+ := x1 = und r− := x2 = , die wir 2 2 schrittweise aufbauen: Lösungsformel x1, 2 = a) b2 b) 4c c) b2- 4c b2 − 4 c d) Schritt a) bis Schritt d) sind bei r+ und r− gleich, bei den Schritten e) und f) kommt es zur Unterscheidung in: e+) b + b2 − 4 c b+ b2 − 4 c f+) 2 e-) b − b2 − 4 c b− b2 − 4 c f-) 2 In jedem einzelnen Schritt prüfen wir, ob es zu Problemen (= Ungenauigkeiten) kommt, wenn wir laut Angabe nur 5 relevante Stellen betrachten. Digits gibt die Anzahl der Stellen bei numerischen Berechnungen an. Genauer: Die Genauigkeit für numerische Berechnungen mit Gleitkommazahlen (bzw. Gleitpunktzahlen bzw. Fließkommazahlen) ist durch die Systemvariable Digits festgelegt und beträgt normalerweise 10 Stellen. Durch eine Veränderung dieser Variable kann die Genauigkeit eingestellt werden. Wir wollen mit 5 Stellen rechnen, daher > Digits:=5; Digits := 5 2 a) b > b^2; 13.526 b) 4c > 4*c; 0.0083156 2 c) b - 4c > b^2-4*c; 13.518 d) b2 − 4 c > sqrt(b^2-4*c); 3.6767 e+) b + b2 − 4 c > b+sqrt(b^2-4*c); 7.3545 f+) b+ b2 − 4 c 2 > (b+sqrt(b^2-4*c))/2; 3.6773 e-) b − b − 4 c > b-sqrt(b^2-4*c); 2 0.0011 f-) b− b2 − 4 c 2 > (b-sqrt(b^2-4*c))/2; 0.0005 Bei den in Schritt a) bis f+) verwendeten Operationen Multiplikation, Subtraktion (von 2 Zahlen, die NICHT fast gleich groß sind), Wurzelziehen und Division gibt es keine Auslöschung und daher keine Ungenauigkeit beim Ergebnis. Das Ergebnis hat die selbe ( −3 ) Genauigkeit wie zuvor bei den Ausgangsdaten b = 3,6778 und c = 2,0789*10 , also 5 relevante Stellen. Im Schritt f+) erhalten wir das Ergebnis für r+ mit gewünschter Genauigkeit (5 relevante Stellen): 3.6773. Nur bei Schritt e-) (und somit auch bei Schritt f-), wo nur zusätzlich noch durch 2 dividiert wird) kommt es zu einer Ungenauigkeit. Das Ergebnis ist auf viel weniger als 5 relevante Stellen genau. Im Schritt e-) sind es nur mehr 2 relevante Stellen, im Schritt f-) sogar nur mehr eine! Begründung: Im Schritt e-) (und somit auch f-)) tritt der Effekt/das Problem der Auslöschung auf, d.h. zwei fast gleich große (fehlerbehaftete!) Zahlen werden voneinander subtrahiert. b und c wurden durch Messungen ermittelt und sind daher fehlerbehaftet. c ist sehr klein, daher kann man bei den Zahlen b und b2 − 4 c von zwei fast gleich großen Zahlen sprechen, die voneinander subtrahiert werden. Bzgl r− unterscheidet sich das numerische Ergebnis (Schritt f-), nur eine relevante Stelle aufgrund der Auslöschung) katastrophal von der exakten Lösung: (Mit dem %-Zeichen wird auf den letzten Maple-Output zugegriffen) > %=r_minus_exakt; 0.0005 = 0.0005653433066 r− kann aber auch mit Hilfe des Satzes von Vieta berechnet werden. Damit wird die Auslöschungs-Subtraktion (im Schritt e-) und f-)) vermieden, weil wir die Division verwenden. So bekommen wir die gewünschten 5 relevanten Stellen (siehe nächster Abschnitt). Satz von Vieta Wir betrachten die quadratische Gleichung x2 − bx + c = 0 mit den beiden Lösungen r+ und r− . Laut dem Satz von Vieta gilt, dass der Koeffizient c gleich dem Produkt der beiden Lösungen ist: c = r+ * r− c Daraus folgt r− = . r+ Das Ergebnis für r+ ist 3.6773 (laut Schritt f+)). > r_minus_Vieta:=c/3.6773; r_minus_Vieta := 0.00056534 > r_minus_Vieta=r_minus_exakt; 0.00056534 = 0.0005653433066 Mit der Anwendung des Satzes von Vieta erhalten wir die gewünschte Genauigkeit (5 relevante Stellen) für r− .