>
>
>
>
>
>
>
>
Méthode d'Euler
Solution approchée versus solution exacte
with(plots):
# Procédure graphe_sol_approchee retournant le graphe de la solution donnée par la méthode d'Euler
# argument a: fonction a apparaissant dans l'EDL1
# argument t0,T: intervalle d'étude [ t0 , t0 + T ]
# argument y_t0: valeur initiale en t0
# argument N: nombre de pas - 1 de la méthode
graphe_sol_approchee := proc( a , t0 , T , y_t0 , N ) local k , pas , y , t , pente , liste_points;
pas := T/N ; t:=t0;
y:=y_t0;
liste_points:=[[t0,y_t0]];
for k from 1 to N do pente := -a(t)*y ; t:=t+pas;
y:=pente*pas+y;
liste_points:=[op(liste_points),[t,y]];
od ;
return(plot(liste_points,linestyle=solid,color=red));
end proc:
# Procédure graphe_sol_exacte retournant le graphe de la solution exacte
# argument a: fonction a apparaissant dans l'EDL1
# argument t0,T: intervalle d'étude [ t0 , t0 + T ]
# argument y_t0: valeur initiale en t0
graphe_sol_exacte := proc( a , t0 , T , y_t0) local solution ;
solution:=dsolve({diff(y(t),t)+a(t)*y(t)=0,y(t0)=y_t0});
return(plot(rhs(Solution),t=t0..t0+T,color=blue,linestyle=dash) );end proc:
# Procédure affiche affichant les graphes de la solution exacte et de la valeur approchée
# argument a: fonction a apparaissant dans l'EDL1
# argument t0,T: intervalle d'étude [ t0 , t0 + T ]
# argument y_t0: valeur initiale en t0
# argument N: nombre de pas - 1 de la méthode affiche := proc( a , t0 , T , y_t0 , N )
display(graphe_sol_approchee( a , t0 , T , y_t0 , N ),graphe_sol_exacte( a , t0 , T , y_t0));
end proc:
>
>
>
>
>
>
>
>
affiche(t->t,0,10,1,5);
t
2 4 6 8 10
0 1000 2000 3000
affiche(t->t,0,10,1,20);
t
0 2 4 6 8 10
0 0.2 0.4 0.6 0.8 1
affiche(t->t,0,10,1,50);
t
0 2 4 6 8 10
0 0.2 0.4 0.6 0.8 1