Ü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 Beispieles ($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)

Die im C++ Programm Lagrange_Polynom_1.cpp implementierte Lagrange Polynom Methode approximiert eine vorgegebene Funktion $f(x)$ (hier speziell $f(x)=1/x$ ) durch ein Lagrangepolynom. Wir nehmen jedoch im Folgenden an, dass die wirkliche Funktion $f(x)$ unbekannt ist, und wir lediglich an den Stützstellen die Funktionswerte kennen. Gegeben seien die folgenden x- und y-Werte der Stützstellen: $\vec{x} = \left( 2, 10.1, 15, 20, 40, 60, 90 \right)$ und $\vec{y} = \left( 2.1, 41, 43, 40.2, 12, 5, 17.5 \right)$. Berechnen Sie das Lagrange Polynom $P_6(x)$ im Teilintervall $[a,b]=[0,100]$ mittels eines C++ Programms und stellen es grafisch mittels Python dar.

Aufgabe 3 (5 Punkte)

Im Unterpunkt C++ Arrays, Zeiger und Referenzen hatten wir gesehen, wie man ein Array an eine Funktion als Argument übergeben sollte: "Möchte man ein Array an eine Funktion als Argument übergeben, sollte man dies nicht über die einzelnen Werte des Arrays machen, da man dann die Array-Einträge nicht verändern kann. Stattdessen übergibt man ein Array (dies gilt auch für mehrdimensionale Arrays) als Zeiger auf sein erstes Element mit einem zusätzlichen Vermerk zu seiner Dimension." In gleicher Weise gilt dies 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 auf b. Was wäre geschehen, hätten Sie anstatt der Zeiger die Werte der Variablen an die Funktion übergeben?

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