mathématiques appliquées (ECG 1re année) · Chapitre 11 · Exercice
Localiser avant d'affiner
Informatique et algorithmique · Dichotomie et approximation numérique · niveau 2
Énoncé
Soit . Écrire un balayage de pas sur qui encadre une racine, puis une dichotomie qui l'affine à . Combien de tours la dichotomie effectue-t-elle ?
Corrigé
def f(x):
return x ** 3 + x - 1
def balayage(a, b, pas):
x = a
while x < b:
if f(x) * f(x + pas) <= 0:
return (x, x + pas)
x = x + pas
return None
def dichotomie(a, b, eps):
tours = 0
while b - a > eps:
m = (a + b) / 2
if f(a) * f(m) <= 0:
b = m
else:
a = m
tours = tours + 1
return (a + b) / 2, tours
Le balayage rend : en effet et . La fonction est continue, donc le théorème des valeurs intermédiaires garantit une racine dans cet intervalle.
Le nombre de tours. Chaque tour divise la largeur par deux : après tours elle vaut . La boucle s'arrête dès que cette largeur atteint , soit
Donc 30 tours, et dichotomie(0.6, 0.7, 1e-10) rend .
Pourquoi balayer d'abord. Ici et l'on pourrait partir de directement. Mais si la fonction avait deux racines dans l'intervalle, le produit serait positif et la dichotomie ne démarrerait pas — sans la moindre erreur, en renvoyant un nombre faux. Le balayage isole un intervalle où le changement de signe est constaté.
Le point à retenir. Trente tours pour dix décimales : c'est le à l'œuvre, la même loi que pour la recherche dans une liste triée. Diviser par deux à chaque étape est ce qu'un algorithme peut faire de mieux quand il ne sait rien d'autre que le signe.