import numpy as np import matplotlib.pyplot as plt import math # Aufgabe 4a) # Da die Operation nicht gut konditioniert ist, erhält man für den Ausdruck inder Wurzel # bei x = 1.1, -1.4e-14 => ein kleiner Rundungsfehler # Somit kann die Wurzel für diesen x Werte nicht berechnet werden. def h1(x): try: return math.sqrt(100 * math.pow(x, 2) - 200 * x + 99) except: return def h1_diff(x): try: return (100 * x - 100) / math.sqrt(100 * math.pow(x, 2) - 200 * x + 99) except: return def h2_diff(x): return (100 * x - 100) / math.sqrt((10*x-11)*(10*x-9)) def h2(x): return math.sqrt((10 * x - 9) * (10 * x - 11)) def kondnumb(x): try: return (np.abs(h1_diff(x)) * np.abs(x)) / np.abs(h1(x)) except: return def kondnumb2(x): return (np.abs(h2_diff(x)) * np.abs(x)) / np.abs(h2(x)) xStep = math.pow(10, -7) xStart = 1.1 xStop = 1.31 x = np.arange(xStart, xStop + xStep, xStep) y1 = [h1(x_val) for x_val in x] y2 = [h2(x_val) for x_val in x] y3 = [kondnumb(x_val) for x_val in x] y4 = [kondnumb2(x_val) for x_val in x] plt.yscale('log', base=10) plt.plot(x, y3, label='Konditionszahl') plt.plot(x, y4, label='Konditionszahl nach Umformung') plt.title('4.b)') plt.legend() plt.figure() plt.plot(x, y1, label='h1(x)') plt.plot(x, y2, label='h2(x)') plt.legend() plt.show()