HM1_Aufgabenserie2/Schenk_Brandenberger_S2_Auf...

80 lines
2.0 KiB
Python
Raw Permalink Normal View History

2022-09-30 13:45:59 +02:00
import numpy as np
import matplotlib.pyplot as plt
2022-09-30 14:00:57 +02:00
# Aufgabe 2a
2022-09-30 13:45:59 +02:00
xmin = 1.99
xmax = 2.01
x_number_of_points = 500
xsteps = (xmax - xmin) / x_number_of_points
2022-10-10 08:40:14 +02:00
2022-09-30 15:33:35 +02:00
def f1(x):
2022-09-30 13:45:59 +02:00
return x ** 7 - 14 * x ** 6 + 84 * x ** 5 - 280 * x ** 4 + 560 * x ** 3 - 672 * x ** 2 + 448 * x - 128
2022-10-10 08:40:14 +02:00
2022-09-30 15:33:35 +02:00
def f2(x):
2022-09-30 13:45:59 +02:00
return (x - 2) ** 7
2022-10-10 08:40:14 +02:00
2022-09-30 15:33:35 +02:00
x1 = np.arange(xmin, xmax + xsteps, xsteps)
2022-10-10 08:40:14 +02:00
2022-10-12 08:16:59 +02:00
yf1 = [f1(x_value) for x_value in x1]
yf2 = [f2(x_value) for x_value in x1]
2022-10-10 08:40:14 +02:00
plt.plot(x1, yf1, label='f1(x)')
plt.plot(x1, yf2, label='f2(x)')
plt.legend()
2022-10-07 10:29:47 +02:00
plt.title("Aufgabe 2a")
2022-10-07 10:47:41 +02:00
plt.figure()
2022-10-12 08:16:59 +02:00
print(f'min f1: {min(yf1)} max f1: {max(yf1)}')
print(f'min f2: {min(yf2)} max f2: {max(yf2)}')
2022-09-30 13:55:20 +02:00
2022-09-30 14:00:57 +02:00
# Die Werte sind sehr klein (von -e-14 bis e-14)
2022-09-30 13:55:20 +02:00
# sodass Rundungsfehler entstehen wenn die Werte als Fliesskommazahlen
2022-09-30 15:33:35 +02:00
# zwischengespeichert werden. In den zwei Funktionen f1 und f2 werden die
2022-10-07 10:29:47 +02:00
# Rechenoperationen in einer anderen Reihenfolge ausgeführt.
2022-10-13 12:56:55 +02:00
# 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.
2022-09-30 14:00:57 +02:00
# Aufgabe 2b
2022-09-30 15:33:35 +02:00
xmin = -10 ** -14
xmax = 10 ** -14
xsteps = 10 ** -17
2022-10-10 08:40:14 +02:00
2022-10-04 14:54:32 +02:00
def g1(x):
2022-09-30 15:33:35 +02:00
return x / (np.sin(1 + x) - np.sin(1))
2022-10-10 08:40:14 +02:00
2022-09-30 15:33:35 +02:00
x2 = np.arange(xmin, xmax + xsteps, xsteps)
2022-10-12 08:16:59 +02:00
yg1 = [g1(x_value) for x_value in x2]
2022-10-10 08:40:14 +02:00
plt.plot(x2, yg1, label='g1(x)')
2022-10-12 08:16:59 +02:00
print(f'min g1: {min(yg1)} max g1: {max(yg1)}')
2022-09-30 15:33:35 +02:00
2022-10-10 08:40:14 +02:00
2022-09-30 15:33:35 +02:00
# Die Berechnung des Grenzwertes für x --> 0 g(x) ist nicht stabil.
# Der Grenzwert scheint unendlich gross / klein zu sein.
2022-10-13 12:56:55 +02:00
# Bei g1 ist der Nenner sehr gross wenn x --> 0.
2022-09-30 15:33:35 +02:00
# Aufgabe 2c
2022-10-04 14:54:32 +02:00
# a = 1+x, b = 1
def g2(x):
2022-10-07 10:29:47 +02:00
return x / (2 * np.cos((1 + x + 1) / 2) * np.sin((x) / 2))
2022-10-10 08:40:14 +02:00
2022-10-12 08:16:59 +02:00
yg2 = [g2(x_value) for x_value in x2]
2022-10-10 08:40:14 +02:00
plt.plot(x2, yg2, label='g2(x)')
2022-10-12 08:16:59 +02:00
print(f'min g2: {min(yg2)} max g2: {max(yg2)}')
2022-10-10 08:40:14 +02:00
plt.legend()
2022-10-07 10:29:47 +02:00
plt.title("Aufgabe 2bc")
2022-09-30 15:33:35 +02:00
2022-10-13 12:56:55 +02:00
# 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.
2022-09-30 15:33:35 +02:00
plt.show()