ATELIER J

Le rectangle du scribe

1. Un problème vieux de près de 4 000 ans

Des tablettes d'argile aux racines d'un polynôme.

Vers 1800 avant notre ère, en Mésopotamie, les apprentis scribes s'exercent sur des tablettes d'argile. Un de leurs problèmes favoris porte sur un champ rectangulaire : on donne la longueur et la largeur additionnées, \(s\), et l'aire, \(p\). Il faut retrouver la longueur \(L\) et la largeur \(l\).

L (longueur)laire p
On connaît \(L+l=s\) et \(L\times l=p\).

Somme et produit de deux nombres : c'est ce que relie le théorème 3 du cours. Le polynôme \((x-L)(x-l)\) s'annule en \(L\) et en \(l\) ; développé, il s'écrit \(x^2-(L+l)x+Ll\), et on peut donc l'écrire directement. Les scribes, eux, suivaient une recette géométrique, en découpant et en recollant des morceaux de carré ; nous allons emprunter un autre chemin, le cours et l'ordinateur.

Une tablette donne : longueur et largeur additionnées, \(8\) ; aire, \(12\). Quel polynôme a pour racines la longueur et la largeur ?

Le polynôme \((x-L)(x-l)\) s'annule en \(L\) et en \(l\). Développé, il s'écrit \(x^2-(L+l)x+Ll\), soit \(x^2-8x+12\). Contrôle par le théorème 3 : avec \(a=1\), la somme des racines vaut \(-b\) et leur produit \(c\). Attention au signe : c'est \(-b\) qui vaut la somme.

2. Une racine évidente suffit

Le second nombre se déduit du premier.

Pour le champ de la question précédente, de longueur et largeur additionnées 8, on cherche une racine du polynôme en essayant de petits nombres entiers : \(1\), \(2\), \(3\)… Dès qu'une racine est trouvée, la somme des racines donne l'autre, sans aucun calcul supplémentaire.

La méthode

Une racine \(x_1\) connue, la seconde vaut \(x_2=s-x_1\) puisque \(x_1+x_2=s\) (théorème 3). Le produit \(x_1x_2=p\) sert de vérification.

Parmi ces nombres, lequel est une racine de \(f(x)=x^2-8x+12\) ?

\(f(2)=4-16+12=0\) : \(2\) est une racine (définition 2). La somme des racines vaut \(8\), donc l'autre racine est \(8-2=6\) (théorème 3). Le rectangle mesure \(6\) sur \(2\) : son aire est bien \(12\).

3. Confier la recherche à Python

On valide l'outil sur un exemple dont on connaît la réponse.

Essayer des nombres un par un est long : un programme peut le faire pour nous. Avant de lui faire confiance, testons-le sur l'exemple du cours, \(f(x)=2x^2-7x+6\), dont on sait que les racines sont \(2\) et \(1{,}5\) (exemples 2 et 4).

def f(x): return 2*x**2 - 7*x + 6 n = 1 # on teste les nombres k/n, de -10 à 10 for k in range(-10*n, 10*n + 1): x = k / n if f(x) == 0: print(x)

Exécutez, puis remplacez n = 1 par n = 2 et exécutez de nouveau. Python écrit les nombres avec un point : 1.5 pour \(1{,}5\). Si la console ne se charge pas, le même programme s'exécute sur https://sciency.co/console.

Lire les résultats

Avec n = 1, le programme affiche 2.0 seulement ; avec n = 2, il affiche 1.5 et 2.0. L'outil retrouve bien les deux racines connues, à condition de tester les bons nombres.

Avec n = 1, le programme n'affiche que 2.0. Pourquoi la racine \(1{,}5\) n'apparaît-elle pas ?

Le programme teste les nombres \(\dfrac{k}{n}\) pour \(k\) entier : avec \(n=1\), ce sont les entiers de \(-10\) à \(10\). Avec \(n=2\), il teste aussi les demis, et \(1{,}5\) apparaît. L'exemple 4 du cours le confirme : la seconde racine est \(1{,}5\).

4. Un champ aux mesures qui ne tombent pas juste

Là où ni le calcul à la main ni le premier programme ne suffisent.

Un champ a pour longueur et largeur additionnées \(4\) et pour aire \(2\). Ses mesures sont donc les racines de \(f(x)=x^2-4x+2\). La courbe coupe bien deux fois l'axe des abscisses… mais le programme précédent n'affiche rien, même avec n = 1000 : ces racines ne sont pas des nombres décimaux.

1234-2-1123??
Courbe de \(f(x)=x^2-4x+2\).

Changeons de question : au lieu de chercher où \(f(x)\) vaut exactement \(0\), cherchons où il change de signe. Entre une valeur positive et une valeur négative, la courbe traverse l'axe : une racine s'y trouve.

\(x\)\(f(x)\)signe
02,00+
0,11,61+
0,21,24+
0,30,89+
0,40,56+
0,50,25+
0,6−0,04−
0,7−0,31−
0,8−0,56−

\(f(0{,}5)\) est positif et \(f(0{,}6)\) est négatif : la plus petite racine est entre \(0{,}5\) et \(0{,}6\). Le champ a une largeur comprise entre \(0{,}5\) et \(0{,}6\).

On adapte le programme du signe à \(f(x)=x^2-7x+3\), avec n = 10. Entre quels nombres se trouve la plus petite racine ?

\(f(0{,}4)=0{,}36\) est positif et \(f(0{,}5)=-0{,}25\) est négatif : \(f\) change de signe entre ces deux nombres, la courbe y traverse l'axe des abscisses. Le programme affiche aussi une ligne entre \(6{,}5\) et \(6{,}6\) : c'est l'encadrement de la plus grande racine.

5. Le programme du signe

Python encadre les racines aussi finement qu'on le souhaite.

Le programme ci-dessous parcourt les nombres \(\dfrac{k}{n}\) de \(0\) à \(4\) et affiche chaque intervalle aux bornes duquel \(f\) prend des valeurs de signes contraires : c'est-à-dire quand le produit \(f(a)\times f(b)\) est négatif.

Exécutez : deux lignes s'affichent, une par racine. Remplacez ensuite n = 10 par n = 100, puis par n = 1000 : les encadrements se resserrent. Lien de secours : https://sciency.co/console.

Lire les résultats

Avec n = 10 : 0.5 0.6 et 3.4 3.5. Avec n = 100 : 0.58 0.59 et 3.41 3.42. Le champ mesure donc environ \(3{,}41\) sur \(0{,}59\) ; et \(3{,}41\times0{,}59\) est bien proche de \(2\).

Vous pouvez modifier le programme du signe. Pour étudier un autre rectangle, de demi-périmètre \(6\) et d'aire \(7\), que faut-il changer ?

La fonction étudiée est écrite dans def f(x) : pour un demi-périmètre \(6\) et une aire \(7\), on écrit return x**2 - 6*x + 7, c'est-à-dire \(x^2-6x+7\).

6. Une racine suffit encore

Le théorème 3 fait gagner la moitié du travail.

Inutile d'encadrer les deux racines : la somme donne l'une à partir de l'autre. Si \(0{,}58 < x_1 < 0{,}59\) et \(x_1+x_2=4\), alors \(x_2=4-x_1\) est compris entre \(4-0{,}59=3{,}41\) et \(4-0{,}58=3{,}42\) : on retrouve la seconde ligne du programme.

Attention au sens

Retrancher un nombre plus grand donne un résultat plus petit : la borne supérieure de \(x_1\) donne la borne inférieure de \(x_2\).

Le programme montre que la plus petite racine \(x_1\) de \(f(x)=x^2-6x+3\) est entre \(0{,}55\) et \(0{,}56\). Où se trouve la plus grande racine \(x_2\) ?

D'après le théorème 3, \(x_1+x_2=6\), donc \(x_2=6-x_1\). Comme \(x_1\) est entre \(0{,}55\) et \(0{,}56\), \(x_2\) est entre \(5{,}44\) et \(5{,}45\) : retrancher un nombre plus grand donne un résultat plus petit. Contrôle par le produit : \(x_1x_2\) doit valoir environ \(3\).

7. Ce qu'il faut retenir

Le fil, d'un bout à l'autre.

Le raisonnement

Deux nombres \(u\) et \(v\) de somme \(s\) et de produit \(p\) sont les racines de \((x-u)(x-v)=x^2-sx+p\). On cherche une racine : évidente si elle est entière, sinon encadrée par un changement de signe, aussi finement que l'on veut avec Python. La seconde racine s'obtient par la somme, et le produit sert de contrôle.

Votre parcours

Vous avez répondu à 0 question(s) sur 6 du premier coup.