# %% 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"x_{n}: {x_0}\nf'(x_{n}): {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"x_{n}: {x_i}\nf'(x_{n}): {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"x_{n}: {x_0}\nf'(x_{n}): {f_x_prime}\n") limit = 1000 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"x_{n}: {x_i}\nf'(x_{n}): {f_x_prime}\n") limit -= 1 # %%