Livre étudiant – Modélisation numérique du point de bascule
Exercice 2
Solution d'une équation différentielle en fonction des conditions initiales
On considère l'équation différentielle \( \dot{u} = f(u) \) , pour la fonction \(f\) et le potentiel \(V\) associé suivants :
$$ f(u) = -u(1-4u)(1-u) = -u + 5u^2 -4u^3,\quad V(u) = \frac{1}{2}u^2 - \frac{5}{3}u^3 +u^4 + C. $$1.En utilisation le code Python donné dans l'exercice 1 préliminaire, tracer dans un même repère, l'allure de la fonction \(f\) et du potentiel \(V\) associé (à nouveau on choisira la constante \(C\) pour éviter que les deux graphes ne se recouvrent). Quels sont les équilibres stables/instables ?
2.En complétant le script méthode d'Euler donné ci-dessous, tracer en Python le graphe de la solution \(t\mapsto u(t)\) associée à la condition initiale \(u(t=0) = u_0\), pour chacune des valeurs de \(u_0\) suivantes (les solutions sont à tracer dans un même repére \((t,u)\) avec \(0\le t \le 10\) et \(-0,5\le u \le 1,5\)) prenant les 7 valeurs :
$$u_0\in\{-0.5,0,0.24,0.25,0.26,1,1.5\}$$
(On pourra faire une liste contenant tous les \(u_0\), et une boucle for qui va piocher dans cette liste).
Syntaxe du label pour qu'il dépende de la valeur de \(u_0\) : `plt.plot(t,y,label = f"solution u pour u_0 ={u_0}");
# Script Euler donné
import matplotlib.pyplot as plt
import numpy as np
# Methode d'Euler pour 1 seule condition initiale
def f(u):
return # entrer ici la fonction f
a,b = # entrer l'intervalle de résolution
u_0 = # entrer plusieurs conditions initiales
n = # nombre de points de l'échantillon voulu
t = np.ones(n) * a # initialisation de t de taille n , de type array
y = np.ones(n) * u_0 # condition initiale
h = # à compléter : le pas de la subdivision
for k in range(1,n): # range va de 1 à n-1
t[k] = # a compléter
y[k] = # a compléter
plt.plot(t,y,label ="solution u pour u_0 ={u_0}");
plt.xlabel("t (temps)");
plt.ylabel("u (population de morues)")
plt.legend();
# si vous voulez afficher plusieurs conditions initiales, on peut utiliser une liste :
# valeurs_u_0 = {-0.5,0,0.24,0.25,0.26,1,1.5}
# puis une boucle for
# for u_0 in valeurs_u_0:
3.Les allures des graphes de ces solutions correspondent-elles à ce à quoi vous pouviez vous attendre ?