Section : Calcul numérique
Précédent : Résolutions et optimisation
Suivant : Programmation


Equations différentielles

La fonction ode est en fait un environnement qui donne accès à la plupart des méthodes numériques classiques pour la résolution des équations différentielles ordinaires (voir help ode). A titre d'exemple nous commençons par le problème de Cauchy en dimension 1 suivant :

$\displaystyle \left\{
 \begin{array}{lcl}
 y'(t) &=& y(t)\,\cos(t)\;,\\  
 y(0) &=& 1\;.
 \end{array}
 \right.$    

La solution explicite est $ y(t)=\exp(\sin(t))$. La résolution numérique par ode est très stable.
deff("yprim=f(t,y)","yprim=y*cos(t)")
t0=0; y0=1; t=[0:0.01:10];
sol=ode(y0,t0,t,f);
max(abs(sol-exp(sin(t))))     // l'erreur est tres faible
t0=0; y0=1; t=[0:0.1:100];
sol=ode(y0,t0,t,f);
max(abs(sol-exp(sin(t))))     // l'erreur reste tres faible
La situation n'est pas toujours aussi favorable. Considérons par exemple $ y(t)=\exp(t)$, solution du problème de Cauchy suivant.

$\displaystyle \left\{
 \begin{array}{lcl}
 y'(t) &=& y(t)\;,\\  
 y(0) &=& 1\;.
 \end{array}
 \right.$    

deff("yprim=f(t,y)","yprim=y")
t0=0; y0=1; t=[0:0.01:10];
sol=ode(y0,t0,t,f);
max(abs(sol-exp(t)))          // l'erreur est raisonnable
t0=0; y0=1; t=[0:0.1:100];
sol=ode(y0,t0,t,f);
max(abs(sol-exp(t)))          // l'erreur est enorme
Voici en dimension 2 la résolution d'un système différentiel de Lotka-Volterra, avec superposition de la trajectoire calculée et du champ de vecteurs défini par le système (figure 9).
//
// definition du systeme 
//
deff("yprim=f(t,y)",..
    ["yprim1=y(1)-y(1)*y(2)";..
     "yprim2=-2*y(2)+2*y(1)*y(2)";..
     "yprim=[yprim1;yprim2]"])
//
// champ de vecteurs
//
xmin=0; xmax=3; ymin=0; ymax=3;
fx=xmin:0.3:xmax; fy=ymin:0.3:ymax;
xbasc()
fchamp(f,1,fx,fy)
//
//resolution du systeme
//
t0=0; tmax=5; pas=0.1
t=t0:pas:tmax;
y0=[2;2];
sol=ode(y0,t0,t,f);
//
// trace de la trajectoire
//
plot2d(sol(1,:),sol(2,:),5,"000")

Figure 9: Résolution d'un système de Lotka-Volterra par ode, représentation des solutions et du champ de vecteurs.



© B. Ycart (2001)