MATLAB Language
Solveurs des équations différentielles ordinaires (ODE)
Recherche…
Exemple pour odeset
Tout d'abord, nous initialisons notre problème de valeur initiale que nous voulons résoudre.
odefun = @(t,y) cos(y).^2*sin(t);
tspan = [0 16*pi];
y0=1;
Nous utilisons ensuite la fonction ode45 sans aucune option spécifiée pour résoudre ce problème. Pour le comparer plus tard, nous traçons la trajectoire.
[t,y] = ode45(odefun, tspan, y0);
plot(t,y,'-o');
Nous établissons maintenant une limite étroite et une limite absolue absolue de tolérance à notre problème.
options = odeset('RelTol',1e-2,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');
Nous fixons une limite absolue et étroite de tolérance absolue.
options = odeset('RelTol',1e-7,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');
Nous fixons une limite absolue et étroite de tolérance absolue. Comme dans les exemples précédents avec des limites de tolérance étroites, la trajectoire est complètement différente de la première sans option spécifique.
options = odeset('RelTol',1e-2,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');
Nous fixons une limite absolue et stricte de tolérance absolue. La comparaison du résultat avec l’autre graphique souligne les erreurs de calcul avec des limites de tolérance étroites.
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');
Les éléments suivants devraient démontrer le compromis entre précision et exécution.
tic;
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
time1 = toc;
plot(t,y,'-o');
Pour comparaison, nous resserrons la limite de tolérance pour les erreurs absolues et relatives. Nous pouvons maintenant voir que sans un gain de précision important, il faudra beaucoup plus de temps pour résoudre notre problème de valeur initiale.
tic;
options = odeset('RelTol',1e-13,'AbsTol',1e-13);
[t,y] = ode45(odefun, tspan, y0, options);
time2 = toc;
plot(t,y,'-o');