Aller au contenu

Leçon 5

Encadrer une solution par dichotomie

Vidéo 5 : Encadrer une solution par dichotomie · 3 min 31 s · sous-titres en français

Le cours écrit

5.1 Le principe

On sait que l'équation x3−3x+1=0x^3 - 3x + 1 = 0 a une unique solution β\beta dans [0 ;1][0\,;1], mais aucune formule simple ne la donne. La méthode de dichotomie (du grec « couper en deux ») l'encadre aussi finement qu'on veut.

On part d'un intervalle [a ;b][a\,;b] sur lequel ff est continue et change de signe.

  1. On calcule le milieu m=a+b2m = \dfrac{a + b}{2}.
  2. Si f(a)f(a) et f(m)f(m) sont de signes contraires (ou si f(m)=0f(m) = 0), une solution se trouve dans [a ;m][a\,;m] : on remplace bb par mm.
  3. Sinon, ff change de signe entre mm et bb : on remplace aa par mm.
  4. On recommence. À chaque étape, l'amplitude de l'intervalle est divisée par 22.

5.2 À la main

Exemple 14. f(x)=x3−3x+1f(x) = x^3 - 3x + 1 sur [0 ;1][0\,;1] : f(0)=1>0f(0) = 1 > 0 et f(1)=−1<0f(1) = -1 < 0.

étape intervalle milieu mm f(m)f(m) nouvel intervalle
11 [0 ;1][0\,;1] 0,50{,}5 −0,375<0-0{,}375 < 0 [0 ;0,5][0\,;0{,}5]
22 [0 ;0,5][0\,;0{,}5] 0,250{,}25 ≈0,266>0\approx 0{,}266 > 0 [0,25 ;0,5][0{,}25\,;0{,}5]
33 [0,25 ;0,5][0{,}25\,;0{,}5] 0,3750{,}375 ≈−0,072<0\approx -0{,}072 < 0 [0,25 ;0,375][0{,}25\,;0{,}375]
44 [0,25 ;0,375][0{,}25\,;0{,}375] 0,31250{,}3125 ≈0,093>0\approx 0{,}093 > 0 [0,3125 ;0,375][0{,}3125\,;0{,}375]

Après quatre étapes, 0,3125<β<0,3750{,}3125 < \beta < 0{,}375 : l'amplitude est 116=0,0625\dfrac{1}{16} = 0{,}0625.

5.3 Combien d'étapes ?

En partant d'un intervalle d'amplitude b−ab - a, l'amplitude après nn étapes vaut b−a2n\dfrac{b - a}{2^n}. Pour [0 ;1][0\,;1] et une précision de 10−310^{-3}, il faut 2n≥10002^n \geq 1000. Comme 29=5122^9 = 512 et 210=10242^{10} = 1024, il faut dix étapes. Chaque décimale coûte donc un peu plus de trois étapes, car 23=8<10<16=242^3 = 8 < 10 < 16 = 2^4.

5.4 L'algorithme

En langage naturel (« ←\leftarrow » se lit « prend la valeur ») :

Tant que b − a > e
    m ← (a + b) / 2
    Si f(a) × f(m) ≤ 0
        b ← m
    Sinon
        a ← m
    Fin Si
Fin Tant que

En Python :

def f(x):
    return x**3 - 3*x + 1

def dichotomie(a, b, e):
    while b - a > e:
        m = (a + b) / 2
        if f(a) * f(m) <= 0:
            b = m
        else:
            a = m
    return a, b

dichotomie(0, 1, 0.001) renvoie (0.3466796875, 0.34765625) après dix étapes. Donc 0,3466<β<0,34770{,}3466 < \beta < 0{,}3477 et β≈0,347\beta \approx 0{,}347 à 10−310^{-3} près.

5.5 Remarques

  • Le test f(a)×f(m)≤0f(a) \times f(m) \leq 0 détecte un changement de signe, que ff soit croissante ou décroissante.
  • L'algorithme suppose que ff est continue et change de signe sur l'intervalle de départ ; sinon, rien ne garantit l'existence d'une solution.
  • S'il y a plusieurs solutions dans [a ;b][a\,;b], l'algorithme n'en encadre qu'une.

Lire le cours complet du chapitre

Exercices 9 et 10

  • Exercice 9 : la dichotomie à la main
  • Exercice 10 : la jauge d'une cuve d'eau de pluie

Exercices du chapitre (PDF, 157 Ko)

Corrigés

Cherche d'abord les exercices sur ta feuille, puis compare avec le corrigé détaillé.

Corrigés du chapitre (PDF, 152 Ko)

Tu es hors connexion. Les chapitres téléchargés restent disponibles dans Hors connexion.