Übungsblatt Nr. 5

Aufgabe 1 (7.5 Punkte)

Der im C++ Programm Lagrange_Polynom_1.cpp implementierte Algorithmus stellt eine nützliche Implementierung der Lagrange Polynom Methode dar, die wir vielleicht auch in zukünftigen Programmen verwenden können. Definieren Sie eine C++ Funktion, die den Kern-Algorithmus des Programms Lagrange_Polynom_1.cpp beinhaltet. Die Struktur der Funktion sollte dem allgemeinen C++ Funktionenschema "'Rückgabe Typ' Funktionsname ('Argumentenliste') { 'Block von Anweisungen' }" folgen (siehe Funktionen in C++) und in der 'Argumentenliste' sollte einerseits der Zeiger auf das im Hauptprogramm deklarierte Stützstellen-Array und seine Dimension stehen und andererseits sollten die im Hauptprogramm deklarierten Arrays double xp[N_xp+1], double fp[N_xp+1] und double Pfp[N_xp+1] mittels eines Aufrufs der Funktion mit den entsprechenden Datenwerten der Berechnung gefüllt werden. Testen Sie das Programm zunächst mittels des vorgegebenen Beispiels ($f(x)=1/x$ und $\vec{x}=\left( 2, 2.5, 4 \right)$) und berechnen dann das Lagrange Polynom vom Grade $n=8$ im Teilintervall $[a,b]=[0.91,9.07]$ mit $f(x) = 10 \, e^{-x/5} \cdot \hbox{sin}(3 \, x)$ und $\vec{x}=\left( 1,2,3,4,5,6,7,8,9 \right)$.

Aufgabe 2 (7.5 Punkte)

Berechnen Sie die ersten 40 Zahlenwerte der Fibonacci-Folge mittels einer for-Schleife. Die Fibonacci-Folge $f_n, n=[1,2,3,...]$ ist durch folgendes rekursives Bildungsgesetz definiert: \[ \begin{equation} f_n = f_{n-1} + f_{n-2} \,\, , \quad \hbox{mit den Anfangswerten: } \, f_1 = f_2 = 1 \end{equation} \] Benutzen Sie bei der Implementierung der Folge das im Unterpunkt C++ Arrays, Zeiger und Referenzen der Vorlesung 5 vorgestellte Konstrukt des C++ Arrays. Deklarieren Sie ein eindimensionales Array der Folgenglieder $f_n$ und speichern Sie sich die ersten 40 Fibonacci-Zahlen in diesem Array. Benutzen Sie bei der Implementierung des oben dargestellten rekursiven Bildungsgesetzes einen Indexbasierten Zugriff auf die Elemente des Arrays und versuchen Sie dabei die mathematische Formulierung des Bildungsgesetzes in einer äquivalenten Darstellung im C++ Quelltext zu formulieren, um somit die Verständlichkeit des Quelltextes zu erleichtern.
Zeigen Sie außerdem, dass das Verhältnis zweier aufeinanderfolgender Zahlen der Fibonacci-Folge ($\frac{f_n}{f_{n-1}}$) im Grenzwert $\lim \limits_{n \to \infty}$ gegen die irrationale Zahl des Goldenen Schnitts $\Phi \approx 1.618033988749894848204586834$ konvergiert. Bemerkung: Der Goldene Schnitt ist in vielen Bereichen der Mathematik, Kunst, Architektur und Biologie von Bedeutung (näheres siehe z.B. Wikipedia: Goldene Schnitt).

Aufgabe 3 (5 Punkte)

Im Unterpunkt C++ Arrays, Zeiger und Referenzen hatten wir gesehen, wie man Arrays an eine Funktion als Argument übergeben kann und dabei die Methoden Call-by-Pointer, Call-by-Reference und Call-by-Value besprochen. Die gleichen Konzepte gelten auch für die gewöhnlichen skalaren Datentypen (int, double, ...).
Konstruieren Sie eine Tausch-Funktion für zwei skalare double-Datentypen ("double a" und "double b"). Die Funktion soll dabei die im Hauptprogramm initialisierten Werte von "a" und "b" vertauschen, sodass nach dem Funktionsaufruf die Variable "a" den Wert von "b" und die Variable "b" den ursprünglich initialisierten Wert von "a" besitzt. Verwenden Sie hierbei als 'Rückgabe Typ' void und als 'Argumentenliste' den Zeiger auf a und b (Call-by-Pointer) bzw. die Referenz (Call-by-Reference). Was wäre geschehen, hätten Sie anstatt der Zeiger/Referenzen die Werte der Variablen an die Funktion übergeben (Call-by-Value)?

Die Musterlösung der Aufgaben des Übungsblattes Nr. 5 finden Sie unter dem folgenden Link:
Musterlösung Übungsblatt Nr. 5