Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →