Académique Documents
Professionnel Documents
Culture Documents
1
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='--',marker='*',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()
Le programme fourni permet de tracer la solution approchée par la méthode d’Euler explicite du
problème de Cauchy ci-desus en considérant une subdivion de l’intervalle [0,2] en 10 sous-intervalles
(N=10).
2. Programmer la solution exacte, puis calculer l’erreur d’approximation;
2
3. Tracer les deux solutions sur la même figure;
[7]: N=1000
t=np.linspace(t0,T,N+1)
ue = solext(t)
plt.plot(t,ue,color='b',ls=':',label="solution exacte")
for N in range(10,1001,100):
h=T/N
t,u=SchemaExp(fonct,u0,t0,T,N)
if N < 100:
plt.plot(t,u,color='k',label="N="+str(N))
plt.xlabel('time')
plt.ylabel('solution u')
plt.title('Solution approchee par Euler explicite')
plt.legend()
plt.show()
3
5. Tracer la courbe du log des erreurs d’approximation en fonction du log des pas h;
[8]: list_err=[]
list_h=[]
for N in range(10,1001,10):
h=T/N
list_h.append(h)
t,u=SchemaExp(fonct,u0,t0,T,N)
ue = solext(t)
er=np.linalg.norm(abs(ue-u),ord=np.inf)
list_err.append(er)
#
plt.loglog(list_h,list_err,color='k',label="Erreur")
plt.xlabel('h')
plt.ylabel('Erreur')
plt.title('Erreur en fonction de h')
plt.legend()
plt.show()
4
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.01003568 -1.41156624]
La droite de regression est une droite de pente 1. On retrouve ainsi que la méthode d’Euler explicite
est une méthode d’ordre 1.
5
u[0]=u0
for i in range(N):
uu=u[i]+0.5*h*f(t[i],u[i])
u[i+1]=u[i]+h*f(t[i]+0.5*h,uu)
return t,u
2. Tracer les deux solutions approchées (Euler explicite et point milieu) et la solution exacte sur
la même figure
6
3. Déterminer numériquement l’ordre de la méthode d’Euler point milieu.
[14]: list_err=[]
list_h=[]
for N in range(50,1001,10):
h=T/N
list_h.append(h)
t,u=EulerPointMilieu(fonct,u0,t0,T,N)
ue = solext(t)
er=np.linalg.norm(abs(ue-u),ord=np.inf)
list_err.append(er)
#
plt.loglog(list_h,list_err,color='k',label="Erreur")
plt.xlabel('h en log')
plt.ylabel('Erreur en log')
plt.title('Erreur en fonction de h de la méthode Euler Point Milieu')
plt.legend()
plt.show()
[ 2.05365172 -3.6983164 ]
On retrouve numériquement que l’ordre de la méthode d’Euler Point Milieu est donc 2.