Adloun

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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre