7.10 Quelques exemples
249
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
Figure 7.18. Trajectoires obtenues avec la méthode d’Euler implicite pour
h = 0.00125 (à gauche), et avec la méthode de Crank-Nicolson pour h = 0.025
(à droite)
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
−2
−1
0
1
2
−2
−1
0
1
2
−2.5
−2
−1.5
−1
−0.5
0
0.5
y 1
y 2
y
3
Figure 7.19. Trajectoires obtenues avec les méthodes ode23 (à gauche) et
ode45 (à droite) en demandant la même précision. Dans le second cas, le
contrôle de l’erreur échoue et la solution obtenue est moins précise
relative soit inférieure à 10
−3 et l’erreur absolue inférieure à 10
−6 (à
moins de modifier ces valeurs par défaut). On les exécute avec les commandes suivantes :
[ t1 , y1 ]= ode23 ( @fvinc , tspan ,y0 ’);
[ t2 , y2 ]= ode45 ( @fvinc , tspan ,y0 ’);
et on obtient les solutions de la Figure 7.19.
Les deux méthodes utilisent respectivement 783 et 537 noeuds de
discrétisation non uniformément distribués. Le résidu r est égal à 0.0238
pour ode23 et à 3.2563 pour ode45. Il est surprenant de constater
que le résultat est moins précis avec la méthode d’ordre le plus élevé.
Ceci nous montre qu’il faut être prudent en utilisant les fonctions ode
de MATLAB. Ce comportement s’explique par le fait que l’estimateur d’erreur implémenté dans ode45 est moins contraignant que celui de ode23. En diminuant légèrement la tolérance relative (il suffit de prendre options=odeset(’RelTol’,1.e-04)) et en invoquant la
commande [t,y]=ode45(@fvinc,tspan,y0,options); on obtient finalement des résultats comparables à ceux de ode23 : la fonction ode23
249
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
Figure 7.18. Trajectoires obtenues avec la méthode d’Euler implicite pour
h = 0.00125 (à gauche), et avec la méthode de Crank-Nicolson pour h = 0.025
(à droite)
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
1
−1
−0.5
0
0.5
y 1
y 2
y
3
−2
−1
0
1
2
−2
−1
0
1
2
−2.5
−2
−1.5
−1
−0.5
0
0.5
y 1
y 2
y
3
Figure 7.19. Trajectoires obtenues avec les méthodes ode23 (à gauche) et
ode45 (à droite) en demandant la même précision. Dans le second cas, le
contrôle de l’erreur échoue et la solution obtenue est moins précise
relative soit inférieure à 10
−3 et l’erreur absolue inférieure à 10
−6 (à
moins de modifier ces valeurs par défaut). On les exécute avec les commandes suivantes :
[ t1 , y1 ]= ode23 ( @fvinc , tspan ,y0 ’);
[ t2 , y2 ]= ode45 ( @fvinc , tspan ,y0 ’);
et on obtient les solutions de la Figure 7.19.
Les deux méthodes utilisent respectivement 783 et 537 noeuds de
discrétisation non uniformément distribués. Le résidu r est égal à 0.0238
pour ode23 et à 3.2563 pour ode45. Il est surprenant de constater
que le résultat est moins précis avec la méthode d’ordre le plus élevé.
Ceci nous montre qu’il faut être prudent en utilisant les fonctions ode
de MATLAB. Ce comportement s’explique par le fait que l’estimateur d’erreur implémenté dans ode45 est moins contraignant que celui de ode23. En diminuant légèrement la tolérance relative (il suffit de prendre options=odeset(’RelTol’,1.e-04)) et en invoquant la
commande [t,y]=ode45(@fvinc,tspan,y0,options); on obtient finalement des résultats comparables à ceux de ode23 : la fonction ode23
