Terminale · F2
terminale
Aller plus loin · Scripts

La corde, la tangente et le ciseau

Les trois chercheurs de racines lancés sur la même équation, chronomètre en main : 39 étapes, 10 itérations, 5 itérations. Le tableau complet des trois ordres, les scripts, et la méthode qui ne perd jamais la racine mais qui rampe.

Le chapitre F1 s’est clos sur une équation sans formule et sur la dichotomie. Ses Coulisses ont chronométré les tangentes. Le laboratoire du chapitre F2 a introduit la troisième et dernière méthode du programme, la sécante, et sa marge a promis un joyau : son ordre de convergence est le nombre d’or.

La famille est maintenant complète. Voici la course, sur la même équation et depuis les mêmes bornes.

x5x1=0,de racinec=1,1673039782614187x^{5} - x - 1 = 0, \qquad \text{de racine} \quad c = 1{,}167\,303\,978\,261\,418\,7\ldots

Toutes les valeurs de cette page ont été recalculées ; les scripts sont donnés en entier, prêts à exécuter.

Le tableau de famille

MéthodeOrdreCe qu’elle exigeItérations pour douze décimales
Dichotomie sur [1;2][1\,;2]11la continuité, et un changement de signe39
Sécante depuis x0=1x_0 = 1, x1=2x_1 = 2φ1,618\varphi \approx 1{,}618rien de plus que ff10
Tangentes depuis x0=1x_0 = 122ff', et un bon point de départ5

L’ordre se lit dans la façon dont l’erreur se contracte. Ordre 11 : chaque étape multiplie l’erreur par une constante, ici 12\frac12, ce qui fait gagner environ 0,3010{,}301 décimale par tour, autrement dit un peu plus de trois étapes par décimale. (Ce nombre 0,3010{,}301 est le logarithme décimal de 22, l’outil qui compte les chiffres ; il arrivera au chapitre F3, et l’on peut ici se contenter de le constater.) Ordre p>1p > 1 : chaque étape élève l’erreur à la puissance pp, ce qui multiplie par pp le nombre de décimales exactes. La différence n’est pas de vitesse, elle est de nature.

Les trois erreurs, tour par tour

Le tableau ci-dessous donne xnc|x_n - c| à chaque itération. Il vaut tous les discours.

nnDichotomieSécanteTangentes
24,2×1024{,}2 \times 10^{-2}1,3×1011{,}3 \times 10^{-1}1,1×1021{,}1 \times 10^{-2}
32,0×1022{,}0 \times 10^{-2}1,1×1011{,}1 \times 10^{-1}2,3×1042{,}3 \times 10^{-4}
41,1×1021{,}1 \times 10^{-2}3,7×1023{,}7 \times 10^{-2}1,0×1071{,}0 \times 10^{-7}
54,6×1034{,}6 \times 10^{-3}8,0×1038{,}0 \times 10^{-3}2,1×10142{,}1 \times 10^{-14}
65,4×1045{,}4 \times 10^{-4}
78,4×1068{,}4 \times 10^{-6}
88,8×1098{,}8 \times 10^{-9}
91,4×10131{,}4 \times 10^{-13}
101,8×1041{,}8 \times 10^{-4}
204,2×1074{,}2 \times 10^{-7}
302,6×10102{,}6 \times 10^{-10}
395,6×10135{,}6 \times 10^{-13}

Lisez la colonne des tangentes : le nombre de zéros après la virgule double à chaque ligne. Lisez celle de la sécante : il est à peu près la somme des deux précédents, 0,90{,}9 ; 1,01{,}0 ; 1,41{,}4 ; 2,12{,}1 ; 3,33{,}3 ; 5,15{,}1 ; 8,18{,}1. C’est la récurrence de Fibonacci, et c’est de là que sort le nombre d’or : l’ordre exact de la sécante est le nombre pp vérifiant p2=p+1p^{2} = p + 1.

Lisez enfin celle de la dichotomie : trente-neuf étapes pour arriver où la tangente arrive en cinq. Elle est lente. Elle est aussi la seule des trois qui garantisse son erreur avant même de commencer : après nn étapes sur [a;b][a\,;b], elle est inférieure à ba2n+1\frac{b-a}{2^{\,n+1}}, quoi qu’il arrive.

Les trois scripts

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


def secante(f, x0, x1, eps):
    n = 1
    while abs(x1 - x0) > eps:
        pas = f(x1) * (x1 - x0) / (f(x1) - f(x0))
        x0, x1 = x1, x1 - pas
        n += 1
    return x1, n


def tangentes(f, fp, x0, eps):
    n = 0
    while abs(f(x0)) > eps:
        x0 = x0 - f(x0) / fp(x0)
        n += 1
    return x0, n


f  = lambda x: x**5 - x - 1
fp = lambda x: 5 * x**4 - 1

print(dichotomie(f, 1, 2, 1e-12))   # (1.1673039782608612, 39)
print(secante(f, 1, 2, 1e-12))      # (1.1673039782614187, 10)
print(tangentes(f, fp, 1, 1e-12))   # (1.1673039782614396, 5)

Un mot sur la dernière décimale, parce qu’elle raconte quelque chose. Les trois sorties ne coïncident pas au dernier chiffre, et c’est normal : chaque méthode s’arrête sur son propre critère naturel. La dichotomie surveille la largeur de son encadrement, la sécante l’écart entre deux itérés successifs, les tangentes la petitesse de f(x)f(x). Ce sont trois façons différentes de dire « c’est assez près », et elles ne s’arrêtent pas au même tour.

Vous lirez par ailleurs, dans l’extra du chapitre F1, quatre itérations pour les tangentes là où cette page en annonce cinq. Ce n’est pas une contradiction, et le critère d’arrêt n’y est pour rien : les deux pages emploient le même. La différence est ailleurs, et la section suivante lui est consacrée.

Le point de départ décide de tout

Un détail que le tableau cache, et qui compte plus que l’ordre de convergence : partez des tangentes depuis x0=2x_0 = 2 au lieu de x0=1x_0 = 1, et il faut sept itérations au lieu de cinq. Deux tours perdus à redescendre, parce que la courbe est très raide en 22 et que la tangente y renvoie loin. Partez au contraire de x0=1,2x_0 = 1{,}2, et quatre suffisent : c’est le départ qu’avait choisi l’extra du chapitre F1, et c’est toute l’explication de l’écart entre ses quatre itérations et nos cinq.

C’est le défaut structurel de la méthode la plus rapide : sa vitesse est locale. Loin de la racine, elle n’a aucune garantie, et si ff' passe près de zéro, la tangente est presque horizontale et projette le point à l’autre bout du monde. La dichotomie, elle, ne peut pas échouer : elle enferme la racine et resserre. C’est toute l’opposition du chapitre, et elle est ancienne : la sûreté contre la vitesse.

La corde qui ne perd jamais la racine, et qui rampe

Le cours a présenté la fausse position : on garde un encadrement [a;b][a\,;b] avec f(a)<0<f(b)f(a) < 0 < f(b), comme en dichotomie, mais on coupe à la corde plutôt qu’au milieu. Sur notre fonction, convexe sur [1;2][1\,;2] puisque x[1;2], f(x)=20x3>0\forall x \in [1\,;2],\ f''(x) = 20x^{3} > 0, et qui y traverse l’axe en croissant, le cours annonce que la borne b=2b = 2 ne bougera jamais. Vérifions, et regardons le prix.

a, b = 1.0, 2.0
for k in range(12):
    c = a - f(a) * (b - a) / (f(b) - f(a))
    if f(a) * f(c) <= 0:
        b = c
    else:
        a = c
    print(k + 1, round(c, 9))

Les douze premières coupes :

CoupeValeurCoupeValeur
11,0331{,}03371,1371{,}137
21,0611{,}06181,1441{,}144
31,0841{,}08491,1491{,}149
41,1021{,}102101,1541{,}154
51,1161{,}116111,1571{,}157
61,1281{,}128121,1591{,}159

La prédiction du cours est exacte : la borne droite reste bloquée à 22, et les coupes montent vers la racine en croissant, toutes du même côté. Mais regardez la douzième : 1,1591{,}159, alors que la racine vaut 1,1671{,}167. Douze tours pour deux décimales. La sécante, aux mêmes douze tours, aurait dépassé la précision de la machine.

Voilà le paradoxe, et il est instructif. La fausse position et la sécante emploient exactement la même corde. La sécante garde les deux derniers points ; la fausse position garde les deux points qui encadrent. La seconde y gagne une garantie que la première n’a pas, et elle y perd son ordre : sur une fonction convexe, l’extrémité immobile la condamne à ramper. La convexité, ici, ne fait pas que décorer l’algorithme : c’est elle qui prédit quelle borne se figera, et donc qui explique la lenteur avant même de lancer le calcul.

Ce que choisissent les bibliothèques

Aucune bibliothèque de calcul sérieuse n’implémente une seule de ces trois méthodes. Elles les combinent : on tente une étape rapide, corde ou tangente, on vérifie qu’elle est retombée dans l’encadrement courant, et sinon on la jette pour une bissection. On obtient la vitesse en régime normal et la garantie en cas de mauvaise surprise. C’est l’idée des méthodes hybrides, et c’est la même que celle de l’extra du chapitre F1 sur la course entre dichotomie et tangentes.

Quand la dérivée est chère à calculer, ou simplement indisponible parce que ff est le résultat d’une simulation, c’est la corde qui l’emporte : ordre 1,6181{,}618 sans jamais dériver quoi que ce soit. Entre la tortue et le lièvre, le compromis est doré.

Sources

  • Cours F2, paragraphe 6 ; Coulisses n°5, pièce 45 La corde au rythme doré.
  • Cours F1, paragraphe 6, et l’extra « La course dichotomie contre Newton » du chapitre F1, dont cette page est la suite directe.
  • Tous les nombres de cette page ont été recalculés en Python, la racine de référence étant obtenue par itération de Newton en arithmétique décimale à soixante chiffres.
← Retour au chapitre F2