diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..66cac7a --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml + +.venv \ No newline at end of file diff --git a/Kuengjoe_S03/Kuengjoe_S03_Aufg3b.py b/Kuengjoe_S03/Kuengjoe_S03_Aufg3b.py new file mode 100644 index 0000000..600cf3b --- /dev/null +++ b/Kuengjoe_S03/Kuengjoe_S03_Aufg3b.py @@ -0,0 +1,45 @@ + +import numpy as np +import matplotlib.pyplot as plt + +def f(x): + return 5.0 * (2.0 * x**2)**(-1.0/3.0) + +def g(x): + return 10.0**5 * (2.0 * np.e)**(-x/100.0) + + +def h_exp(x): + return (625.0/64.0)**x + +# (i) +x1 = np.logspace(-3, 2, 4000) # 0.001 ... 100 +y1 = f(x1) +plt.figure() +plt.loglog(x1, y1) +plt.title("Aufg. 3b (i) – f(x) as straight line in log-log") +plt.xlabel("x") +plt.ylabel("f(x)") +plt.grid(True, which="both") + +# (ii) +x2 = np.linspace(1e-6, 100.0, 4000) +y2 = g(x2) +plt.figure() +plt.semilogy(x2, y2) +plt.title("Aufg. 3b (ii) – g(x) as straight line in semilog-y") +plt.xlabel("x") +plt.ylabel("g(x)") +plt.grid(True, which="both") + +# (iii) +x3 = np.linspace(1e-6, 100.0, 4000) +y3 = h_exp(x3) +plt.figure() +plt.semilogy(x3, y3) +plt.title("Aufg. 3b (iii) – h(x) as straight line in semilog-y") +plt.xlabel("x") +plt.ylabel("h(x)") +plt.grid(True, which="both") + +plt.show() diff --git a/Kuengjoe_S03/Kuengjoe_S03_Aufg4.py b/Kuengjoe_S03/Kuengjoe_S03_Aufg4.py new file mode 100644 index 0000000..2df1261 --- /dev/null +++ b/Kuengjoe_S03/Kuengjoe_S03_Aufg4.py @@ -0,0 +1,42 @@ +import numpy as np +import matplotlib.pyplot as plt + +def g(x): + # Naive Form des Polynoms 100 x² − 200 x + 99 + return 100*x**2 - 200*x + 99 + +def g_fact(x): + # Faktorisierte Form 100 (x − 1.1)(x − 0.9) – vermeidet Auslöschung + return 100*(x-1.1)*(x-0.9) + +def h(x, factored=False): + # Liefert h(x) = sqrt(g(x)); bei factored=True wird die stabile Variante + # g_fact(x) verwendet + return np.sqrt(g_fact(x) if factored else g(x)) + +def kappa_h(x): + # Konditionszahl κ_h(x) = |x * h'(x) / h(x)| + # mit h'(x) = 100 (x − 1) / h(x) + return np.abs(x * 100*(x-1) / (h(x)**2)) + +# a) Vergleich der Auswertungen +x_test = 1.1 + np.array([1e-8, 1e-7, 1e-6, 1e-5]) +print("x h_naiv h_fakt relFehler") +for x in x_test: + # instabile Auswertung + h_naiv = h(x) + # stabile Auswertungm + h_fakt = h(x, factored=True) + relerr = abs(h_naiv - h_fakt)/abs(h_fakt) + print(f"{x:.10f} {h_naiv:.12e} {h_fakt:.12e} {relerr:.2e}") + +# b) Plot der Konditionszahl κ_h(x) auf [1.1, 1.3] +dx = 1e-7 +x_vals = np.arange(1.1 + dx, 1.3 + dx, dx) +plt.semilogy(x_vals, kappa_h(x_vals)) +plt.xlabel("x") +plt.ylabel(r"$\kappa_h(x)$") +plt.title("Konditionszahl von $h(x)$ auf [1.1, 1.3]") +plt.grid(True, which="both", ls="--", alpha=0.6) +plt.tight_layout() +plt.show() diff --git a/Kuengjoe_s02/Kuengjoe_S02_Aufg3.py b/Kuengjoe_s02/Kuengjoe_S02_Aufg3.py index 4f8a0ca..481ad48 100644 --- a/Kuengjoe_s02/Kuengjoe_S02_Aufg3.py +++ b/Kuengjoe_s02/Kuengjoe_S02_Aufg3.py @@ -7,7 +7,8 @@ def s2n_naiv(s: float) -> float: def s2n_stabil(s: float) -> float: t = max(0.0, 1.0 - (s*s)/4.0) - return (s*s) / (2.0*(1.0 + math.sqrt(t))) + return s / math.sqrt(2.0*(1.0 + math.sqrt(t))) + n0 = 6 s_naiv = 1.0 s_stab = 1.0 @@ -30,6 +31,10 @@ zwei_pi = 2.0 * math.pi print(f"Letzter m-Wert: m = {m_vals[-1]:.0f}") print(f"Naiv: m*s_m = {p_naiv[-1]:.15f} Fehler = {abs(p_naiv[-1]-zwei_pi):.3e}") print(f"Stabil: m*s_m = {p_stab[-1]:.15f} Fehler = {abs(p_stab[-1]-zwei_pi):.3e}") +err = abs(p_stab[-1] - 2*math.pi)/(2*math.pi) +print(f"relativer Fehler stabil = {err:.3e}") + + plt.figure() plt.plot(m_vals, p_naiv, label="naive Formel")