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 :
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 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)