Python (école d'ingénieur) · Chapitre 11 · Exercice
Méthode de la sécante
Résolution d'équations non linéaires
Énoncé
Implémenter la méthode de la sécante et observer sa vitesse de convergence par rapport à la méthode de Newton sur .
Corrigé
def secante(f, x0, x1, epsilon=1e-12, maxiter=100):
x_prev, x_curr = x0, x1
f_prev, f_curr = f(x0), f(x1)
for n in range(maxiter):
if abs(f_curr) < epsilon:
return x_curr, n + 2
x_next = x_curr - f_curr * (x_curr - x_prev) / (f_curr - f_prev)
if abs(x_next - x_curr) < epsilon:
return x_next, n + 2
x_prev, x_curr = x_curr, x_next
f_prev, f_curr = f_curr, f(x_next)
raise RuntimeError("Divergence")
f = lambda x: x**3 - x - 2
df = lambda x: 3*x**2 - 1
racine_sec, iter_sec = secante(f, 1.0, 2.0)
print(f"Sécante : racine = {racine_sec:.12f} ({iter_sec} itérations)")
# Convergence de la sécante étape par étape
x_prev, x_curr = 1.0, 2.0
f_prev, f_curr = f(1.0), f(2.0)
print("\nÉtapes de la sécante :")
for i in range(2, 6):
x_next = x_curr - f_curr * (x_curr - x_prev) / (f_curr - f_prev)
print(f" Étape {i}: x{i} = {x_next:.10f} | Erreur: {abs(x_next - 1.5213797068045676):.2e}")
x_prev, x_curr = x_curr, x_next
f_prev, f_curr = f_curr, f(x_next)
Résultat dans la console :
Sécante : racine = 1.521379706805 (6 itérations)
Étapes de la sécante :
Étape 2: x2 = 1.5714285714 | Erreur: 5.00e-02
Étape 3: x3 = 1.5200000000 | Erreur: 1.38e-03
Étape 4: x4 = 1.5213793103 | Erreur: 3.96e-07
Étape 5: x5 = 1.5213797068 | Erreur: 1.11e-16
La sécante converge en 6 évaluations de fonctions (itérations), ce qui est extrêmement proche des 4 itérations de Newton, mais avec l'avantage de ne pas exiger de calcul analytique de la dérivée.
100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.