Problème — Une épidémie dans un lycée
Exercice de TD · niveau 3 (difficile) · mathématiques complémentaires (terminale), chapitre 6 — Primitives et équations différentielles
Énoncé
Problème — Une épidémie dans un lycée.
Un lycée compte élèves. Le jour , élèves sont grippés. Tant que la maladie est rare, chaque malade en contamine d'autres à un rythme constant, et l'on peut poser .
- Résoudre ce premier modèle, puis calculer le nombre de malades prévus aux jours et . Que faut-il en penser ?
- Pour corriger le modèle, on tient compte de ce qu'un malade ne peut contaminer que des élèves encore sains. On obtient l'équation logistique
Vérifier que les deux modèles donnent presque la même vitesse au jour , et expliquer pourquoi le second finit par s'en écarter.
- Programmer la méthode d'Euler pour ce second modèle et donner le nombre de malades aux jours et , pour plusieurs pas.
- Vérifier que est solution, et l'utiliser pour contrôler les résultats numériques.
- À quel moment le nombre de nouveaux malades par jour est-il le plus grand ? Quelle est alors la proportion d'élèves atteints ?
- Que conseiller au proviseur ?
Corrigé
- Le modèle exponentiel. avec donne , d'où
La seconde valeur est absurde : le lycée ne compte que élèves. Le modèle dépasse d'ailleurs cet effectif dès jours. Un modèle n'est valable que dans son domaine, et celui-ci cesse de l'être dès que la maladie n'est plus rare.
- Ce que corrige le facteur. Au jour , est négligeable devant : le facteur correctif vaut , et les deux modèles donnent la même vitesse initiale, environ élèves par jour. Mais le facteur diminue à mesure que la maladie se répand, car il ne reste plus grand monde à contaminer ; il s'annule quand tout le monde est atteint. La croissance s'étouffe donc d'elle-même — ce que le premier modèle ignore.
- Euler.
def euler(f, t0, y0, h, n):
t, y = t0, y0
points = [(t, y)]
for _ in range(n):
y = y + h * f(t, y)
t = t + h
points.append((t, y))
return points
grippe = lambda t, y: 0.45 * y * (1 - y / 1200)
for h in (0.5, 0.25, 0.1, 0.01):
points = euler(grippe, 0, 5, h, round(20 / h))
print(h, round(points[round(10 / h)][1], 1), round(points[-1][1], 1))
# 0.5 -> 241.8 1157.2
# 0.25 -> 280.9 1161.8
# 0.1 -> 308.3 1164.1
# 0.01 -> 326.2 1165.5
Les valeurs se stabilisent lentement : au jour , on retiendra environ malades — et surtout pas les du pas le plus grossier. Au jour , tous les pas s'accordent sur environ : le résultat est alors robuste.
- Contrôle par la formule. Posons , de sorte que et . Alors
tandis que , donc
C'est bien la même expression, et . Cette formule donne et : les valeurs d'Euler au pas en sont à moins de .
- Le pic de nouveaux cas. Le nombre de nouveaux malades par jour est , c'est-à-dire . Lue comme fonction de , cette quantité est un trinôme de racines et : il est maximal au milieu, pour , soit la moitié des élèves. Cela se produit lorsque , c'est-à-dire
et le pic vaut alors nouveaux cas par jour.
- Conseil. Rien ne sert d'agir au jour : à cette date, la moitié du lycée est déjà touchée et l'épidémie s'éteindra d'elle-même faute de proies. Tout se joue avant le douzième jour, quand les effectifs paraissent encore dérisoires — c'est précisément là que la croissance est la plus proche de l'exponentielle, donc la plus trompeuse.
Le modèle logistique n'est pas une connaissance exigible : il n'apparaît ici que comme contexte. Tout ce qui a été demandé relève, lui, du programme — vérifier qu'une fonction est solution, dériver un quotient, et faire tourner la méthode d'Euler.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.