KM02_3.mw

> restart;

> fact:=2:N_0:=16:    

On calcule differentes séries de valeurs approchées avec N croissant suivant une suite géométrique de raison fact de premier terme N_0

>

Approximations successives pour y'=y

On étudie les équations différentielles sur l'intervalle [t_0,t_max]

ici  [t_0,t_max]=[0,5]

> t_0:=0:t_max:=5:y_0:=1:f:=(t,y)->y:

la condition initiale est donnée par y(t_0)=y_0

ici y(0)=1

l'Equation différentielle de référence est

> EDO:=diff(y(t),t)=f(t,y(t));

EDO := diff(y(t), t) = y(t)

>

> On place dans la variable Courbes:

> 5 courbes intégrales approchées calculées pour N prenant les 5 premières valeurs de la suite géométrique annoncée ci-dessus: 16, 32, 64, 128, 256

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))),i=0..4):

>

On trace ces différentes courbes en prenant les couleurs successives bleu, rouge, noir, vert, orange (pour N croissant)

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

On observe que la précision des courbes intégrales augmente au fur et à mesure que N augmente

Par manque de capacité, sans doute, le tracé de la dernière courbe correspondant à N=256 "s'arrête" avant t_max

Approximations successives pour y'=-ty

On étudie les équations différentielles sur l'intervalle [t_0,t_max]

ici  [t_0,t_max]=[0,1]

> t_0:=0:t_max:=1:y_0:=1:f:=(t,y)->-y*t:

la condition initiale est donnée par y(t_0)=y_0

ici y(0)=1

l'Equation différentielle de référence est

> EDO:=diff(y(t),t)=f(t,y(t));

EDO := diff(y(t), t) = -y(t)*t

> On place dans la variable Courbes:

> 5 courbes intégrales approchées calculées pour N prenant les 5 premières valeurs de la suite géométrique annoncée ci-dessus: 16, 32, 64, 128, 256

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))),i=0..4):

>

>

On trace ces différentes courbes en prenant les couleurs successives bleu, rouge, noir, vert, orange (pour N croissant)

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

>

>

>

>

Approximations successives pour y'=1/racine(t+10^-9)

On étudie les équations différentielles sur l'intervalle [t_0,t_max]

ici [t_0,t_max]=[0,0.001]

> t_0:=0:t_max:=.001:y_0:=1:f:=(t,y)->1/sqrt(t+0.000000001):

la condition initiale est donnée par y(t_0)=y_0

ici y(0)=1

l'Equation différentielle de référence est

> EDO:=diff(y(t),t)=f(t,y(t));

EDO := diff(y(t), t) = 1/(t+0.1e-8)^(1/2)

> On place dans la variable Courbes:

> 5 courbes intégrales approchées calculées pour N prenant les 5 premières valeurs de la suite géométrique annoncée ci-dessus: 16, 32, 64, 128, 256

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[1],Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[2]),i=0..4):

>

On trace ces différentes courbes en prenant les couleurs successives bleu, rouge, noir, vert, orange (pour N croissant)

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

ici on observe que l'approximation est mauvaise pour des petites valeurs de N et meilleure pour N grand, est-elle pour autant assez fine.

En fait l'approximation d'Euler est mise à rude épreuve puisque pour t=0 la tangente de la solution exacte est quasi verticale et donc l'identification entre corde et tangente est d'autant moins bonne.

>

Faisons un "Zoom" sur ces courbes...

On travaille cette fois-ci sur l'intervalle [t_0,t_max]=[0,0.00001]

> t_max:=.00001:

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[1],Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[2]),i=0..4):

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

>

> Malgre la finesse de la subdivision (on o maillé un trés petit intervalle avec N instants), les variations entre les différentes approximations restent élèvées
En effet la solution a une tangente quasi verticale à l'origine ce qui entraine par la méthode d'Euler de
grandes déviations dans le calcul des valeurs voisines

Approximations successives pour y'=sin[1/(t+10^-9)]

On étudie les équations différentielles sur l'intervalle [t_0,t_max]

ici [t_0,t_max]=[0,1]

> t_0:=0:t_max:=1:y_0:=1:f:=(t,y)->sin(1/(t+0.000000001)):

la condition initiale est donnée par y(t_0)=y_0

ici y(0)=1

l'Equation différentielle de référence est

> EDO:=diff(y(t),t)=f(t,y(t));

EDO := diff(y(t), t) = sin(1/(t+0.1e-8))

> On place dans la variable Courbes:

> 5 courbes intégrales approchées calculées pour N prenant les 5 premières valeurs de la suite géométrique annoncée ci-dessus: 32, 64, 128, 256,1024

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[1],Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[2]),i=1..5):

>

On trace ces différentes courbes en prenant les couleurs successives bleu, rouge, noir, vert, orange (pour N croissant)

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

>

les courbes à grande échelle semblent assez proches les unes des autres et donc probablement assez fidéles à la solution exacte.

Regardons les courbes sur une plus petite echelle, ce qui doit encore ameliorer la justesse du résultat

Faisons un "Zoom" sur ces courbes...

On travaille cette fois-ci sur l'intervalle [t_0,t_max]=[0,0.1]

> t_max:=.1:

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[1],Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[2]),i=0..4):

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

les courbes semblent ici bien plus chaotiques et peu proches les unes des autres

Regardons à plus petite échelle

Faisons un "Zoom" sur ces courbes...

On travaille cette fois-ci sur l'intervalle [t_0,t_max]=[0,0.0001]

> t_max:=.0001:

> Courbes:=seq(Interpol(Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[1],Euler(f,t_0,y_0,N_0*fact^i,(t_max-t_0)/(N_0*fact^i))[2]),i=0..4):

> plot([Courbes],t_0..t_max,color=[blue,red,black,green,orange]);

[Plot]

Ici la fonction sin(1/t) fluctue énormément au voisinage de 0, ce qui explique que pour des petites valeurs (malgré un maillage plus fin) l'approximation est moins fidèle