Matthieu Vermeil — 13 septembre 2022
Les secrets du solveur d'équation - Partie 1 : Se résoudre à ne pas résoudre
“Résoudre l’équation suivante”, une consigne habituelle de cours de maths. Que ce soit pour découvrir la solution ou pour vérifier votre résultat, vous avez peut-être déjà recouru à l’application Solveur de votre calculatrice.
Ici, pas de tracé de graphe aux couleurs chatoyantes, pas de tableau de données bien rangées ou de code Python joliment indenté : un champ pour écrire l’équation, et un bouton pour lancer la résolution. Et pourtant, derrière cette apparence épurée se cache toute une machinerie subtile.
Mais avant de s’attaquer au solveur, une question fondamentale se pose, qui peut paraître naïve à première vue mais qui en réalité préoccupe les mathématiques et l’informatique depuis bien longtemps : ça veut dire quoi, résoudre une équation ?
Ce qu’on aimerait avoir comme résultat
Parmi l’immense variété d’équations qui existe en sciences, nous allons nous intéresser uniquement aux deux types suivants :
- les systèmes linéaires (les classiques n équations à n inconnues) ;
- les équations numériques à une seule variable, c’est-à-dire qu’il y a une seule inconnue qui est un nombre réel.
Voici quelques exemples du genre d’équation dont on va parler :
(i) 5x-12=y et 2y+3=-x
système linéaire à deux inconnues(ii) x-2=ln(x)
équation numérique à une seule variable(iii) 3x²-(4/3)x=1-x²
équation polynomiale de degré 2, un cas particulier d’équation numérique
Quand on parle de résoudre une équation, on aimerait en fait deux informations :
- Le nombre de solutions (1, 3, aucune, une infinité…). Cette information est déjà intéressante en soi, et elle peut être très difficile à obtenir pour certaines équations !
- La valeur précise de ces solutions. On voudrait un résultat de la forme
x=…
, le membre de droite étant une expression mathématique qui ne fasse intervenir que des éléments connus, c’est-à-dire des nombres usuels (les nombres entiers, pi, la constante d’Euler…), des opérations arithmétiques (+, -, *, /) et des fonctions usuelles (sinus, exponentielle, etc.). C’est ce qu’on appelle une expression de forme close.
Quand tout va bien : les formules explicites
Si on regarde l’équation (iii)
, on se rend compte qu’elle est polynomiale de degré 2. Et ça tombe bien, car ce type d’équation est complètement résolu par une formule explicite tout à fait générale. Ce n’est pas tant la formule en elle-même que le fait qu’elle existe qui nous intéresse ici : quels que soient les coefficients de l’équation, on est certains de pouvoir directement savoir combien il y a de solutions, et on peut les calculer de manière exacte. De plus, comme le chemin est tout tracé, un programme informatique peut faire les calculs tout seul sans aucune difficulté. C’est exactement ce que fait la calculatrice NumWorks si elle détecte que l’équation écrite est polynomiale de degré 2.
En bref, si on a une formule de résolution, l’équation est complètement résolue.
Pour les systèmes linéaires d’équations, la situation est similaire. Quel que soit le nombre d’inconnues, on dispose d’une formule pour résoudre directement n’importe quel système linéaire : ce sont les formules de Cramer.
En fait, pour les systèmes linéaires, cela fait bien longtemps que l’on sait les résoudre, et la question qui se pose n’est plus “Peut-on les résoudre ?” mais plutôt “Comment les résoudre vite ?”. Cette question est très concrète : de très nombreux programmes informatiques ont besoin de résoudre des systèmes linéaires à plusieurs milliers voire plusieurs millions d’inconnues. Il s’avère qu’appliquer les formules de Cramer est une méthode très peu efficace en terme de rapidité, mais il existe beaucoup d’autres manières de résoudre plus rapidement ces systèmes d’équations, comme par exemple la méthode du pivot de Gauss.
Si vous entrez un système d’équations sur votre calculatrice NumWorks, elle va d’abord vérifier qu’il est bien linéaire puis le résoudre directement de manière exacte.
Et quand il n’y a pas de formule ?
Eh oui, il n’y a pas toujours de formule, loin de là ! Prenons un exemple historique : les équations polynomiales, c’est-à-dire les équations de la forme a_n * x^n + a_{n-1} x^{n-1} + … + a_1 x + a_0 = 0
avec a_{n}!=0
. n
est donc la plus grande puissance de x
qui apparaît dans l’équation, ce qu’on appelle son degré. Ces équations très particulières ont été étudiées tout au long de l’histoire des mathématiques (et le sont toujours !) car elles apparaissent dans de très nombreux problèmes, toutes sciences confondues. Les équations de degré 1 ne posent aucun problème (il s’agit simplement des équations linéaires de la forme ax+b=0
). Quant au degré 2, plusieurs civilisations ont su les résoudre, et ce depuis l’Antiquité. Mais les degrés suivants sont beaucoup plus coriaces…
Pendant la Renaissance, des mathématiciens italiens mettent au point séparément des formules de résolution pour les équations polynomiales de degré 3 et 4 : ce sont respectivement les formules de Cardan et les formules de Ferrari. Ces formules sont nettement plus compliquées que pour le second degré, mais permettent de résoudre n’importe quelle équation de degré 3 ou 4, ce qui est une très grande avancée. Les degrés suivants vont donner du fil à retordre aux mathématiciens, jusqu’au début du XIXe siècle où le norvégien Abel démontre qu’il est rigoureusement impossible de trouver des formules de résolution générale à partir du degré 5 (théorème d’Abel-Ruffini).
Et il est seulement question ici d’équations polynomiales ! Les équations impliquant des fonctions plus complexes, comme les fonctions trigonométriques (sinus, cosinus…), le logarithme ou encore l’exponentielle n’ont en général pas de solution qui s’exprime simplement de manière exacte. Prenons par exemple une équation d’apparence toute simple : x-2=ln(x)
.
Le graphe de ces deux fonctions permet de voir qu’il y a deux solutions, mais il est impossible d’avoir une expression exacte de ces solutions de la forme x=…
qui ne ferait intervenir que des fonctions et des nombres usuels1.
Dans ce contexte, que signifie alors résoudre l’équation ? Dans de nombreuses situations, on n’a en fait pas vraiment besoin de la valeur exacte des solutions mais seulement d’une approximation assez précise. On va donc chercher à résoudre approximativement les équations, comme le fait la calculatrice NumWorks dès que l’équation n’est ni polynomiale de degré 2, ni un système linéaire :
Comment la calculatrice peut-elle déterminer le nombre de solutions ? Et comment peut-elle les approximer ? La suite dans la prochaine partie !
-
Il est en général très difficile de démontrer mathématiquement ce genre d’impossibilité. Pour commencer, il faudrait déjà donner une définition rigoureuse de “fonctions et nombres usuels”. Mais à défaut d’une preuve mathématique, on peut déjà se douter que même si une expression exacte existait, elle serait très difficile à trouver. Notons que même des outils informatiques puissants comme l’Inverse Symbolic Calculator ou Wolfram Alpha n’y parviennent pas… ↩