Files
HM1-Serie-Python/Kuengjoe_s02/Kuengjoe_S02_Aufg3.py
2025-10-05 17:33:16 +02:00

46 lines
1.2 KiB
Python

import math
import matplotlib.pyplot as plt
def s2n_naiv(s: float) -> float:
t = max(0.0, 1.0 - (s*s)/4.0)
return math.sqrt(2.0 - 2.0*math.sqrt(t))
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)))
n0 = 6
s_naiv = 1.0
s_stab = 1.0
K = 40
m_vals = [n0]
p_naiv = [n0 * s_naiv]
p_stab = [n0 * s_stab]
m = n0
for _ in range(K):
m *= 2
s_naiv = s2n_naiv(s_naiv)
s_stab = s2n_stabil(s_stab)
m_vals.append(m)
p_naiv.append(m * s_naiv)
p_stab.append(m * s_stab)
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}")
plt.figure()
plt.plot(m_vals, p_naiv, label="naive Formel")
plt.plot(m_vals, p_stab, label="stabilisierte Formel")
plt.axhline(zwei_pi, linestyle="--", linewidth=1, label="")
plt.xscale("log")
plt.xlabel("Anzahl Ecken m (log-Skala)")
plt.ylabel("Umfangapproximation m·s_m")
plt.title("Archimedes-Algorithmus: Umfang des Einheitskreises")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()