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='o',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;
[89]: 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,10):
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;
[90]: 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
[93]: T=2.
t0=0
u0=2.
N=10
h=T/N
t1,u1=SchemaExp(fonct,u0,t0,T,N)
ue = solext(t1)
t2,u2=EulerPointMilieu(fonct,u0,t0,T,N)
plt.plot(t1,u1,color='k',ls='--',label="Euler Explicite")
plt.plot(t1,ue,color='b',ls=':',marker='o',label="solution exacte")
plt.plot(t1,ue,color='r',ls='-',label="Euler Point Milieu")
plt.xlabel('time')
plt.ylabel('solution u')
plt.title('Solution approchee par Euler explicite et Euler Point Milieu')
plt.legend()
plt.show()
6
[94]: list_err=[]
list_h=[]
for N in range(10,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')
plt.ylabel('Erreur')
plt.title('Erreur en fonction de h de la méthode Euler Point Milieu')
plt.legend()
plt.show()
[ 2.01415484 -2.90323587]
On retrouve numériquement que l’ordre de la méthode d’Euler Point Milieu est donc 2.