feat: Skript mit Newton Verfahren, einfach und modifiziert. build: sympy zu requirements hinzugefügt

This commit is contained in:
Sandro Zimmermann 2026-04-02 17:41:56 +02:00
parent 4e31672189
commit d39e3fcff0
2 changed files with 104 additions and 1 deletions

View File

@ -1,4 +1,5 @@
matplotlib == 3.10.8
numpy == 2.4.3
black == 26.3.1
ipykernel == 7.2.0
ipykernel == 7.2.0
sympy == 1.14.0

View File

@ -0,0 +1,102 @@
#%%
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
#%%
# "Einfacher" Newton Verfahren
# Parameter
N = 200
x = sp.Symbol('x')
# Funktion
f_sym = sp.sin(3*x)+0.02*x**2
# Ableitungen
f = sp.lambdify(x, f_sym, "numpy")
f_prime = sp.lambdify(x, sp.diff(f_sym, x), "numpy")
f_second = sp.lambdify(x, sp.diff(f_sym, x, 2), "numpy")
# Daten
x_data = np.linspace(0,10,N)
f_data = f(x_data)
# Plot
plt.figure(1)
plt.plot(x_data, f_data)
plt.xlabel("x")
plt.ylabel("y")
plt.grid("on")
plt.axis("image")
# Newton Verfahren
# Startwert
startwerte = [6.6, 3.4, 8.38]
# Iterationsformel
x_n = lambda x: x - f_prime(x)/f_second(x)
# Iteration
for x_0 in startwerte:
n = 0
x_i = x_0
f_x_prime = f_prime(x_0)
print(f"n: {n}\nf(x): {x_0}\nf'(x): {f_x_prime}\n")
limit = 4
while np.abs(f_x_prime) > 1e-16 and limit > 0:
n += 1
x_i = x_n(x_i)
f_x_prime = f_prime(x_i)
print(f"n: {n}\nf(x): {x_i}\nf'(x): {f_x_prime}\n")
limit -= 1
#%%
# "Modifizierter" Newton Verfahren
# Parameter
N = 200
x = sp.Symbol('x')
# Funktion
f_sym = sp.sin(3*x)+0.02*x**2
# Ableitungen
f = sp.lambdify(x, f_sym, "numpy")
f_prime = sp.lambdify(x, sp.diff(f_sym, x), "numpy")
f_second = sp.lambdify(x, sp.diff(f_sym, x, 2), "numpy")
# Daten
x_data = np.linspace(0,10,N)
f_data = f(x_data)
# Plot
plt.figure(1)
plt.plot(x_data, f_data)
plt.xlabel("x")
plt.ylabel("y")
plt.grid("on")
plt.axis("image")
# Newton Verfahren
# Startwert
startwerte = [6.6, 3.4, 8.38]
# Iterationsformel
x_n = lambda x: x - f_prime(x)/np.abs(f_second(x))
# Iteration
for x_0 in startwerte:
n = 0
x_i = x_0
f_x_prime = f_prime(x_0)
print(f"n: {n}\nf(x): {x_0}\nf'(x): {f_x_prime}\n")
limit = 4
while np.abs(f_x_prime) > 1e-16 and limit > 0:
n += 1
x_i = x_n(x_i)
f_x_prime = f_prime(x_i)
print(f"n: {n}\nf(x): {x_i}\nf'(x): {f_x_prime}\n")
limit -= 1