Übung I zur Vorlesung Informatik III Prof. Dr. Nikolaus Wulff Zum 13. Oktober 2011 1 Konvergenz von Folgen Sie werden häufig vor der Aufgabe stehen einen iterativen Algorithmus zu entwickeln, der eine numerische Nährungslösung zu einem gegebenem Problem berechnet. Meist wissen Sie weder eine analytische Lösung noch kennen Sie einen direkten Weg zur deren Berechnung. Der Computer kann Ihnen jedoch sehr effizient eine Nährung mit gewünschter Genauigkeit liefern. Dies geschieht häufig in Form einer Folge von Werten (ak )k∈N die (hoffentlich) gegen die gesuchte exakte Lösung a konvergiert. Eine Folge (ak )k∈N heißt Cauchy-Folge mit Grenzwert a = lim ak k→∞ (1) falls es zu einem beliebig vorgegebenen ε > 0 ein n0 (ε) ∈ N gibt mit der Eigenschaft |an − am | < ε ∀ n > m ≥ n0 (ε). (2) oder anders formuliert alle an approximieren a mit Genauigkeit ε: |an − a| < ε ∀ n > n0 (ε) (3) Bemerkung: n0 ist keine Konstante, sonderen hängt ab von der Wahl von ε, meist wird dies jedoch nicht explizit ausgeschrieben. Entscheidend für unsere Fragstellung ist jetzt, was bedeutet dies für eine numerische Auswertung einer solchen Folge, welches n0 ist zu wählen oder kann man auf dessen Bestimmung unter geeigneten Bedingungen eventuell ganz verzichten? Wie lässt sich ein geeigneter algorithmischer Rahmen – quasi als Blaupause – zur Berechnung solcher Folgen, wie sie in vielen numerischen Anwendungen vorkommen, beschreiben? Aufgabe Formulieren Sie den Kern des Algorithmus zur Bestimmung ob die Konvergenz einer Folge (ak )k∈N zu vorgegebenem ε erreicht ist oder nicht und 1 ermitteln Sie deren Grenzwert a. Berücksichtigen Sie ferner, dass unter Umständen die Folge gar keine Cauchy-Folge ist, d.h. dass diese divergiert. Auch dies muss erkannt werden, so dass sich der Algorithmus nicht in einer Endlosschleife verfängt. Da Sie in der Informatik – im Gegensatz zur Mathematik – mit einer endlich genauen Zahlendarstellungen arbeiten, stellt sich die Frage nach der Größe von ε. Wie ist diese geeignet zu wählen? Tip Konkreter Hintergrund dieser Fragestellung ist z.B. die numerische Integration und Differentiation (wie es im Praktikum ansteht), das numerische Lösen von Differentialgleichungen, das Ermitteln von Eigenwerten von Matrizen mit iterativen Verfahren etc. Um z.B. das bestimmte Integral Z x I(x) := f (u) du (4) 0 numerisch zu bestimmen, wird im einfachsten Fall der Rechteckintegration eine Folge Sn∈N (x) von Summen der Art n−1 Sn (x) := xX x f ( j) n n (5) j=0 zur Approximation des Integrals wiederholt mit wachsendem n ausgewertet, bis die gewünschte Genauigkeit erreicht ist. Für stetige beschränkte Funktionen f wird die Folge (Sn ) gegen das Riemannsche Integral (4) konvergieren, so dass I(x) = lim Sn (x) (6) n→∞ gilt. Bis zu welchem n muss iteriert werden, um sicherzustellen, dass der gemachte Fehler kleiner ε ist? Denn n = ∞ ist nicht definiert, macht numerisch keinen Sinn und dauert “ewig”... 2 2 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 (7) Fn := Fn−1 + Fn−2 ∀ n ∈ N\{1, 2}. (8) Machen Sie sich Gedanken zum Laufzeitverhalten eines rekursiven Algorithmus fib(n)≡ Fn . Überlegen Sie wie die Anzahl an rekursiven Aufrufen von fib – bezeichnet als R(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 R(n) an notwendigen Rekursionen zu deren Berechnung. n 3 4 5 ... 10 20 30 F(n) 2 3 5 ... 55 6765 832040 R(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 R(n)? Beweisen Sie es mit vollständiger Induktion. • Wie kann der Algorithmus verbessert werden, so dass er lineares Verhalten zeigt? D.h. entwickeln Sie einen nicht rekursiven Algorithmus. Tip Das Bildungsgesetz R(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. 3