🔢Algorithmes numériques

Cours de mathématiques · Première

Approcher la solution d'une équation f(x) = 0 par balayage puis par dichotomie (on réduit de moitié l'encadrement à chaque étape), et approcher une racine carrée avec la méthode de Héron.

Ce que tu vas savoir faire

  • Approcher une solution de f(x) = 0 par balayage avec un pas donné.
  • Comprendre et programmer la dichotomie pour encadrer une solution.
  • Comprendre pourquoi la dichotomie divise l'amplitude par 2 à chaque étape.
  • Programmer quelques itérations de la méthode de Héron pour approcher √a.
  • Prévoir le résultat d'un algorithme numérique sur un exemple.

Le problème : résoudre f(x) = 0

Règle

Beaucoup de problèmes reviennent à chercher un x tel que f(x) = 0. Souvent on ne sait pas le calculer exactement : on va donc en chercher une valeur approchée.

Idée clé : si f est continue et que f(a) et f(b) sont de signes contraires, alors il existe une solution entre a et b (théorème des valeurs intermédiaires). On dit que [a, b] est un encadrement de la solution.

def f(x):
    return x * x - 2     # f(x) = 0  <=>  x = racine de 2
Méthode

Pour savoir si deux nombres u et v sont de signes contraires, on teste le signe de leur produit : u * v < 0 signifie « signes opposés ». C'est le test au cœur de la dichotomie.

Exemple

Avec f(x) = x² - 2 : f(1) = -1 < 0 et f(2) = 2 > 0. Il y a donc une solution dans [1, 2] : c'est √2 ≈ 1,414.

Astuce

« Approcher » ne veut pas dire « trouver exactement » : on se fixe une précision (par exemple 0.001) et on s'arrête quand l'encadrement est plus court que cette précision.

Recherche par balayage

Règle

Le balayage parcourt l'intervalle [a, b] par petits pas réguliers et s'arrête dès qu'il a dépassé la solution. Pour f croissante qui passe du négatif au positif, on avance tant que f(x) < 0 :

def balayage(a, b, pas):
    x = a
    while x < b and x * x - 2 < 0:   # ici f(x) = x*x - 2
        x = x + pas
    return x

À la sortie, x est la première valeur balayée pour laquelle f(x) ≥ 0 : la solution est juste avant, dans [x - pas, x].

Méthode

Pour balayer :

  1. On part de x = a.
  2. Tant que f(x) n'a pas changé de signe, on avance d'un pas.
  3. Plus le pas est petit, plus l'approximation est précise, mais plus il faut d'étapes.
Exemple

Sur f(x) = x² - 2 avec a = 1 et pas = 0.1 : on passe 1, 1.1, … ; f devient positive à x = 1.5 environ. La solution √2 ≈ 1,414 est bien dans le dernier intervalle balayé.

Astuce

Le while doit toujours finir : on s'assure d'avancer (x = x + pas avec pas > 0) et de borner par x < b pour éviter une boucle infinie.

La dichotomie

Règle

La dichotomie est beaucoup plus rapide que le balayage. On part d'un encadrement [a, b]f(a) et f(b) sont de signes contraires, puis on coupe l'intervalle en deux à chaque étape :

def dichotomie(a, b, n):
    for _ in range(n):
        m = (a + b) / 2
        if (a * a - 2) * (m * m - 2) <= 0:  # f(a) et f(m) signes opposés
            b = m      # la solution est dans [a, m]
        else:
            a = m      # la solution est dans [m, b]
    return (a + b) / 2

On calcule le milieu m, on regarde dans quelle moitié se trouve la solution (celle où les signes sont opposés) et on garde cette moitié-là.

⭐ Pour les curieux — pourquoi ça marche ? Le milieu m=a+b2m = \frac{a+b}{2} coupe l'intervalle en deux morceaux rigoureusement égaux : ma=bm=ba2m - a = b - m = \frac{b-a}{2}. À chaque étape on jette une moitié et on garde l'autre, donc la longueur est multipliée par exactement 12\frac{1}{2}. En répétant nn fois, on multiplie nn fois par 12\frac{1}{2} : l'amplitude passe de bab-a à ba2n\frac{b-a}{2^n}. C'est une division qui s'emballe : 10 plis suffisent à diviser par 10241024, là où le balayage avancerait encore pas à pas.

Méthode

À chaque tour, la longueur de l'encadrement est divisée par 2. Après n étapes, on part de b - a et on obtient une amplitude de (b - a) / 2**n. C'est pour cela que la dichotomie converge très vite : 10 étapes divisent déjà l'écart par 1024.

Exemple

Cherchons √2 dans [1, 2]. Milieu m = 1.5 : f(1.5) = 0.25 > 0, même signe que f(2), donc on garde [1, 1.5]. Milieu 1.25 : f(1.25) = -0.4375 < 0, on garde [1.25, 1.5]… et on se rapproche de 1,414.

Astuce

Pour choisir la bonne moitié, on compare les signes via le produit f(a) * f(m) : s'il est négatif (ou nul), la racine est entre a et m ; sinon entre m et b.

La méthode de Héron (√a)

Règle

La méthode de Héron approche la racine carrée d'un nombre a > 0. On part d'une estimation u (par exemple u = a) et on l'améliore avec la formule :

u12(u+au)u \leftarrow \frac{1}{2}\Big(u + \frac{a}{u}\Big)

def heron(a, n):
    u = a
    for _ in range(n):
        u = (u + a / u) / 2
    return u

Chaque itération double environ le nombre de décimales exactes : très peu d'étapes suffisent.

⭐ Pour les curieux — pourquoi ça marche ? L'idée cachée, c'est que uu et au\frac{a}{u} encadrent toujours a\sqrt{a} : leur produit vaut u×au=a=a×au \times \frac{a}{u} = a = \sqrt{a}\times\sqrt{a}, donc si l'un dépasse a\sqrt{a}, l'autre passe forcément en dessous. On remplace alors uu par leur moyenne 12(u+au)\frac{1}{2}\big(u+\frac{a}{u}\big). Pourquoi cela se rapproche de a\sqrt{a} ? Parce que pour deux nombres positifs, la moyenne est toujours au moins égale à la racine de leur produit : (ua/u)20(\sqrt{u}-\sqrt{a/u})^2 \ge 0 donne en développant 12(u+au)u×au=a\frac{1}{2}\big(u+\frac{a}{u}\big) \ge \sqrt{u\times\frac{a}{u}} = \sqrt{a}. Le nouveau terme reste donc toujours a\ge \sqrt{a}, mais collé juste au-dessus : on descend en douceur vers a\sqrt{a} sans jamais le franchir. Avec a=2a = 2, u=2u = 2 est trop grand et 22=1\frac{2}{2} = 1 trop petit ; leur moyenne 1,51{,}5 vise déjà bien mieux, et l'écart se réduit très vite ensuite.

Méthode

Pourquoi ça marche : si u est trop grand par rapport à √a, alors a / u est trop petit, et leur moyenne (u + a/u)/2 retombe tout près de √a. On remplace donc u par cette moyenne, encore et encore.

Exemple

Pour √2 en partant de u = 2 :

  • u = (2 + 2/2)/2 = 1.5
  • u = (1.5 + 2/1.5)/2 ≈ 1.41666…
  • u ≈ 1.41421568… (déjà 5 décimales exactes !)
Astuce

On divise par u, donc il faut u ≠ 0 : c'est garanti tant que a > 0 et qu'on part de u = a > 0.

Comparer les méthodes

Règle

Trois façons d'approcher une racine, de la plus lente à la plus rapide :

MéthodeIdéeVitesse
Balayageavancer pas à paslente (linéaire)
Dichotomiecouper en deuxrapide (divise par 2)
Héronmoyenne (u + a/u)/2très rapide (double les décimales)

Le balayage est simple à comprendre, mais pour une grande précision la dichotomie et surtout Héron demandent beaucoup moins d'étapes.

Méthode

Pour atteindre une précision e :

  • balayage : il faut un pas ≤ e, donc de l'ordre de (b-a)/e étapes ;
  • dichotomie : il faut n tel que (b-a)/2**n ≤ e, soit très peu d'étapes.
Exemple

Pour une amplitude de départ 1 et une précision 0.001, le balayage demande environ 1000 pas, la dichotomie seulement 10 étapes (car 2**10 = 1024 > 1000).

Astuce

Retiens l'ordre de grandeur : balayage = lent, dichotomie = rapide, Héron = très rapide pour les racines carrées.

Tu as lu le cours ? Passe à la pratique.

Un coach IA te guide sans jamais donner la réponse, avec des exercices et des quiz sur ce chapitre. Version d'essai gratuite, sans limite de durée.

S'entraîner avec le coach IA — gratuit