Approximation des solutions d'une équation Grand Oral · mathématiques, NSI, physique-chimie, SES Un support de connaissances pour construire sa propre question

← Tous les textes du Grand Oral

MathsNSIPCSES

Au lycée, on résout des équations par des calculs exacts : on isole $x$, on factorise, on utilise le discriminant. Mais la plupart des équations qui se posent en sciences, en économie ou en ingénierie ne se laissent pas résoudre ainsi. On ne renonce pas pour autant : on approche la solution, aussi près qu'on le veut. Ce texte rassemble ce qu'il faut savoir sur ces méthodes, leur histoire et leurs usages. À chacun d'y choisir une direction et d'y construire sa question.

Sommaire
  1. Pourquoi approcher plutôt que résoudre ?
  2. Savoir qu'une solution existe
  3. La dichotomie : couper en deux
  4. La fausse position et la sécante
  5. La méthode de Newton : suivre la tangente
  6. Une autre idée : le point fixe
  7. Programmer les méthodes en Python
  8. Des équations qui se posent vraiment
  9. Comparer les méthodes
  10. Des directions pour construire sa question
Pourquoi approcher plutôt que résoudre ?

Les équations du second degré se résolvent par une formule, connue sous des formes géométriques depuis l'Antiquité. Au XVIᵉ siècle, les Italiens Tartaglia, Cardan et Ferrari trouvent des formules pour les degrés 3 et 4, avec des racines carrées et cubiques. Pendant près de trois siècles, on cherche en vain celle du degré 5.

En 1824, le Norvégien Niels Henrik Abel démontre qu'il n'existe aucune formule générale donnant les solutions d'une équation de degré 5 à l'aide des quatre opérations et des racines. Peu après, Évariste Galois donne un critère pour savoir quelles équations se résolvent ainsi. L'équation $x^5 - x - 1 = 0$, par exemple, a une unique solution réelle, environ $1{,}1673$, mais aucune écriture avec des radicaux.

D'autres équations mélangent des types de fonctions différents : $x = \cos x$, $\mathrm{e}^x = 3x$, ou en physique l'équation de Kepler. Elles n'ont pas de solution « exprimable », et pourtant leurs solutions existent et se calculent. Enfin, même quand une formule existe, une calculatrice n'affiche qu'une valeur approchée : $\sqrt{2}$ n'a pas d'écriture décimale finie. Calculer, c'est presque toujours approcher.

Savoir qu'une solution existe

Avant de chercher une solution, il faut être sûr qu'elle existe. C'est le rôle du théorème des valeurs intermédiaires, démontré rigoureusement par Bernard Bolzano en 1817.

Si $f$ est continue et strictement monotone sur $[a\,;b]$ et si $f(a)$ et $f(b)$ sont de signes contraires, alors l'équation $f(x) = 0$ a une unique solution dans $[a\,;b]$. L'équation $x^5 - x - 1 = 0$

Posons $f(x) = x^5 - x - 1$. Sa dérivée $f'(x) = 5x^4 - 1$ est positive pour $x \geqslant 1$, donc $f$ est strictement croissante sur $[1\,;2]$. Comme $f(1) = -1 < 0$ et $f(2) = 29 > 0$, l'équation a une unique solution dans $[1\,;2]$.

Le théorème garantit l'existence, mais ne dit pas où est la solution. Toutes les méthodes qui suivent partent de là : on dispose d'un intervalle qui contient la solution, et l'on cherche à le rétrécir, ou à construire une suite de nombres qui s'en approche.

La dichotomie : couper en deux

L'idée est celle du jeu « plus grand, plus petit ». On coupe l'intervalle $[a\,;b]$ en son milieu $c = \dfrac{a+b}{2}$. Si $f(a)$ et $f(c)$ sont de signes contraires, la solution est dans $[a\,;c]$, sinon dans $[c\,;b]$. On recommence avec l'intervalle choisi, deux fois plus petit.

var f = function (x) { return x*x - 2; }; var n = board.create('slider', [[0.85, 3.1], [1.75, 3.1], [0, 0, 8]], {name: 'étape', snapWidth: 1, digits: 0}); board.create('functiongraph', [f, 0.8, 2.2], {strokeColor: '#1565c0', strokeWidth: 2}); function bornes() { var a = 1, b = 2, k, c; for (k = 0; k < Math.round(n.Value()); k++) { c = (a + b)/2; if (f(a)*f(c) <= 0) { b = c; } else { a = c; } } return [a, b]; } board.create('segment', [[function () { return bornes()[0]; }, 0], [function () { return bornes()[1]; }, 0]], {strokeColor: '#d32f2f', strokeWidth: 6}); board.create('segment', [[function () { return bornes()[0]; }, -2.2], [function () { return bornes()[0]; }, 3]], {strokeColor: '#d32f2f', dash: 2, strokeWidth: 1}); board.create('segment', [[function () { return bornes()[1]; }, -2.2], [function () { return bornes()[1]; }, 3]], {strokeColor: '#d32f2f', dash: 2, strokeWidth: 1}); board.create('text', [0.8, 2.55, function () { var r = bornes(); return 'intervalle : [' + r[0].toFixed(4).replace('.', ',') + ' ; ' + r[1].toFixed(4).replace('.', ',') + ']'; }], {fontSize: 12, useKatex: false, useMathJax: false, parse: false, cssStyle: 'background:#fff;padding:0 3px;border-radius:3px'}); board.update(); La dichotomie pour $x^2 - 2 = 0$ sur $[1\,;2]$ : à chaque étape, l'intervalle rouge est deux fois plus court.

Pour $x^2 = 2$ en partant de $[1\,;2]$, on obtient successivement $[1\,;1{,}5]$, $[1{,}25\,;1{,}5]$, $[1{,}375\,;1{,}5]$, $[1{,}375\,;1{,}4375]$, $[1{,}40625\,;1{,}4375]$… Après $10$ étapes, l'intervalle est $[1{,}4140625\,;1{,}4150390625]$.

Après $n$ étapes, l'intervalle a pour longueur $\dfrac{b-a}{2^n}$. Pour garantir une précision $\varepsilon$, il suffit que $2^n \geqslant \dfrac{b-a}{\varepsilon}$, c'est-à-dire

$$n \geqslant \frac{\ln\big((b-a)/\varepsilon\big)}{\ln 2}.$$

Avec $b - a = 1$, il faut $20$ étapes pour une précision de $10^{-6}$ et $34$ pour $10^{-10}$. Chaque étape apporte un chiffre binaire : il faut un peu plus de trois étapes ($\ln 10/\ln 2 \approx 3{,}3$) pour gagner un chiffre décimal.

Du point de vue des suites, les bornes $(a_n)$ et $(b_n)$ sont l'une croissante, l'autre décroissante, et leur écart tend vers $0$ : elles sont adjacentes et convergent vers la solution. La dichotomie est lente mais infaillible : elle fonctionne dès que la fonction est continue et change de signe.

La fausse position et la sécante

Couper au milieu ignore une information précieuse : les valeurs de $f$. Si $f(a)$ est très proche de $0$, la solution est sans doute proche de $a$. La méthode de la fausse position remplace la courbe par la corde (la sécante) qui joint $\big(a\,;f(a)\big)$ et $\big(b\,;f(b)\big)$, et prend pour nouveau point l'abscisse où cette droite coupe l'axe :

$$c = a - f(a)\,\frac{b-a}{f(b)-f(a)}.$$

On garde ensuite, comme dans la dichotomie, la moitié de l'intervalle où $f$ change de signe. Pour $x^2 = 2$ sur $[1\,;2]$, on obtient $1{,}3333$, puis $1{,}4$ ; $1{,}41176$ ; $1{,}41379$ ; $1{,}41414$…

La règle de « fausse position » est l'une des plus anciennes techniques de résolution : on essaie une valeur fausse, on mesure l'erreur, et l'on corrige proportionnellement. On la trouve sous une forme simple dans les textes chinois des Neuf Chapitres, puis chez les mathématiciens arabes et dans les traités européens du Moyen Âge.

Si l'on abandonne l'encadrement et que l'on calcule toujours la nouvelle valeur à partir des deux dernières, on obtient la méthode de la sécante. Elle est plus rapide (en partant de $1$ et $2$ : $1{,}3333$ ; $1{,}4$ ; $1{,}41463$ ; $1{,}414211$ ; $1{,}4142135621$) mais elle peut s'égarer si l'on part trop loin. Son nombre de chiffres exacts est multiplié environ par $\dfrac{1+\sqrt5}{2} \approx 1{,}618$ à chaque étape : le nombre d'or apparaît là où on ne l'attendait pas.

La méthode de Newton : suivre la tangente

Si l'on connaît la dérivée, on peut remplacer la courbe non plus par une corde, mais par sa tangente. En partant d'une valeur $x_0$, on trace la tangente au point $\big(x_0\,;f(x_0)\big)$ ; elle coupe l'axe des abscisses en $x_1$. On recommence à partir de $x_1$. La tangente au point d'abscisse $x_n$ a pour équation $y = f(x_n) + f'(x_n)(x - x_n)$ ; elle s'annule pour

$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}.$$ var f = function (x) { return x*x - 2; }; var n = board.create('slider', [[1.5, -0.75], [2.15, -0.75], [0, 1, 3]], {name: 'n', snapWidth: 1, digits: 0}); board.create('functiongraph', [f, 0.95, 2.6], {strokeColor: '#1565c0', strokeWidth: 2}); var xs = [2.5]; for (var k = 0; k < 3; k++) { xs.push(xs[k] - f(xs[k])/(2*xs[k])); } var objets = []; for (var i = 0; i < 3; i++) { (function (i) { var vis = function () { return Math.round(n.Value()) > i; }; objets.push(board.create('segment', [[xs[i], 0], [xs[i], f(xs[i])]], {strokeColor: '#999', dash: 2, strokeWidth: 1, visible: vis})); objets.push(board.create('segment', [[xs[i], f(xs[i])], [xs[i+1], 0]], {strokeColor: '#d32f2f', strokeWidth: 1.5, visible: vis})); objets.push(board.create('point', [xs[i+1], 0], {name: '', size: 2, color: '#d32f2f', fixed: true, visible: vis})); })(i); } board.create('point', [xs[0], 0], {name: '', size: 2, color: '#000', fixed: true}); board.create('text', [1.5, -1.3, function () { var m = Math.round(n.Value()); return 'x' + m + ' ≈ ' + xs[m].toFixed(6).replace('.', ','); }], {fontSize: 12, useKatex: false, useMathJax: false, parse: false, cssStyle: 'background:#fff;padding:0 3px;border-radius:3px'}); board.update(); La méthode de Newton pour $x^2 - 2 = 0$, en partant de $x_0 = 2{,}5$ : chaque tangente mène très près de $\sqrt2$.

Pour $f(x) = x^2 - 2$, la formule devient

$$x_{n+1} = x_n - \frac{x_n^2 - 2}{2x_n} = \frac{1}{2}\left(x_n + \frac{2}{x_n}\right).$$

En partant de $x_0 = 1$ :

$n$$x_n$décimales exactes
$1$$1{,}5$$0$
$2$$1{,}416\,666\,7$$2$
$3$$1{,}414\,215\,686$$5$
$4$$1{,}414\,213\,562\,375$$11$

Le nombre de décimales exactes double environ à chaque étape : on dit que la convergence est quadratique. Quatre étapes donnent onze décimales, là où la dichotomie demande une quarantaine d'étapes.

Cette formule pour $\sqrt{2}$ est ancienne. La tablette babylonienne YBC 7289 (vers $1800$ avant notre ère) donne $\sqrt2 \approx 1{,}414\,213\,0$, écrit en base $60$, à moins d'un millionième de la vraie valeur. Héron d'Alexandrie (Iᵉʳ siècle) décrit la méthode « faire la moyenne entre $x$ et $\dfrac{a}{x}$ » pour approcher $\sqrt{a}$. Isaac Newton la généralise vers $1669$ à d'autres équations, et Joseph Raphson en publie en $1690$ la forme proche de celle d'aujourd'hui ; on parle souvent de méthode de Newton-Raphson.

La méthode demande de partir assez près de la solution. Si $f'(x_n) = 0$, la tangente est horizontale et ne coupe pas l'axe. Pire, la suite peut tourner en rond : pour $f(x) = x^3 - 2x + 2$ en partant de $x_0 = 0$, on obtient $x_1 = 1$, puis $x_2 = 0$, puis $x_3 = 1$… sans jamais approcher la solution, qui est proche de $-1{,}77$. En pratique, on commence souvent par quelques étapes de dichotomie, puis on finit par Newton.

Une autre idée : le point fixe

On peut souvent écrire une équation sous la forme $x = g(x)$. Une solution est alors un point fixe de $g$ : un nombre que $g$ ne change pas. Pour le chercher, on part d'une valeur $u_0$ et l'on calcule la suite définie par récurrence $u_{n+1} = g(u_n)$, en espérant qu'elle converge.

Si la suite définie par $u_{n+1} = g(u_n)$ converge vers un réel $\ell$ et si $g$ est continue en $\ell$, alors $g(\ell) = \ell$ : la limite est un point fixe de $g$.

C'est un résultat du programme de terminale. Il ne dit pas que la suite converge, mais il dit où chercher sa limite. Avec $g(x) = \cos x$ et $u_0 = 1$, on obtient $u_1 \approx 0{,}540$ ; $u_2 \approx 0{,}858$ ; $u_3 \approx 0{,}654$ ; … $u_{10} \approx 0{,}744$ ; $u_{20} \approx 0{,}739\,18$ ; $u_{30} \approx 0{,}739\,087$. La suite oscille autour de la solution de $\cos x = x$ et s'en rapproche, lentement : il faut une trentaine d'étapes pour cinq décimales.

La vitesse dépend de la pente de $g$ au point fixe. Près de $\ell$, l'approximation affine donne $u_{n+1} - \ell \approx g'(\ell)\,(u_n - \ell)$ : l'erreur est multipliée à chaque étape par environ $|g'(\ell)|$. Pour $g = \cos$, $|g'(\ell)| = \sin \ell \approx 0{,}67$ ; l'erreur ne diminue que d'un tiers à chaque étape. Si $|g'(\ell)| > 1$, l'erreur grandit et la suite s'éloigne.

La méthode de Newton revient à chercher un point fixe de $g(x) = x - \dfrac{f(x)}{f'(x)}$. Pour la méthode de Héron, $g(x) = \dfrac{1}{2}\left(x + \dfrac{2}{x}\right)$, et un calcul de dérivée montre que $g'\big(\sqrt2\big) = 0$ : l'erreur n'est plus multipliée par un nombre fixe, elle est élevée au carré. C'est l'explication du doublement des décimales.
Programmer les méthodes en Python

Les deux programmes ci-dessous peuvent être modifiés et exécutés. Le premier compte les étapes de la dichotomie nécessaires pour une précision donnée.

def f(x): return x**5 - x - 1 def dichotomie(f, a, b, precision): etapes = 0 while b - a > precision: c = (a + b) / 2 if f(a) * f(c) <= 0: b = c else: a = c etapes = etapes + 1 return a, b, etapes print(dichotomie(f, 1, 2, 0.000001)) def f(x): return x**5 - x - 1 def fprime(x): return 5 * x**4 - 1 def newton(f, fprime, x, n): for k in range(n): x = x - f(x) / fprime(x) print(k + 1, x) return x newton(f, fprime, 1, 6)

La méthode de Newton donne $1{,}25$ ; $1{,}17846$ ; $1{,}167537$ ; $1{,}16730408$ ; $1{,}1673039783$ : la solution de $x^5 - x - 1 = 0$ est connue avec dix décimales après cinq étapes.

Ce que l'on peut approfondir en NSI
  • Terminaison : la boucle while de la dichotomie s'arrête, car la longueur $b - a$ est divisée par $2$ à chaque tour et finit par passer sous la précision voulue. Ce raisonnement (une quantité qui décroît strictement) est la méthode générale pour prouver qu'un algorithme se termine.
  • Coût : la dichotomie fait environ $\log_2\!\big((b-a)/\varepsilon\big)$ tours ; c'est la même idée que la recherche dans un tableau trié, qui trouve un élément parmi un million en une vingtaine de comparaisons.
  • Nombres flottants : un ordinateur ne représente qu'environ $16$ chiffres significatifs. Si l'on demande une précision de $10^{-20}$ autour de $1{,}17$, l'écart $b - a$ ne peut plus diminuer et la boucle ne s'arrête jamais : un programme correct sur le papier peut tourner indéfiniment.
  • Calculer sans diviser : appliquée à $f(x) = \dfrac{1}{x} - a$, la méthode de Newton donne $x_{n+1} = x_n(2 - a\,x_n)$, qui approche $\dfrac{1}{a}$ avec seulement des multiplications. Des processeurs calculent ainsi des inverses et des racines carrées.
Des équations qui se posent vraiment En SES : le taux d'un crédit

On emprunte $10\,000$ € et l'on rembourse $60$ mensualités de $190$ €. Quel est le taux d'intérêt ? Si $t$ est le taux mensuel, chaque mensualité, ramenée à sa valeur d'aujourd'hui, vaut $\dfrac{190}{(1+t)^k}$, et la somme de ces valeurs doit égaler le capital emprunté. Avec la formule de la somme des termes d'une suite géométrique :

$$10\,000 = 190 \times \frac{1 - (1+t)^{-60}}{t}.$$

Cette équation n'a pas de solution exprimable : les banques, les tableurs et les simulateurs la résolvent numériquement. La dichotomie donne $t \approx 0{,}44\,\%$ par mois. Le taux annuel effectif global (TAEG), que la loi impose d'afficher, est le taux annuel équivalent, $(1+t)^{12} - 1 \approx 5{,}41\,\%$. Le crédit coûte au total $60 \times 190 - 10\,000 = 1\,400$ €.

En physique : l'équation de Kepler

Une planète décrit une ellipse autour du Soleil. Pour savoir où elle se trouve à une date donnée, il faut résoudre l'équation de Kepler $E - e\sin E = M$, où $e$ est l'excentricité de l'orbite, $M$ un angle qui augmente régulièrement avec le temps et $E$ l'angle cherché. Kepler l'écrit en $1609$ ; elle n'a pas de solution exprimable avec les fonctions usuelles.

Pour Mercure ($e \approx 0{,}2056$) et $M = 1$ radian, la méthode de Newton partie de $E_0 = 1$ donne $1{,}1946$ ; $1{,}190946$ ; $1{,}1909448$ : quatre étapes suffisent. C'est ainsi que l'on calcule les éphémérides et les trajectoires des satellites.

D'autres exemples
  • L'équation $x = \cos x$ a une unique solution, $0{,}739\,085\ldots$ Avec une calculatrice en radians, il suffit d'appuyer plusieurs fois de suite sur « cos » : la suite $u_{n+1} = \cos u_n$ converge vers elle.
  • En chimie, les équilibres (concentrations à l'équilibre, $\mathrm{pH}$ de mélanges) conduisent à des équations polynomiales de degré élevé, résolues numériquement par les logiciels.
  • En physique, la trajectoire d'un projectile soumis aux frottements de l'air, ou la température d'équilibre d'un corps qui rayonne, s'obtiennent aussi en résolvant des équations de façon approchée.
Comparer les méthodes
méthodeil fautvitesseconverge
dichotomieun changement de signe1 chiffre en 3,3 étapestoujours
fausse positionun changement de signevariabletoujours
sécantedeux valeurs procheschiffres × 1,6pas toujours
Newtonla dérivéechiffres × 2pas toujours

Il n'y a pas de meilleure méthode dans l'absolu : plus une méthode est rapide, plus elle demande d'informations et plus elle risque de s'égarer. Les logiciels combinent les deux qualités : une méthode sûre pour s'approcher, une méthode rapide pour finir.

Des directions pour construire sa question

Ce texte n'est pas un Grand Oral. Il rassemble des connaissances dans lesquelles chacun peut choisir une direction, la creuser et formuler sa propre question. Quelques directions possibles :

Pour l'échange avec le jury : les notions du cours à maîtriser

Le jury peut interroger sur les chapitres de spécialité mobilisés. Avec ce thème, il est utile de connaître parfaitement : la continuité et le théorème des valeurs intermédiaires ; la dérivée, l'équation de la tangente et l'étude des variations ; les suites définies par récurrence, les suites monotones, la convergence et les limites ; les suites géométriques et la somme de leurs termes ; la fonction logarithme ; et en physique, les lois de Kepler.

Pour réviser ces chapitres, l'application Maths FlashBac reprend tout le cours de spécialité en cartes.

Pour aller plus loin