TP-EDO
TP-EDO
TP-EDO
TP 2 METHODES NUMERIQUES
POUR INGENIEUR 2 2024-2025
y(0) = y0 .
Elle consiste, pour un pas h donné, à construire une suite d’approximations (yn ) de la solution
y aux temps tn = nh, par la formule
yn+1 = yn + hf (tn , yn ).
Par la suite, on utilise l’exemple modèle y 0 = t − ty avec la condition initiale y(0) = 2. La
−t2
solution exacte de cet exemple est donnée par y(t) = 1 + e 2 .
A la fin de cette série de TP vous trouvez le programme principal, le programme du schéma
d’Euler explicite et le programme de la fonction f .
1. Tester le programme et interpréter la figure affichée
2. Programmer la solution exacte, puis calculer l’erreur d’approximation;
3. Tracer les deux solutions sur la même figure;
4. Effectuer des simulations pour différentes valeurs du pas h (h = T /N avec N = 10 : 10 :
1000);
5. Tracer la courbe du log des erreurs d’approximation en fonction du log des pas h;
6. Quel est l’ordre obtenue numériquement du schéma d’Euler explicite.
L’ordre numérique est la pente de la droite de la régression linéaire des points.
1
ENSAM-MEKNES 3 EME ANNEE
TP 2 METHODES NUMERIQUES
POUR INGENIEUR 2 2024-2025
π 0
(c) On prend pour conditions initiales θ(0) = et θ (0) = 0. L’hypothèse des petits
2
mouvements n’est pas réalisée, et l’équation linéarisée donnera des résultats large-
ment entachés d’erreur.
2
ENSAM-MEKNES 3 EME ANNEE
TP 2 METHODES NUMERIQUES
POUR INGENIEUR 2 2024-2025
(a) Définir une fonction RungeKutta qui résout le problème de Cauchy par le schéma de
Runge-Kutta. La fonction a le même prototype que EulerExp.
3
ENSAM-MEKNES 3 EME ANNEE
TP 2 METHODES NUMERIQUES
POUR INGENIEUR 2 2024-2025
(a) Résolvez le problème en utilisant le solveur odeint, pour t ∈ [0, 4], avec les conditions
initiales définies précédemment.
(b) Tracez les valeurs de θ(t) calculées.
(c) Comparez avec les tracés précédents.
4
ENSAM-MEKNES 3 EME ANNEE
TP 2 METHODES NUMERIQUES
POUR INGENIEUR 2 2024-2025
________________________________
# Programme principal
import numpy as np
import matplotlib.pyplot as plt
T=2.
t0=0
u0=2.
N=10
h=T/N
t,u=SchemaExp(fonct,u0,t0,T,N)
# ue = solext(t) # doit etre programme
# er=np.linalg.norm((ue-u),ord=np.inf)
plt.plot(t,u,color=’k’,ls=’--’,label="solution approchée")
# plt.plot(t,ue,color=’b’,ls=’:’,label="solution exacte")
plt.xlabel(’time’)
plt.ylabel(’solution u’)
plt.title(’Solution approchee par Euler explicite’)
plt.legend()
plt.show()
________________________________
________________________________
#Schema Euler Explicite : fonction "SchemaExp"
#
def SchemaExp(f,u0,t0,T,N):
h=T/N
t=np.linspace(t0,T,N+1)
u=np.zeros(N+1)
u[0]=u0
for i in range(N):
u[i+1]=u[i]+h*f(t[i],u[i])
return t,u
______________________
________________________________
#programme de la fonction f
#
def fonct(t,u):
return t-t*u
________________________________
________________________________
# Calcul de l’ordre numerique
# lh = liste des pas
# ler : liste des erreurs correspondantes à lh
print(np.polyfit(lh,ler,1))
________________________________