diff --git a/Kuengjoe_S04/HM2_Serie03.pdf b/Kuengjoe_S04/HM2_Serie03.pdf new file mode 100644 index 0000000..ce59537 Binary files /dev/null and b/Kuengjoe_S04/HM2_Serie03.pdf differ diff --git a/Kuengjoe_S04/Kuengjoe_S04_Aufg2.py b/Kuengjoe_S04/Kuengjoe_S04_Aufg2.py new file mode 100644 index 0000000..fcc2577 --- /dev/null +++ b/Kuengjoe_S04/Kuengjoe_S04_Aufg2.py @@ -0,0 +1,22 @@ +import numpy as np + +def lagrange_int(x, y, x_int): + s = 0 + + for i in range(len(x)): + L = 1 + for j in range(len(x)): + if i != j: + L = L * (x_int - x[j]) / (x[i] - x[j]) + s = s + y[i] * L + + return s + + +x = [0, 2500, 5000, 10000] +y = [1013, 747, 540, 226] +x_int = 3750 + +y_int = lagrange_int(x, y, x_int) + +print("y_int =", y_int) \ No newline at end of file diff --git a/Kuengjoe_S04/Kuengjoe_S04_Aufg3.py b/Kuengjoe_S04/Kuengjoe_S04_Aufg3.py new file mode 100644 index 0000000..0d6efd3 --- /dev/null +++ b/Kuengjoe_S04/Kuengjoe_S04_Aufg3.py @@ -0,0 +1,82 @@ +import numpy as np +import matplotlib.pyplot as plt + +x = np.array([1981, 1984, 1989, 1993, 1997, 2000, 2001, 2003, 2004, 2010], dtype=float) +y = np.array([0.5, 8.2, 15, 22.9, 36.6, 51, 56.3, 61.8, 65, 76.7], dtype=float) + +x_plot = np.arange(1975, 2020.1, 0.1) + +p1 = np.polyfit(x, y, len(x) - 1) +y_plot1 = np.polyval(p1, x_plot) + +plt.figure() +plt.plot(x_plot, y_plot1) +plt.plot(x, y, "o") +plt.xlim(1975, 2020) +plt.ylim(-100, 250) +plt.title("Aufgabe 3a") +plt.grid() + +# Das Polynom geht praktisch durch alle Datenpunkte. + + + +x_mean = np.mean(x) +x_shift = x - x_mean +x_plot_shift = x_plot - x_mean + +p2 = np.polyfit(x_shift, y, len(x_shift) - 1) +y_plot2 = np.polyval(p2, x_plot_shift) + +plt.figure() +plt.plot(x_plot, y_plot2) +plt.plot(x, y, "o") +plt.xlim(1975, 2020) +plt.ylim(-100, 250) +plt.title("Aufgabe 3b") +plt.grid() + +# Mit verschobenen x-Werten ist die numerische Stabilität besser. + + + +y_2020_a = np.polyval(p1, 2020) +y_2020_b = np.polyval(p2, 2020 - x_mean) + +print("Schätzwert 2020 aus a):", y_2020_a) +print("Schätzwert 2020 aus b):", y_2020_b) + +# Der Schätzwert für 2020 ist unsicher, weil er außerhalb des Datenintervalls liegt. + + + +def lagrange_int(x, y, x_int): + y_int = np.zeros(len(x_int)) + + for k in range(len(x_int)): + s = 0 + for i in range(len(x)): + L = 1 + for j in range(len(x)): + if i != j: + L = L * (x_int[k] - x[j]) / (x[i] - x[j]) + s = s + y[i] * L + y_int[k] = s + + return y_int + +y_lagrange = lagrange_int(x, y, x_plot) + +plt.figure() +plt.plot(x_plot, y_lagrange, label="Lagrange") +plt.plot(x_plot, y_plot2, label="polyfit b)") +plt.plot(x, y, "o") +plt.xlim(1975, 2020) +plt.ylim(-100, 250) +plt.title("Aufgabe 3d") +plt.grid() +plt.legend() + +# Beide Kurven sind fast gleich. Kleine Unterschiede kommen von numerischen Fehlern. + +plt.show() \ No newline at end of file