Übungen II zur Vorlesung Angewandte Informatik Prof. Dr. Nikolaus Wulff zum 19. Okt 2006 1 Integration einer reelwertigen Funktion Aufgabe: Entwickeln Sie eine Methode integral(a,b,eps,f), zum Berechnen des Integrals einer beliebigen reelwertigen Funktion f (x), auf dem endlichen Intervall [a, b] , a < b mit a, b ∈ R\{±∞}, bei einem vorgegebenen Nährungsfehler . Das Integrationsverfahren nach Newton und Cotes ersetzt hierbei den Integrand durch ein passend interpolierendes Polynom Pn (x) vom Grad n, Rb Rb dessen Integral a Pn (x)dx als Nährung für a f (x)dx verwendet wird. Zur Bestimmnug des Polynoms wird das Interval gleichmässig in n Punkte xi = a + ih, h := (b − a)/n, i = 0, · · · , n unterteilt und in den Stützpunkten xi die Interpolationsformel nach Lagrange verwendet: Pn (x) ≡ n X f (xi )Li (x) (1) i=0 n Y x − xk Li (x) = xi − xk (2) k=0 k6=i mit fi = f (xi ) und der Substitution x = a + hs erhält man Li (x) = φi (s) := n Y s−k i−k k=0 (3) k6=i und das Nährungsintegral lässt sich auswerten zu: Z b Z b n X fi Pn (x)dx = Li (x)dx a i=0 n X = h i=0 = h n X i=0 1 (4) a Z n fi φi (s)ds (5) 0 fi αi . (6) Rn Die Koeffizienten αi = 0 φi (s)ds sind unabhängig von der Funktion f und liegen tabelliert vor. Es sind rationale Zahlen mit der Eigenschaft n X αi = n (7) i=0 Im Fall n = 1 ergibt dies die Trapezregel {α0 , α1 } = { 21 , 21 } Z b h (f0 + f1 ) P1 (x)dx = 2 a b−a = (f (a) + f (b)) 2 (8) (9) und für n = 2 die Simpson-Regel {α0 , α1 , α2 } = { 13 , 43 , 31 } Z b h P2 (x)dx = (10) (f0 + 4f1 + f2 ) 3 a b−a b+a = (f (a) + 4f ( ) + f (b)) (11) 6 2 Die Fehler der beiden obigen Integrationsnährungsformeln lassen sich mit 5 3 Hilfe des Taylorschen Restglieds abschätzen zu h12 f (2) (ξ) und h90 f (4) (ξ) mit ξ ∈ [a, b], wobei f (n) (x) die n-te Ableitung der Funktion f bedeutet. Zur Minimierung des Fehlers wird im Allgemeinen nicht der Grad n des Polynoms erhöht, sondern der Faktor h durch Unterteilung des Intervalls in Teilabschnitte verkleinert. Für h < 1 werden die Potenzen sehr schnell klein. Hierzu werden die Summen nicht über das gesamte Intervall [a, b] ausgewertet, sondern dies wird in N Teilintervalle der Breite h = b−a N unterteilt, deren Einzelergebnisse dann aufsummiert werden. Angewandt für die Trapezsumme bringt die Auswertung auf dem Teilintervall [xi , xi+1 ] den Nährungswert Ti := h2 [f (xi ) + f (xi+1 )]. Durch wiederholte P −1 Anwendung dieser Formel wird die Gesamtsumme IN = N i=0 Ti des Integral approximiert durch Z b N −1 X h f (x)dx ' IN := [f (xi ) + f (xi+1 )] (12) 2 a i=0 f (a) f (b) = h[ + f (a + h) + f (a + 2h) + · · · + f (b − h) + ] 2 2 Tip: Implementieren Sie die integral Routine gegen eine abstrakte Funktion f (x), die durch einen Funktion Pointer fp=double (*f)(double x) modelliert wird. Durch sukzessive Verkleinerung der Intervalle [xi , xi+1 ], d.h. Erhöhung der Anzahl N der Teilintervalle, lässt sich der absolute Fehler δN := |IN − IN −1 | der N -ten Iteration abschätzen. Die Bedingung δN < liefert dann das Abbruchskriterium. Frage: Wie kann erreicht werden, dass der Algorithmus auch mit der Simpson Methode oder Newton-Cotes-Formeln höherer Ordnung funktioniert? 2 2 Komplexe Division Die Division zwei komplexer Zahlen u, v ∈ C mit u ≡ a + jb und v ≡ c + jd für a, b, c, d ∈ R ist für v 6= 0 definiert als a + jb u = v c + jd ac + bd ⇒ Real(z) = 2 c + d2 z= ≡ , uv ac + bd + j(bc − ad) = 2 |v| c2 + d2 bc − ad Imag(z) = 2 . c + d2 (13) (14) Es ist allerdings auch möglich die Division mit Hilfe der Polardarstellung z = rz ejφz einer komplexen Zahl vorzunehmen: z= ⇒ Real(z) = ru ejφu u = v rv ejφv = ru cos(φu − φv ) rv , ru j(φu −φv ) e rv ru Imag(z) = sin(φu − φv ) rv (15) (16) Mathematisch sind beide Divisionsergebnisse equivalent, sieht man von Rundungsfehlern einmal ab. Es ergibt sich jedoch auf Grund der trigonometrischen Funktionen und der Wurzeloperation ein unterschiedliches Laufzeitverhalten für beide Lösungen. Aufgabe Zeigen Sie um wie viel aufwändiger die Division mittels Polarkoordinaten nach Formel 16 im Vergleich zur direkten Berechnung nach Formel 14 ist. Verwenden Sie die folgenden Tabelle zur Gewichtung der entsprechenden Operationen: Operation add, sub mult, div sqrt sin, cos, atan Gewicht 1 2 4 20 Diese Tabelle ist gewichtet nach der Anzahl von CPU Zyklen für eine 386 FPU mit der Addition normiert auf 1. Tip Erstellen Sie einen Aufrufgraph (⇒ Baumstruktur) aller benötigen Operationen und gewichten Sie die Knoten entsprechend der Tabelle. Vernachlässigen Sie den Aufwand, um Zwischenergebnisse zwischen Speicher und FPU Register hin und her zu schreiben. Es geht hier nicht um absolute Zahlen, sondern um den relativen Unterschied der beiden Methoden. 3 3 Problematische Rekursion Zur Berechnung der Fakultätet n! wird häufig ein rekursiver Algorithmus verwendet, der genau n rekursive Aufrufe benötigt. Eine solche Verkettung von rekursiven Aufrufen kann jedoch unter Umständen ungünstig sein, wie das folgende Beispiel der Fibonacci Zahlen Fn zeigt. Diese sind ähnlich zur Fakultät rekursiv definiert F1 ≡ F2 ≡ 1 (17) Fn := Fn−1 + Fn−2 ∀ n ∈ N\{1, 2}. (18) Machen Sie sich Gedanken zum Laufzeitverhalten eines rekursiven Algorithmus fib(n)≡ Fn . Überlegen Sie wie die Anzahl an rekursiven Aufrufen von fib – bezeichnet als RF (n) – ansteigt, um Fn für ein beliebiges n > 2 zu berechnen. Anbei zur Illustration des exponentiellen Verhaltens eine Tabelle mit einigen Fibonacci Zahlen Fn und der Anzahl RF (n) an notwendigen Rekursionen zu deren Berechnung. n 3 4 5 10 20 30 F(n) 2 3 5 55 6765 832040 RF (n) 3 5 9 109 13529 1664079 Aufgabe • Entwickeln Sie einen rekursiven Algorithmus fib(int n) zur Berechnung der Fibonacci Zahlen. • Wie lautet das Bildungsgesetz von RF (n)? • Wie kann der Algorithmus verbessert werden, so dass er lineares Verhalten zeigt? Tip Das Bildungsgesetz RF (n) kann selbst rekursiv definiert werden und besitzt auch eine Darstellung mit Hilfe der Fibonacci Zahlen. Skizzieren Sie den Aufrufgraphen (⇒ Baumstruktur) für die Berechnung von F5 , um sich klar zu machen, weshalb hierzu 9 Aufrufe von fib benötigt werden. 4