Seconde · A3
2nde
Aller plus loin · Scripts

La regula falsi en machine : le script, ligne à ligne

Une dizaine de lignes de Python, expliquées une par une, et la règle des deux erreurs tourne toute seule. Aucun prérequis : un interpréteur en ligne suffit. À vous de choisir ensuite la cible et le nombre de tours.

Voici la machine promise à la sortie du devoir. Elle ne fait aucune de vos questions à votre place : elle fait ce que la dernière d’entre elles vous demande de décrire, une fois que vous l’aurez décrit vous-même. Lisez-la après avoir rendu.

Aucune installation n’est nécessaire, et aucune connaissance de Python n’est supposée. Cherchez « python en ligne », collez, exécutez. Le mode Python de votre calculatrice fait aussi l’affaire.

D’abord, mettre la cible à zéro

Le devoir travaille avec une cible cc et une erreur e=E(a)ce = E(a) - c. Les machines préfèrent une convention plus économe : on fait glisser la cible à zéro. Résoudre x2=5x^{2} = 5, c’est résoudre x25=0x^{2} - 5 = 0 ; l’erreur d’un essai aa devient alors tout simplement la valeur de l’expression en aa, et il n’y a plus qu’un objet à manipuler au lieu de deux.

La fonction, ligne à ligne

def regula_falsi(f, a, b, n):
    for k in range(n):
        x = a - f(a) * (b - a) / (f(b) - f(a))
        if f(a) * f(x) > 0:
            a = x
        else:
            b = x
        print("tour", k + 1, ":", x)
    return x

Ligne 1. def déclare une recette et lui donne un nom. Elle attend quatre renseignements : l’expression f à annuler, les deux essais de départ a et b, et le nombre n de tours à effectuer.

Ligne 2. for k in range(n) répète tout ce qui est décalé en dessous, exactement n fois, avec k valant 00, puis 11, et ainsi de suite. C’est la boucle : c’est elle, et elle seule, qui transforme la règle des deux erreurs en méthode itérative.

Ligne 3. Le cœur. C’est la règle du devoir, sous la seconde écriture, celle qui part de l’essai a et le corrige d’une quantité proportionnelle à son erreur. Comparez caractère par caractère avec la formule de la partie V : c’est la même, la cible ayant glissé à zéro.

Lignes 4 à 7. Il faut décider lequel des deux essais la valeur x qui vient d’être calculée remplace. Un produit de deux nombres est positif exactement quand ils sont de même signe : si f(a) et f(x) sont de même signe, c’est que x est tombé du même côté de la solution que a, et il prend donc la place de a ; sinon il prend celle de b. Ainsi les deux essais encadrent toujours la solution, et la méthode ne peut pas la perdre de vue.

Ligne 8. print affiche le tour et la valeur, pour que vous puissiez regarder la suite se resserrer au lieu de recevoir un seul nombre.

Ligne 9. return rend la dernière valeur calculée.

L’exemple qui tourne

Approchons 5\sqrt{5}, c’est-à-dire annulons x25x^{2} - 5 entre les essais 22 et 33, en six tours.

def carre_moins_cinq(x):
    return x * x - 5


regula_falsi(carre_moins_cinq, 2, 3, 6)

Sortie réelle, obtenue en exécutant ces lignes :

tour 1 : 2.2
tour 2 : 2.230769230769231
tour 3 : 2.235294117647059
tour 4 : 2.235955056179775
tour 5 : 2.236051502145923
tour 6 : 2.236065573770492

La valeur de référence est 5=2,236067977\sqrt{5} = 2{,}236\,067\,977\ldots Trois choses se lisent sur cette colonne.

Les valeurs montent vers la cible et restent toutes en dessous : la corde passe au-dessus de la courbe des carrés, elle atteint donc la cible trop tôt. Le premier tour donne d’ailleurs une fraction que vous auriez pu écrire de tête, 115\dfrac{11}{5}.

L’essai 33 ne bouge jamais. À chaque tour, c’est l’autre borne qui est remplacée. La méthode s’appuie sans cesse sur le même point fixe, et c’est précisément ce qui la ralentit : elle gagne du terrain, mais elle traîne une jambe.

Le progrès ralentit : le premier tour gagne beaucoup, le sixième presque rien. Six tours pour cinq décimales seulement. La regula falsi est sûre plutôt que rapide, et la dernière section vous fera mesurer le prix de cette sûreté.

Un contrôle instructif

Reprenez le tout premier théorème du devoir, celui du premier degré, en résolvant 3x4=113x - 4 = 11 à partir de deux essais aussi absurdes que 00 et 1010 :

regula_falsi(lambda x: 3 * x - 4 - 11, 0, 10, 2)
tour 1 : 5.0
tour 2 : 5.0

Le premier tour tombe exactement sur la solution, et les suivants ne servent plus à rien. La boucle n’apporte quelque chose que là où la corde ment : au premier degré, elle ne ment pas, et le théorème que vous avez démontré s’affiche à l’écran.

À vous

Trois manettes, et toutes les trois valent le détour.

La cible. Remplacez le 55 par un 77 et lancez avec les essais 22 et 33 : la machine refera en une fraction de seconde les triangulations que vous avez menées à la main, et vous pourrez confronter ses premières lignes à vos fractions. Puis essayez x32x^{3} - 2, ou toute autre expression de votre choix, en veillant seulement à partir de deux essais qui encadrent la solution, c’est-à-dire dont les valeurs sont de signes contraires.

Le nombre de tours. Passez n à 3030, puis à 100100. La colonne se fige : à partir du dix-neuvième tour, l’affichage ne bouge plus d’un chiffre. La machine a atteint le mur de sa propre précision, celui qu’expliquait l’extra du chapitre A1 sur 0,10{,}1, et les quatre-vingt-un tours suivants ne servent à rien.

La stratégie. Remplacez le test de signe, c’est-à-dire les quatre lignes if et else, par la seule ligne a, b = b, x, qui garde simplement les deux derniers essais sans se demander où ils sont tombés. Vous obtenez la méthode de la sécante, et sur la même cible la colonne devient celle-ci :

tour 4 : 2.236067926333413
tour 5 : 2.2360679774992964
tour 6 : 2.23606797749979

Six tours pour toutes les décimales de la machine, là où l’encadrement en donnait cinq. Vous venez de payer la sûreté et d’en connaître le prix : c’est l’arbitrage que les bibliothèques de calcul scientifique tranchent encore aujourd’hui, et il se voit en une ligne de code.

Sources

  • Devoir A3, parties IV, V et VI, dont aucune question n’est résolue ici.
  • Toutes les sorties de cette page ont été exécutées sous Python 3.13, non recopiées.
← Retour au chapitre A3