import matplotlib.pyplot as plt import numpy as np dich_steps = [] new_raph_steps = [] def f(x) -> float: return np.exp(x) - 2 * np.cos(x) def dichotomie(x_0, a, b, epsilon, n=0) -> float: delta = f(a) * f(x_0) x_1 = (a + b) / 2 dich_steps.append(x_1) if np.abs(b - a) <= epsilon: return x_1 if delta < 0: return dichotomie(x_1, a, x_0, epsilon, n+1) elif delta == 0: return x_1 else: return dichotomie(x_1, x_0, b, epsilon, n+1) def f_prime(x) -> float: return 1 + np.sin(x) def newton_raphson(x_0, epsilon) -> float: x_1 = x_0 - (f(x_0) / f_prime(x_0)) new_raph_steps.append(x_1) if np.abs(x_1 - x_0) < epsilon: return x_1 elif np.abs(f(x_0)) < epsilon: return x_1 return newton_raphson(x_1, epsilon) def ex1() -> None: x = np.arange(0, 1, 0.001) f = [np.exp(i) - 2 * np.cos(i) for i in x] f1 = [np.exp(i) for i in x] f2 = [2 * np.cos(i) for i in x] for i in range(len(x)): if f1[i] == f2[i]: print(f1[i]) plt.plot(x, f) plt.plot(x, f1) plt.plot(x, f2) plt.grid() plt.show() dichotomie_res = dichotomie(0, 0, 1, 10e-6) print(dichotomie_res) plt.plot(dich_steps) plt.title('Convergence de la dichotomie') plt.show() newton_raphson_res = newton_raphson(0.1, 10e-6) print(newton_raphson_res) plt.plot(new_raph_steps) plt.title('Convergence de Newton-Raphson') plt.show() """ La dichotomie à moins d'étape que NR, mais NR à l'air plus rapide, comme Flash McQueen """ if __name__ == '__main__': ex1()