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
).
À titre d'exemple nous commençons par le problème de Cauchy en dimension 1 suivant :
La solution explicite est
. 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 , solution du problème de Cauchy suivant.
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 8).
// // 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=4; fx=xmin:0.3:xmax; fy=ymin:0.3:ymax; clf() fchamp(f,1,fx,fy) // //resolution du systeme // t0=0; tmax=8; pas=0.1 t=t0:pas:tmax; y0=[2; 2]; sol=ode(y0,t0,t,f); // // trace de la trajectoire et point initial // plot2d(y0(1),y0(2),style=-3) plot2d(sol(1,:),sol(2,:),style=5)
|