Méthode de bissection

Objectifs d'apprentissage

À la fin de cette leçon, vous serez en mesure de :

  • Comprendre le principe de l'alternance de signe
  • Implémenter l'algorithme de bissection
  • Estimer le nombre d'itérations nécessaires pour atteindre une précision donnée
  • Identifier les conditions d'application de la méthode

Principe fondamental : l'alternance de signe

La méthode de bissection (aussi appelée interval-halving method ou méthode de dichotomie) repose sur un principe géométrique simple : si une fonction continue change de signe entre deux points, alors elle s'annule quelque part entre ces deux points.

💡

Théorème des valeurs intermédiaires

Si FF est continue sur l'intervalle [X1,X2][X_1, X_2] et si F(X1)F(X_1) et F(X2)F(X_2) sont de signes opposés, alors il existe au moins un point r]X1,X2[r \in ]X_1, X_2[ tel que F(r)=0F(r) = 0.

Idée de la méthode

L'algorithme exploite ce théorème de manière itérative :

  1. On part d'un intervalle [X1,X2][X_1, X_2] contenant une racine
  2. On coupe l'intervalle en deux au point milieu X3X_3
  3. On détermine dans quelle moitié se trouve la racine (par le test de signe)
  4. On recommence avec le nouvel intervalle, deux fois plus petit

À chaque itération, l'intervalle de recherche est divisé par 2, d'où le nom de « bissection ».


Condition suffisante de convergence

🚨

Condition suffisante

La méthode de bissection converge vers une racine si :

FF est continue sur l'intervalle de recherche [X1,X2][X_1, X_2]

et F(X1)F(X2)<0F(X_1) \cdot F(X_2) < 0 (signes opposés)

Cas de figure selon le comportement de F

Examinons différentes configurations possibles pour une fonction F continue sur [X₁, X₂] avec F(X₁) · F(X₂) < 0 :

⚠️

Attention aux racines multiples

Si l'intervalle [X1,X2][X_1, X_2] contient plusieurs racines, la méthode de bissection convergera vers une seule d'entre elles (celle qui se trouve dans le sous-intervalle sélectionné à chaque étape). Il n'y a pas de garantie sur laquelle sera trouvée.


Algorithme de la méthode de bissection

Pseudo-code

bissection.pseudotext
Algorithme : Méthode de bissection
Entrées : F (fonction), X1, X2 (bornes), δ (tolérance sur x), ε (tolérance sur F)
Sortie : X (approximation de la racine)

Précondition : F(X1) · F(X2) ≤ 0

Calculer X3 = (X1 + X2) / 2

Tant que (|X1 - X2| ≥ δ) ET (|F(X3)| ≥ ε) faire
  Calculer X3 = (X1 + X2) / 2

  Si F(X1) · F(X3) ≤ 0 alors
      X2 ← X3    // La racine est dans [X1, X3]
  Sinon
      X1 ← X3    // La racine est dans [X3, X2]
  Fin Si
Fin Tant que

Retourner X = X3

Implémentation en Python

bissection.pypython
def bissection(f, x1, x2, tol_x=1e-6, tol_f=1e-10, max_iter=100):
  """
  Méthode de bissection pour trouver une racine de f sur [x1, x2].

  Paramètres:
      f : fonction dont on cherche la racine
      x1, x2 : bornes de l'intervalle initial
      tol_x : tolérance sur x (critère d'arrêt)
      tol_f : tolérance sur f(x) (critère d'arrêt)
      max_iter : nombre maximum d'itérations

  Retourne:
      x3 : approximation de la racine
      iterations : liste des itérés successifs
  """
  # Vérification de la condition initiale
  if f(x1) * f(x2) > 0:
      raise ValueError("f(x1) et f(x2) doivent être de signes opposés")

  iterations = []

  for n in range(max_iter):
      x3 = (x1 + x2) / 2
      fx3 = f(x3)
      iterations.append({'n': n+1, 'x3': x3, 'f(x3)': fx3, 'erreur': abs(x2 - x1)})

      # Critères d'arrêt
      if abs(x2 - x1) < tol_x or abs(fx3) < tol_f:
          return x3, iterations

      # Choix du sous-intervalle
      if f(x1) * fx3 <= 0:
          x2 = x3
      else:
          x1 = x3

  return x3, iterations

Définitions importantes

Itération

💡

Définition : Itération

Une itération est définie comme un parcours complet de la séquence d'opérations de la boucle principale de l'algorithme. Cela comprend :

  1. Le calcul du point milieu X3X_3
  2. L'évaluation de F(X3)F(X_3)
  3. Le choix du nouveau sous-intervalle

Itéré d'ordre n

💡

Définition : Itéré d'ordre n

L'itéré d'ordre n, noté X(n)X^{(n)}, est la valeur de l'approximation de la racine obtenue après nn itérations.

  • X(0)X^{(0)} : valeur initiale (point milieu de [X1,X2][X_1, X_2])
  • X(1)X^{(1)} : valeur après la 1ère itération
  • X(n)X^{(n)} : valeur après la n-ème itération

Analyse de l'erreur

Intervalle de confiance

Au départ, la racine rr se trouve dans l'intervalle [X1,X2][X_1, X_2]. L'erreur maximale sur notre approximation est donc :

ΔX(0)=X2X1\Delta X^{(0)} = |X_2 - X_1|

Après chaque itération, l'intervalle est divisé par 2, donc l'erreur est également divisée par 2.

Formule de l'erreur à l'itération n

🚨

Erreur de la méthode de bissection

Après nn itérations, l'erreur absolue sur l'approximation de la racine est bornée par :

ΔX(n)=X1X22n\Delta X^{(n)} = \frac{|X_1 - X_2|}{2^n}

Nombre d'itérations nécessaires

Si on souhaite obtenir une précision δ\delta sur la racine, on peut calculer le nombre d'itérations nécessaires :

X1X22nδ\frac{|X_1 - X_2|}{2^n} \leq \delta
2nX1X2δ2^n \geq \frac{|X_1 - X_2|}{\delta}
nlog2(X1X2δ)=ln(X1X2/δ)ln(2)n \geq \log_2 \left( \frac{|X_1 - X_2|}{\delta} \right) = \frac{\ln(|X_1 - X_2|/\delta)}{\ln(2)}
💡

Estimation du nombre d'itérations

Pour obtenir une précision δ\delta à partir d'un intervalle initial [X1,X2][X_1, X_2], il faut au minimum :

n=log2(X1X2δ) iteˊrationsn = \left\lceil \log_2 \left( \frac{|X_1 - X_2|}{\delta} \right) \right\rceil \text{ itérations}

\lceil \cdot \rceil désigne la fonction plafond (arrondi supérieur).

Exemple de calcul

Pour un intervalle initial [1,2][1, 2] et une précision souhaitée δ=0.0005\delta = 0.0005 :

nlog2(10.0005)=log2(2000)10.97n \geq \log_2 \left( \frac{1}{0.0005} \right) = \log_2(2000) \approx 10.97

Il faudra donc au moins 11 itérations.


Exemple détaillé

Considérons la fonction :

F(X)=X3+X23X3F(X) = X^3 + X^2 - 3X - 3

Cette fonction peut s'écrire sous forme factorisée :

F(X)=(X+1)(X23)=(X+1)(X3)(X+3)F(X) = (X + 1)(X^2 - 3) = (X + 1)(X - \sqrt{3})(X + \sqrt{3})

Elle possède donc trois racines exactes : r1=1r_1 = -1, r2=31.732r_2 = -\sqrt{3} \approx -1.732 et r3=31.732r_3 = \sqrt{3} \approx 1.732.

Paramètres de l'algorithme

  • Intervalle initial : [X1,X2]=[1,2][X_1, X_2] = [1, 2]
  • Tolérance sur xx : δ=0.0005\delta = 0.0005
  • Tolérance sur F(x)F(x) : ε=0.00001\varepsilon = 0.00001

Tableau des itérations

ItérationX₃F(X₃)|Xₙ₊₁ - Xₙ|
11.5-1.8750.5
21.750.1718750.25
31.625-0.9433590.125
41.6875-0.4094240.0625
51.71875-0.1247860.03125
61.734380.02202990.015625
71.72656-0.05175540.0078125
81.73047-0.01495720.00390625
91.732420.003512670.00195312
101.73145-0.00572820.000976562
111.73193-0.001109240.000488281

Résultat : La tolérance en XX est atteinte en 11 itérations.

L'approximation obtenue est X1.732X \approx 1.732, très proche de la valeur exacte 31.7320508...\sqrt{3} \approx 1.7320508...


Visualisation interactive

Le graphique suivant vous permet de visualiser la méthode de bissection en action. Vous pouvez observer comment l'intervalle se réduit à chaque itération.


Avantages et inconvénients

Avantages

  • Simplicité : algorithme facile à comprendre et à implémenter
  • Robustesse : converge toujours si les conditions sont satisfaites
  • Hypothèse faible : ne nécessite que la continuité de FF
  • Convergence garantie : on peut prédire exactement le nombre d'itérations nécessaires

Inconvénients

  • Convergence lente : convergence linéaire (l'erreur est divisée par 2 à chaque itération)
  • Nécessite un intervalle initial : il faut connaître X1X_1 et X2X_2 tels que F(X1)F(X2)<0F(X_1) \cdot F(X_2) < 0
  • Une seule racine : ne trouve qu'une racine même si l'intervalle en contient plusieurs
  • Pas d'extension directe : difficile à généraliser aux systèmes d'équations

Résumé

Dans cette leçon, nous avons étudié la méthode de bissection :

  1. Principe : diviser successivement l'intervalle de recherche par 2 en utilisant le changement de signe

  2. Condition suffisante : FF continue sur [X1,X2][X_1, X_2] avec F(X1)F(X2)<0F(X_1) \cdot F(X_2) < 0

  3. Algorithme : calculer le point milieu, tester le signe, choisir le bon sous-intervalle

  4. Erreur : ΔX(n)=X1X22n\Delta X^{(n)} = \frac{|X_1 - X_2|}{2^n} — convergence linéaire

  5. Estimation : n=log2(X1X2/δ)n = \lceil \log_2(|X_1 - X_2|/\delta) \rceil itérations pour une précision δ\delta