Adloun

Localiser avant d'affiner

Exercice · niveau 2 · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Dichotomie et approximation numérique

É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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.