BotafogoMéthode de dichotomie (ou méthode de la bissection)
Le mot dichotomie vient du grec dikhotomia qui signifie “division en deux parties”.Une méthode de dichotomie est une méthode dans laquelle on met en “opposition” deux sous-intervalles. Dans la méthode de la bissection, à chaque itération, on est amené à choisir entre deux sous-intervalles. Ce choix se base sur le théorème de Bolzano qui est un cas particulier du théorème des valeurs intermédiaires.
Théorèmes des valeurs intermédiaires et de Bolzano
Soit une fonction continue f:I=[a,b]⊂R→R, soit u∈R, u compris entre f(a) et f(b), alors ∃c∈R,c∈]a,b[ tel que f(c)=u.

Soit une fonction continue f:I=[a,b]⊂R→R, si f(a)f(b)<0, alors ∃α∈R,α∈]a,b[ tel que f(α)=0.

Méthode de la bissection
Dans la méthode de la bissection, on commence par s’assurer que l’hypothèse f(a)f(b)<0 du théorème de Bolzano est bien vérifiée pour l’intervalle de départ I0=[a,b] considéré. On sait alors que I0 contient une racine α. On choisit de prendre comme première approximation de cette racine le point milieu de I0, c’est-à-dire le point
x0=2a+b.Si f(x0)=0, on a trouvé une racine de f. Sinon, on choisit parmi les deux sous-intervalles (identiques) définis par a, x0 et b, celui qui contient nécessairement une racine :
- Si f(a)f(x0)<0, on considère comme nouvel intervalle le sous-intervalle I1=[a,x0]. Ce dernier contient en effet nécessairement un zéro de f par le théorème de Bolzano.
- Sinon, c’est-à-dire si f(a)f(x0)>0, on considère comme nouvel intervalle le sous-intervalle I1=[x0,b]. Ce dernier contient en effet nécessairement un zéro de f par le théorème de Bolzano car on doit avoir f(x0)f(b)<0.
On itère alors en prenant comme nouvelle approximation de α le milieu de I1. Et ainsi de suite. La figure suivante permet de visualiser concrètement les premières itérations de la méthode de la bissection :

Algorithme de la méthode de la bissection
- Choix d’un “bon” intervalle de départ I0=[a,b] tel que f(a)f(b)<0⇒∃ (au moins) un zéro α∈]a,b[.
- Construction d’une suite de sous-intervalles Ik=[ak,bk], avec Ik⊂Ik−1, k≥1 et tels que f(ak)f(bk)<0 :
- Initialisation : on pose a0=a, b0=b et x0=2a0+b0.
- Pour k≥0 :
- si f(xk)=0, alors α=xk et on s’arrête ;
- si f(ak)f(xk)<0, on pose : ak+1=ak, bk+1=xk et xk+1=2ak+1+bk+1, et on passe à l’itération suivante ;
- si f(xk)f(bk)<0, on pose : ak+1=xk, bk+1=bk et xk+1=2ak+1+bk+1, et on passe à l’itération suivante.
- On s’arrête …… soit quand α est trouvé ;… soit quand une condition d’arrêt est remplie.
Condition d’arrêt et erreur commise
Dans la méthode de la bissection, la longueur des intervalles devient de plus en plus petite, limk→∞∣bk−ak∣=0, et les valeurs xk fournissent des approximations de plus en plus précises de la racine α. Souvent, on termine la méthode quand l’intervalle considéré à une étape m est plus petit qu’une certaine tolérance (précision) ε que l’on aimerait atteindre :
∣xm−α∣≤∣Im∣≤ε,où ∣Im∣≡∣bm−am∣ représente la longueur de l’intervalle Im. Intéressons-nous à l’erreur absolue commise à l’étape k en se souvenant qu’à chaque étape la longueur de l’intervalle est divisée par deux :
ek=∣xk−α∣<21∣bk−ak∣=212k1∣b0−a0∣=2k+11∣b−a∣k→∞0.Pour s’assurer que ek<ε, avec ε la tolérance souhaitée, le nombre minimal d’itérations à effectuer est donc :
kmin>log2(ε∣b−a∣)−1.Dans cette expression, la fonction log2 est la fonction réciproque de la fonction puissance de 2. Remarques:
- La méthode de la bissection converge toujours. En effet, on note que limk→∞∣Ik∣=0 et ∀k≥0, xk∈Ik et α∈Ik. Par conséquent, on a bien limk→∞xk=α.
- La convergence est lente : il faut log2(10)≅3.32 itérations pour améliorer d’une décimale la précision. (23.32≅10)
- On ne peut pas définir d’ordre de convergence (l’erreur n’est pas réduite de façon monotone d’une itération à l’autre).
- Si la fonction f est monotone dans l’intervalle considéré, on n’a qu’un zéro dans cet intervalle.
Exemple : résolution de l’équation de Kepler
Le code Python suivant permet de résoudre l’équation de Kepler avec une tolérance ε=10−8 à l’aide de la méthode de la bissection :import numpy as np
def f(E):
return E - 0.96727426*np.sin(E) - 0.0073673887
a = 0
b = 0.5
eps = 1e-8
compteur_iterations = 0
point_milieu = (a + b)/2
if f(a)*f(b) >= 0:
print("L'intervalle [a,b] n'est pas approprié !")
else:
while (b - a)/2 > eps:
if f(a)*f(point_milieu) < 0:
a = a
b = point_milieu
point_milieu = (a + b)/2
compteur_iterations += 1
elif f(point_milieu)*f(b) < 0:
a = point_milieu
b = b
point_milieu = (a + b)/2
compteur_iterations += 1
elif f(point_milieu) == 0:
print('La solution obtenue est exacte !')
break
else:
print("Le zéro n'a pas pu être approché.")
break
print(f"L'approximation de la racine cherchée est alpha = {point_milieu}.")
print(f"Elle a été obtenue après {compteur_iterations} itérations.")
L'approximation de la racine cherchée est alpha = 0.19091079384088516.
Elle a été obtenue après 25 itérations.
Polycopié rédigé par Roger Sauser, CMS. Sauf indication contraire, le contenu de ce document est soumis à une licence Creative Commons internationale, Attribution - Utilisation non commerciale - Partage dans les mêmes conditions 4.0 International (CC BY-NC-SA 4.0).
© 2026 Projet Botafogo. En savoir plus.