Aller au contenu

Accueil › BCPST › Informatique

BCPST2 · Informatique · semaine 1

Méthode d'Euler

Résolution approchée d'une équation différentielle d'ordre 1 par la méthode d'Euler explicite, influence du pas, modèle logistique. Extensions aux systèmes, Lotka-Volterra, modèle SIR et oscillateur amorti.

Sommaire

La fiche de cours

Résumé en cinq points

  1. La méthode d'Euler explicite remplace la dérivée par un taux d'accroissement, yk+1 = yk + h f(tk, yk). Elle suit la tangente sur chaque pas.
  2. Elle est d'ordre 1, l'erreur finale est à peu près proportionnelle au pas, et le temps de calcul inversement proportionnel au pas.
  3. Un pas trop grand devant le temps caractéristique donne des oscillations parasites, puis une divergence, comme le montre y' = − a y avec a h > 2.
  4. La méthode de Heun, prédiction puis correction par la pente moyenne, est d'ordre 2. Une fonction de module comme odeint sert de référence.
  5. Un système se traite composante par composante avec les anciennes valeurs, et une équation d'ordre 2 se ramène à un système d'ordre 1 en posant v = x'.
Pourquoi ce chapitre

La plupart des équations différentielles qui modélisent le vivant, croissance d'une population, épidémie, cinétique d'une réaction, n'ont pas de solution explicite simple, ou en ont une qu'on ne sait pas écrire. On veut pourtant tracer l'évolution du système et prévoir. La méthode d'Euler est la plus simple des méthodes numériques qui répondent à ce besoin. Elle transforme une équation différentielle en une suite récurrente, qu'on calcule avec une boucle. Comprendre ce qu'elle fait, ce que coûte sa précision et quand elle échoue est un attendu direct du programme, et une question fréquente à l'oral, où l'on demande d'écrire la méthode puis de commenter une courbe obtenue.

Le problème à résoudre

Équation différentielle d'ordre 1 et problème de Cauchy

On cherche une fonction y du temps t qui vérifie y'(t) = f(t, y(t)) sur un intervalle [t₀, tf], avec une condition initiale y(t₀) = y₀. C'est un problème de Cauchy. La fonction f est donnée, elle traduit la loi d'évolution. Exemples.

  • Décroissance radioactive ou décharge d'un condensateur, y' = − y / τ, solution exacte y₀ exp(− (t − t₀) / τ).
  • Modèle logistique de Verhulst, N' = r N (1 − N / K), où r est le taux de croissance et K la capacité d'accueil du milieu. La solution exacte est N(t) = K / (1 + (K / N₀ − 1) exp(− r t)) avec t₀ = 0. Elle croît de N₀ vers K en forme de S quand N₀ < K / 2.

Discrétisation

On ne calcule pas y partout mais en des instants régulièrement espacés, tk = t₀ + k h, où h est le pas de discrétisation. Avec n pas, h = (tf − t₀) / n. On construit des valeurs approchées yk de y(tk).

La méthode d'Euler explicite

Principe

Pour h petit, la dérivée est proche du taux d'accroissement, y'(tk) ≈ (y(tk+1) − y(tk)) / h. En remplaçant y'(tk) par f(tk, y(tk)), on obtient la relation de récurrence de la méthode d'Euler explicite.

yk+1 = yk + h f(tk, yk).

Interprétation géométrique. À partir du point (tk, yk), on avance d'un pas h en suivant la tangente de pente f(tk, yk). On remplace ainsi la courbe par une ligne brisée. La méthode est dite explicite car yk+1 s'obtient directement à partir de yk, sans résoudre d'équation.

Programme

def euler(f, t0, tf, y0, n):
    # f : fonction de deux variables, f(t, y). Renvoie les listes des t_k et des y_k.
    h = (tf - t0) / n
    t = [t0]
    y = [y0]
    for k in range(n):
        y.append(y[k] + h * f(t[k], y[k]))
        t.append(t[k] + h)
    return t, y

La fonction f est passée en paramètre, ce qui permet de résoudre n'importe quelle équation avec le même programme. Pour le modèle logistique, on définit f(t, N) = r N (1 − N / K), qui ne dépend pas de t mais doit en recevoir un. Les listes renvoyées se tracent directement, et contiennent n + 1 points.

Exemple d'utilisation, avec r = 0,5 par jour, K = 1 000 individus et N₀ = 10 sur 20 jours.

r = 0.5
K = 1000

def f_logistique(t, N):
    return r * N * (1 - N / K)

t, N = euler(f_logistique, 0, 20, 10, 200)

La fonction f_logistique utilise r et K définis dans l'espace global du module, conformément à la règle de portée lexicale. Avec 200 pas, h = 0,1 jour, soit vingt fois moins que le temps caractéristique 1 / r = 2 jours. La courbe obtenue a l'allure en S attendue et approche K à la fin de l'intervalle.

Coût

Chaque pas demande une évaluation de f et quelques opérations. Le temps de calcul est donc proportionnel au nombre de pas n = (tf − t₀) / h. Diviser le pas par 10 multiplie le temps de calcul par 10.

Impact du pas de discrétisation

Qualité des résultats, erreur d'ordre 1

L'écart entre la valeur approchée yn et la valeur exacte y(tf) est l'erreur globale. On comprend son comportement en deux temps. Sur un seul pas, remplacer la courbe par sa tangente commet une erreur de l'ordre de h², d'après le développement de Taylor y(t + h) = y(t) + h y'(t) + (h² / 2) y''(t) + …, dont Euler ne garde que les deux premiers termes. Sur l'intervalle entier, il y a n = (tf − t₀) / h pas, et ces erreurs locales s'accumulent, ce qui donne une erreur globale de l'ordre de n × h², c'est-à-dire de l'ordre de h. Pour la méthode d'Euler et une fonction f régulière, elle est à peu près proportionnelle au pas h, on dit que la méthode est d'ordre 1. Diviser h par 2 divise l'erreur finale par environ 2. Pour gagner un chiffre significatif, il faut dix fois plus de pas, donc dix fois plus de temps.

Exemple chiffré. Pour y' = − y avec y(0) = 1 sur [0, 1], la valeur exacte est e⁻¹ ≈ 0,3679. Avec un seul pas, h = 1, Euler donne y₁ = 1 − 1 = 0. Avec 10 pas, h = 0,1, on obtient (1 − 0,1)¹⁰ = 0,9¹⁰ ≈ 0,3487, erreur d'environ 0,019. Avec 100 pas, 0,99¹⁰⁰ ≈ 0,3660, erreur d'environ 0,0018. L'erreur est bien divisée par 10 quand le pas l'est.

On met cet effet en évidence en traçant sur un même graphique la solution exacte et plusieurs solutions approchées de pas différents, ou en traçant l'erreur finale en fonction de h en échelle logarithmique, où la pente vaut 1.

Instabilité quand le pas est trop grand

Pour y' = − a y avec a > 0, la récurrence s'écrit yk+1 = (1 − a h) yk. La solution exacte décroît vers 0 sans osciller. La suite approchée décroît sans osciller si a h < 1, oscille en changeant de signe si 1 < a h < 2, et diverge si a h > 2. Un pas trop grand devant le temps caractéristique 1 / a donne donc une courbe qui n'a plus rien à voir avec la réalité. Règle pratique, choisir un pas nettement inférieur au plus petit temps caractéristique du problème, par exemple au moins dix fois plus petit.

Compromis entre précision et temps de calcul

Réduire le pas améliore la précision tant que l'erreur de méthode domine. Pour des pas extrêmement petits, les erreurs d'arrondi des flottants, accumulées sur un très grand nombre de pas, finissent par compter, et le temps de calcul devient prohibitif. Le choix du pas est donc un compromis, qu'on règle en diminuant h jusqu'à ce que la courbe ne change plus visiblement.

Comparaisons avec d'autres résolutions

Comparaison avec une résolution exacte

Quand la solution exacte est connue, décroissance exponentielle, modèle logistique, on la trace à côté de la solution approchée. C'est le meilleur moyen de valider un programme et de mesurer l'erreur. Sur le modèle logistique, la solution d'Euler approche bien la sigmoïde pour un pas petit devant 1 / r, et prend de l'avance ou du retard visible pour un pas de l'ordre de 1 / r.

Méthode de Heun

La méthode de Heun corrige Euler en utilisant la pente moyenne sur le pas. On calcule d'abord une prédiction par Euler, p = yk + h f(tk, yk), puis on corrige.

yk+1 = yk + (h / 2) (f(tk, yk) + f(tk+1, p)).

Elle demande deux évaluations de f par pas au lieu d'une, mais elle est d'ordre 2. Son erreur est à peu près proportionnelle à h², diviser le pas par 10 divise l'erreur par environ 100. À précision égale, elle est donc bien plus rapide qu'Euler. Sur l'exemple y' = − y, un seul pas h = 1 donne déjà 0,5 au lieu de 0, et dix pas donnent une erreur de l'ordre de 7 × 10⁻⁴, contre 0,019 avec Euler.

Fonction de résolution fournie par un module

Les bibliothèques scientifiques fournissent des fonctions de résolution plus précises, qui adaptent elles-mêmes le pas. La fonction odeint du module scipy.integrate en est un exemple. Attention, elle attend une fonction dont les arguments sont dans l'ordre (y, t), et non (t, y). Le programme précise qu'aucune connaissance sur un module n'est exigible, sa documentation doit être fournie. On l'utilise comme référence pour juger la qualité d'une méthode programmée à la main. Concrètement, on calcule sur les mêmes instants la solution d'Euler, celle de Heun et celle du module, on trace les trois courbes, puis on trace l'écart de chaque méthode à la référence. On constate que, pour un même pas, l'écart de Heun est bien plus faible que celui d'Euler, et qu'il diminue beaucoup plus vite quand on réduit le pas.

Compléments, systèmes et équations d'ordre 2

Systèmes différentiels d'ordre 1

Ce complément fait partie des thèmes libres proposés par le programme, il n'est pas exigible. Pour un système de plusieurs équations couplées, on applique la même formule à chaque inconnue, en calculant toutes les pentes avec les valeurs de l'instant tk avant de mettre à jour.

Modèle proies-prédateurs de Lotka-Volterra, x' = a x − b x y pour les proies, y' = − c y + d x y pour les prédateurs, avec a, b, c, d positifs. Un pas d'Euler s'écrit

def pas_lotka(x, y, h, a, b, c, d):
    nx = x + h * (a * x - b * x * y)
    ny = y + h * (-c * y + d * x * y)
    return nx, ny

Les deux nouvelles valeurs sont calculées à partir des anciennes. Mettre x à jour avant de calculer y avec la nouvelle valeur change la méthode et fausse la comparaison. Les solutions exactes sont périodiques, et la méthode d'Euler explicite les transforme en spirales qui s'écartent lentement, un défaut qui se réduit avec le pas.

Modèle épidémique SIR, S' = − β S I, I' = β S I − γ I, R' = γ I, où S, I et R sont les proportions de sensibles, d'infectés et de guéris. La somme S + I + R reste constante, et c'est un bon test de la programmation, puisque la méthode d'Euler la conserve exactement, aux arrondis près.

Équations d'ordre 2

Une équation d'ordre 2 se ramène à un système de deux équations d'ordre 1 en introduisant la dérivée comme nouvelle inconnue. Pour l'oscillateur amorti x'' + (ω₀ / Q) x' + ω₀² x = 0, on pose v = x', et on obtient x' = v, v' = − (ω₀ / Q) v − ω₀² x. On applique alors Euler au couple (x, v).

Pour un oscillateur non amorti, x'' + ω₀² x = 0, un pas d'Euler s'écrit xk+1 = xk + h vk et vk+1 = vk − h ω₀² xk. Un calcul direct montre que la quantité ω₀² x² + v², proportionnelle à l'énergie mécanique, est multipliée exactement par 1 + ω₀² h² à chaque pas. Elle croît donc géométriquement. La méthode d'Euler explicite fait croître l'énergie à chaque pas, la trajectoire dans le plan (x, v) spirale vers l'extérieur au lieu de rester sur une ellipse. C'est un défaut connu de la méthode, qu'on met en évidence en traçant l'énergie au cours du temps.

Système différentiel issu d'une cinétique chimique

Pour deux réactions successives A → B → C d'ordre 1, de constantes k₁ et k₂, on a [A]' = − k₁ [A], [B]' = k₁ [A] − k₂ [B], [C]' = k₂ [B]. Euler donne l'évolution des trois concentrations, et le maximum de [B] se lit sur la courbe. Le pas doit rester petit devant 1 / k₁ et 1 / k₂.

Méthodes

  • Écrire la récurrence yk+1 = yk + h f(tk, yk) avant le programme, et identifier f, t₀, tf, y₀ et n.
  • Vérifier le nombre de points, n + 1, et le dernier instant, tf.
  • Choisir un pas petit devant le plus petit temps caractéristique, puis le diviser par 2 ou par 10 pour vérifier que la courbe ne change plus.
  • Valider le programme sur un cas à solution exacte connue avant de l'utiliser sur un modèle sans solution explicite.
  • Pour un système, calculer toutes les pentes avec les anciennes valeurs avant toute mise à jour.
  • Pour une équation d'ordre 2, poser v = x' et se ramener à un système d'ordre 1.
  • Commenter une courbe obtenue en reliant son allure au pas choisi, retard, oscillations parasites, divergence.

Ce qu'il faut savoir refaire en khôlle

  1. Établir la relation de récurrence de la méthode d'Euler explicite à partir du taux d'accroissement, et l'interpréter géométriquement.
  2. Écrire la fonction euler prenant f en paramètre et l'appliquer au modèle logistique.
  3. Comparer la solution d'Euler à la solution exacte de y' = − y, et montrer que l'erreur est proportionnelle au pas.
  4. Montrer que pour y' = − a y, un pas tel que a h > 2 fait diverger la méthode.
  5. Présenter la méthode de Heun et expliquer pourquoi elle est d'ordre 2.
  6. Résoudre par Euler le système de Lotka-Volterra ou le modèle SIR, et ramener une équation d'ordre 2 à un système d'ordre 1.

Méthodes et exercices

Les résultats à connaître

En informatique, les « résultats » sont la correction des méthodes, leur coût et leur comportement quand le pas varie.

  • Récurrence d'Euler explicite yk+1 = yk + h f(tk, yk), avec tk = t₀ + k h et h = (tf − t₀)/n : attendu, à savoir établir.
  • n pas produisent n + 1 valeurs, de y₀ à yn, et le dernier instant vaut tf aux arrondis près : attendu.
  • Coût : n évaluations de f pour Euler, 2n pour Heun. Le temps de calcul est proportionnel à 1/h : attendu, à savoir justifier.
  • Si f ne dépend que de t, Euler coïncide avec la méthode des rectangles à gauche appliquée à ∫ f, et Heun avec la méthode des trapèzes : à savoir établir.
  • Pour y' = a y, Euler donne yk = (1 + a h)k y₀, une suite géométrique : à savoir établir.
  • Pour y' = − a y avec a > 0 : la suite décroît vers 0 sans changer de signe si a h < 1. Elle tend vers 0 en alternant si 1 < a h < 2. Elle ne tend pas vers 0 si a h ≥ 2 : à savoir démontrer.
  • Erreur globale d'Euler à peu près proportionnelle à h, méthode d'ordre 1 : admis en général, à illustrer numériquement. Le cas y' = a y se démontre (exercice 9).
  • Heun est d'ordre 2 : admis, à illustrer numériquement.
  • Une fonction de module comme odeint sert de référence. Aucune connaissance sur elle n'est exigible, sa documentation est fournie.
  • Système d'ordre 1 : toutes les pentes se calculent avec les valeurs de l'instant tk : thème libre, non exigible.
  • Équation d'ordre 2 ramenée à un système en posant v = x' : thème libre, non exigible.
  • Oscillateur non amorti : Euler multiplie ω₀² x² + v² par 1 + ω₀² h² à chaque pas : thème libre, démontrable par un calcul direct.
  • Programmation vectorisée : peut être proposée, n'est pas un attendu du programme.
  • Hors programme signalé : méthode d'Euler implicite, méthodes de Runge-Kutta d'ordre supérieur, pas adaptatif.

Clés de démonstration

Récurrence d'Euler. On intègre l'équation entre tk et tk+1, ce qui donne y(tk+1) = y(tk) + ∫ f(s, y(s)) ds. On approche l'intégrale par la valeur à gauche multipliée par h. L'astuce est ce point de vue intégral : il donne aussi Heun, qui remplace les rectangles par les trapèzes.

Stabilité de y' = − a y. La récurrence est géométrique de raison q = 1 − a h, donc yk = qk y₀. Elle tend vers 0 si et seulement si |q| < 1, c'est-à-dire 0 < a h < 2, et elle garde un signe constant si q ≥ 0. L'astuce est de tout ramener à la raison d'une suite géométrique.

Ordre 1 pour y' = a y. On écrit yn = y₀ exp(n ln(1 + a T/n)) avec T = tf − t₀, puis on développe le logarithme à l'ordre 2. L'astuce est le développement limité ln(1 + x) = x − x²/2 + o(x²), qui fait apparaître un terme en 1/n, donc en h.

Énergie de l'oscillateur. On développe ω₀² (x + h v)² + (v − h ω₀² x)². Les termes croisés 2 h ω₀² x v s'annulent, et il reste (1 + ω₀² h²)(ω₀² x² + v²). L'astuce est de repérer cette annulation avant de développer entièrement.

Conservation dans SIR. La somme des trois pentes est nulle en tout point. Un pas d'Euler ajoute h fois cette somme à S + I + R, donc ne la change pas. L'astuce vaut pour tout invariant linéaire : Euler le conserve exactement, aux arrondis près.

Exemples et contre-exemples à connaître

  1. Pour y' = y, y(0) = 1 sur [0, 1], Euler donne (1 + 1/n)n : 2 pour n = 1, 2,5937 pour n = 10, 2,7048 pour n = 100, contre e ≈ 2,7183. La méthode sous-estime, car la solution est convexe et la tangente passe sous la courbe.
  2. Pour y' = 2t, y(0) = 0, sur [0, 1], Euler donne exactement 1 − h au lieu de 1. C'est le cas où l'erreur est exactement proportionnelle au pas.
  3. Heun est exacte pour y' = 2t, car la méthode des trapèzes est exacte pour une fonction affine.
  4. Pour y' = − a y, le choix a h = 1 donne y₁ = 0, puis yk = 0 pour tout k ≥ 1. Le choix a h = 2 donne y₀, − y₀, y₀… sans amortissement.
  5. Pour le modèle logistique avec 1 < r h < 2, la suite d'Euler dépasse K puis oscille autour. Or la vraie solution ne franchit jamais K quand N₀ < K. Avec r h juste au-dessus de 2, elle alterne entre deux valeurs.
  6. Pour y' = y², y(0) = 1, la solution exacte 1/(1 − t) explose en t = 1. Euler sur [0, 2] ne le signale pas : valeur finie absurde, de l'ordre de 10¹⁰⁴, avec h = 0,1, ou inf par dépassement de capacité avec h = 0,01, sans message si f calcule y * y. Il faut connaître le modèle avant de faire confiance au calcul.
  7. Pour l'oscillateur non amorti avec ω₀ = 1 et h = 0,1, l'énergie double en 70 pas environ, soit un peu plus d'une période. La trajectoire en spirale n'est pas physique.
  8. Dans SIR, S + I + R reste constant avec une mise à jour simultanée. Une dérive de cette somme signale une erreur de programmation.
  9. odeint attend une fonction de (y, t). Lui passer la fonction f(t, y) écrite pour Euler échange les rôles de t et de y. En général, aucun message n'apparaît et le résultat est faux. Avec f(t, y) = − y, odeint résout en fait y' = − t.

Techniques du chapitre

Technique 1, mettre l'équation sous forme résolue. Mini-exercice : circuit RC, R C u' + u = E. On isole u' : f(t, u) = (E − u)/(R C). Le temps caractéristique est τ = R C, le pas se choisit devant τ.

Technique 2, faire deux pas à la main. Mini-exercice : y' = t − y, y(0) = 1, h = 0,5. y₁ = 1 + 0,5 × (0 − 1) = 0,5, puis y₂ = 0,5 + 0,5 × (0,5 − 0,5) = 0,5. La solution exacte t − 1 + 2 e−t vaut 0,7358 en t = 1. Ce calcul sert de test pour le programme.

Technique 3, choisir le pas à partir des temps caractéristiques. Mini-exercice : réactions A → B → C avec k₁ = 0,2 s⁻¹ et k₂ = 5 s⁻¹, sur 30 s. Le plus petit temps est 1/k₂ = 0,2 s. On prend h ≤ 0,02 s, donc n ≥ 1 500.

Technique 4, mesurer l'ordre par le rapport des erreurs. Mini-exercice : pour y' = − y sur [0, 1], l'erreur finale vaut 0,0192 avec n = 10 et 0,0094 avec n = 20. Le rapport est proche de 2, donc l'ordre est 1. Pour Heun, on trouve un rapport proche de 4, donc l'ordre est 2.

Technique 5, compter les évaluations de f. Mini-exercice : Euler à 1 000 pas contre Heun à 100 pas. Le coût est de 1 000 évaluations contre 200. Pour y' = − y, les erreurs sont d'environ 1,8 × 10⁻⁴ et 6 × 10⁻⁶. Heun gagne sur les deux plans.

Technique 6, calculer les pentes avant de mettre à jour. Mini-exercice : pour x' = − y et y' = x, on écrit dx = -y et dy = x, puis x = x + h * dx et y = y + h * dy. Les deux pentes utilisent bien les valeurs de tk.

Technique 7, tester sur une équation qui dépend de t. Mini-exercice : un programme qui évalue f au mauvais instant donne le bon résultat sur y' = − y, car f n'y dépend pas de t. Sur y' = 2t avec n = 2, on doit trouver 0,5. Une évaluation en tk+1 donne 1,5.

Exercices classiques corrigés

Choisis ton niveau. Difficulté indicative ; les exercices qui se suivent restent dans l'ordre.

Exercice 1

Classiques de khôlle et concours · Khôlle

Écrire une fonction qui renvoie seulement yn, l'approximation de y(tf), sans construire de liste. L'utiliser pour y' = − y sur [0, 1] avec n = 10, 100 et 1 000.

Technique boucle d'accumulation, instant recalculé à chaque tour.

Voir le corrigé
  1. Idée : une seule variable y suffit. L'instant tk se recalcule par t₀ + k h, ce qui évite d'accumuler les arrondis de h.
  2. Code :
def euler_final(f, t0, tf, y0, n):
    # renvoie y_n, approximation de y(tf)
    h = (tf - t0) / n
    y = y0
    for k in range(n):
        t = t0 + k * h
        y = y + h * f(t, y)
    return y
  1. Résultats : 0,9¹⁰ ≈ 0,3487, 0,99¹⁰⁰ ≈ 0,3660, 0,999¹⁰⁰⁰ ≈ 0,3677. Les erreurs sont 0,019, 0,0018 et 0,00018.
  2. Coût : n évaluations de f, et une mémoire constante au lieu de n + 1 valeurs.

piège : Calculer t = t0 + (k + 1) * h avant la mise à jour. Le test sur y' = − y ne le détecte pas (technique 7).

Exercice 2

Classiques de khôlle et concours · Khôlle

Pour y' = − 10 y, y(0) = 1, sur [0, 1] avec n pas, donner le plus petit n pour lequel la suite tend vers 0, puis le plus petit n pour lequel elle reste positive et décroissante.

Technique raison d'une suite géométrique.

Voir le corrigé
  1. On a h = 1/n et yk = (1 − 10/n)k.
  2. La suite tend vers 0 si et seulement si 10/n < 2, donc n > 5. Le plus petit n est 6. Pour n = 5, la raison vaut − 1 et la suite alterne entre 1 et − 1.
  3. Elle reste strictement positive et décroissante si 10/n < 1, donc n ≥ 11. Pour n = 10, la raison est nulle et yk = 0 dès k = 1, ce qui est très grossier.
  4. En pratique, on prend h ≤ 0,01, soit n ≥ 100, pour une courbe fidèle.

piège : Confondre « ne diverge pas » et « est précise ». La condition a h < 2 n'assure que la stabilité, pas la qualité.

Exercice 3

Classiques de khôlle et concours · Khôlle

Pour y' = 2t, y(0) = 0, sur [0, 1], calculer exactement le résultat d'Euler avec n pas, puis celui de Heun.

Technique lien avec les méthodes d'intégration.

Voir le corrigé
  1. Euler : yn = h × Σ 2 k h pour k de 0 à n − 1, soit 2 h² × n(n − 1)/2 = (n − 1)/n = 1 − h.
  2. L'erreur vaut exactement h. Elle est bien proportionnelle au pas.
  3. Heun : chaque pas ajoute (h/2)(2 tk + 2 tk+1), l'aire exacte du trapèze sous une droite. La somme vaut exactement 1.
  4. Conclusion : sur ce test, un résultat différent de 1 − h signale un programme d'Euler faux.

piège : Sommer jusqu'à k = n, ce qui revient à utiliser les rectangles à droite et donne 1 + h.

Exercice 4

Classiques de khôlle et concours · Type écrit Agro-Véto

Modèle logistique : renvoyer le plus grand écart entre la solution d'Euler et la solution exacte sur [0, T], pour n pas.

Technique comparaison point par point avec la solution exacte.

Voir le corrigé
  1. Idée : à chaque tour, on calcule Nk et la valeur exacte au même instant k h, puis on met à jour le maximum de l'écart en valeur absolue.
  2. Code :
from math import exp

def ecart_logistique(r, K, N0, T, n):
    h = T / n
    N = N0
    emax = 0
    for k in range(1, n + 1):
        N = N + h * r * N * (1 - N / K)
        e = N - K / (1 + (K / N0 - 1) * exp(-r * k * h))
        if e < 0:
            e = -e
        if e > emax:
            emax = e
    return emax
  1. Test attendu : en doublant n, emax est à peu près divisé par 2.
  2. Avec r h entre 1 et 2, Nk dépasse K et emax devient grand. L'allure en S est perdue.

piège : Comparer Nk avec la valeur exacte en (k + 1) h, par un décalage d'indice. L'écart reste proportionnel à h, donc le test du doublement ne voit rien. Mais il est gonflé d'environ h fois la pente, jusqu'à h r K/4 au point d'inflexion. Il faut vérifier que les deux valeurs sont prises au même instant k h.

Exercice 5

Classiques de khôlle et concours · Khôlle

Programmer la méthode de Heun avec deux évaluations de f par pas, et vérifier son ordre sur y' = − y.

Technique prédiction puis correction.

Voir le corrigé
  1. Idée : on calcule la pente au départ, on prédit le point d'arrivée par Euler, on calcule la pente à l'arrivée, puis on avance avec la moyenne.
  2. Code :
def heun(f, t0, tf, y0, n):
    h = (tf - t0) / n
    t = [t0]
    y = [y0]
    for k in range(n):
        p1 = f(t[k], y[k])
        p2 = f(t[k] + h, y[k] + h * p1)
        y.append(y[k] + h / 2 * (p1 + p2))
        t.append(t[k] + h)
    return t, y
  1. Pour y' = − y, un pas multiplie y par 1 − h + h²/2, qui reproduit les trois premiers termes de e−h.
  2. Erreurs finales : environ 6,6 × 10⁻⁴ pour n = 10 et 1,6 × 10⁻⁴ pour n = 20. Le rapport est proche de 4, donc l'ordre est 2.

piège : Faire la moyenne des deux valeurs prédites au lieu des deux pentes, ou appeler f trois fois par pas.

Exercice 6

Classiques de khôlle et concours · Type oral G2E, thème libre

Modèle SIR avec β = 0,5 et γ = 0,1 par jour, S₀ = 0,99, I₀ = 0,01. Renvoyer le pic d'infectés et sa date.

Technique mise à jour simultanée et suivi d'un maximum.

Voir le corrigé
  1. Idée : on calcule les deux pentes avec les anciennes valeurs, puis on met à jour. R se déduit de R = 1 − S − I.
  2. Code :
def sir_pic(beta, gamma, S0, I0, T, n):
    h = T / n
    S = S0
    I = I0
    imax = I0
    tmax = 0
    for k in range(1, n + 1):
        dS = -beta * S * I
        dI = beta * S * I - gamma * I
        S = S + h * dS
        I = I + h * dI
        if I > imax:
            imax = I
            tmax = k * h
    return imax, tmax
  1. Contrôle : le pic a lieu quand I' = 0, donc quand S = γ/β = 0,2. On le vérifie sur la valeur de S au pic.
  2. On admet qu'une intégrale première donne un pic exact d'environ 0,48. Avec h = 0,1 jour, on doit en être proche.

piège : Mettre S à jour puis calculer dI avec le nouveau S. Le pic est décalé, et la somme S + I + R n'est plus conservée.

Exercice 7

Classiques de khôlle et concours · Khôlle, thème libre

Oscillateur non amorti x'' + ω₀² x = 0 avec ω₀ = 1 rad/s et h = 0,1 s. Au bout de combien de pas l'énergie d'Euler a-t-elle doublé ?

Technique se ramener à un système, puis facteur géométrique.

Voir le corrigé
  1. On pose v = x'. Un pas donne xk+1 = xk + h vk et vk+1 = vk − h ω₀² xk.
  2. La quantité E = ω₀² x² + v² est multipliée par 1 + ω₀² h² = 1,01 à chaque pas (section 2).
  3. On résout 1,01k ≥ 2, soit k ≥ ln 2 / ln 1,01 ≈ 69,7. Il faut 70 pas, soit 7 s.
  4. La période vaut 2π ≈ 6,3 s. L'énergie double donc en un peu plus d'une oscillation.

piège : Conclure qu'il suffit de réduire h. Le facteur reste supérieur à 1 pour tout h > 0, et le défaut ne fait que ralentir.

Exercice 8

Classiques de khôlle et concours · Type écrit Agro-Véto, thème libre

Réactions A → B → C avec k₁ = 0,5 min⁻¹ et k₂ = 20 min⁻¹, simulées sur 10 min. Choisir le pas.

Technique temps caractéristiques et stabilité.

Voir le corrigé
  1. L'équation de B s'écrit Bk+1 = (1 − k₂ h) Bk + h k₁ Ak. Le facteur 1 − k₂ h gouverne la stabilité.
  2. Il faut k₂ h < 2, soit h < 0,1 min, sinon B oscille en s'amplifiant. Sans oscillation parasite, il faut h < 0,05 min.
  3. Le maximum de B a lieu en t = ln(k₁/k₂)/(k₁ − k₂) = ln(0,025)/(− 19,5) ≈ 0,19 min. Pour le situer à 1 % près, il faut h de l'ordre de 0,002 min, soit 5 000 pas.
  4. C'est la constante rapide qui impose le pas, alors que A évolue lentement sur toute la durée.

piège : Régler le pas sur la durée totale ou sur 1/k₁. Avec h = 0,2 min, la courbe de B diverge.

Exercice 9

Approfondissement · Type écrit Mines-Ponts BCPST, partie mathématique

Pour y' = a y, avec a réel non nul et y₀ ≠ 0, sur [0, T], montrer que yn tend vers y₀ eaT et donner un équivalent de l'erreur.

Technique développement limité du logarithme.

Voir le corrigé
  1. On a yn = y₀ (1 + a T/n)n. Pour n assez grand, 1 + a T/n > 0, donc yn = y₀ exp(n ln(1 + a T/n)).
  2. Avec ln(1 + x) = x − x²/2 + o(x²), il vient n ln(1 + a T/n) = a T − a² T²/(2n) + o(1/n).
  3. Donc yn = y₀ eaT (1 − a² T²/(2n) + o(1/n)). La limite est bien la valeur exacte.
  4. L'erreur y(T) − yn est équivalente à y₀ eaT a² T²/(2n), c'est-à-dire à y₀ eaT a² T h/2. Elle est proportionnelle à h, d'où l'ordre 1.
  5. Vérification : pour a = − 1, T = 1, n = 10, la formule donne 0,0184, contre 0,0192 mesuré.

piège : Oublier la condition 1 + a T/n > 0 quand a < 0. Le logarithme n'est défini qu'à partir d'un certain rang.

Erreurs fréquentes

  1. Évaluer f au mauvais instant ou mettre à jour t avant y. Tester sur une équation qui dépend de t, comme y' = 2t.
  2. Choisir le pas sans regarder les temps caractéristiques, puis commenter comme physique une oscillation ou une divergence due au seul pas.
  3. Dans un système, utiliser une valeur déjà mise à jour pour calculer une autre pente. Calculer toutes les pentes d'abord.
  4. Confondre stabilité et précision. a h < 2 évite la divergence, mais il faut un pas bien plus petit pour une courbe fidèle.
  5. Affirmer l'ordre d'une méthode sans le mesurer. Diviser le pas par 2 et comparer les erreurs finales : un rapport proche de 2 indique l'ordre 1, un rapport proche de 4 l'ordre 2.

Fiche de cours rédigée à partir du programme officiel d'informatique de BCPST (2021), programme des semestres 3 et 4, partie 3.1 « Méthodes numériques et statistiques », thème « Méthode d'Euler explicite pour la résolution approchée d'équation différentielle ordinaire d'ordre 1 », avec les activités proposées par le programme, modèle logistique, comparaison avec d'autres méthodes comme celle de Heun, impact du pas de discrétisation sur la qualité des résultats et sur le temps de calcul, comparaison avec une résolution exacte ou avec une fonction de résolution fournie par un module. Elle traite aussi le thème libre « Complément sur la méthode d'Euler », systèmes différentiels d'ordre 1 et équations d'ordre 2, qui n'est pas un attendu exigible. Une programmation vectorisée n'est pas attendue.