import numpy as np import matplotlib.pyplot as plt # Aufgabe 2a xmin = 1.99 xmax = 2.01 x_number_of_points = 500 xsteps = (xmax - xmin) / x_number_of_points def f1(x): return x ** 7 - 14 * x ** 6 + 84 * x ** 5 - 280 * x ** 4 + 560 * x ** 3 - 672 * x ** 2 + 448 * x - 128 def f2(x): return (x - 2) ** 7 x1 = np.arange(xmin, xmax + xsteps, xsteps) yf1 = [f1(x_value) for x_value in x1] yf2 = [f2(x_value) for x_value in x1] plt.plot(x1, yf1, label='f1(x)') plt.plot(x1, yf2, label='f2(x)') plt.legend() plt.title("Aufgabe 2a") plt.figure() print(f'min f1: {min(yf1)} max f1: {max(yf1)}') print(f'min f2: {min(yf2)} max f2: {max(yf2)}') # Die Werte sind sehr klein (von -e-14 bis e-14) # sodass Rundungsfehler entstehen wenn die Werte als Fliesskommazahlen # zwischengespeichert werden. In den zwei Funktionen f1 und f2 werden die # Rechenoperationen in einer anderen Reihenfolge ausgeführt. # bei f1 werden die Terme addiert. Damit werden die Rundungsfehler Kummuliert. # bei f2 erhält man immer eine Zahl nahe bei 0 da nur eine Subtraktion durchgeführt # wird die einen zu einem Rundungsfehler führen kann. # Aufgabe 2b xmin = -10 ** -14 xmax = 10 ** -14 xsteps = 10 ** -17 def g1(x): return x / (np.sin(1 + x) - np.sin(1)) x2 = np.arange(xmin, xmax + xsteps, xsteps) yg1 = [g1(x_value) for x_value in x2] plt.plot(x2, yg1, label='g1(x)') print(f'min g1: {min(yg1)} max g1: {max(yg1)}') # Die Berechnung des Grenzwertes für x --> 0 g(x) ist nicht stabil. # Der Grenzwert scheint unendlich gross / klein zu sein. # Bei g1 ist der Nenner sehr gross wenn x --> 0. # Aufgabe 2c # a = 1+x, b = 1 def g2(x): return x / (2 * np.cos((1 + x + 1) / 2) * np.sin((x) / 2)) yg2 = [g2(x_value) for x_value in x2] plt.plot(x2, yg2, label='g2(x)') print(f'min g2: {min(yg2)} max g2: {max(yg2)}') plt.legend() plt.title("Aufgabe 2bc") # Bei der Funktion g2 bleibt der Wert stabil bei 1.85. Somit ist dies der Grenzwert. # Die Auslöschung kann vermieden werden indem Sinus und Cosinus im Nenner stehen. plt.show()