Vous êtes sur la page 1sur 11

Rappels sur la resolution numerique dEDO avec Matlab

Master Mathematiques Pour lEntreprise


Marie Postel1
Laboratoire Jacques-Louis Lions
Universite Pierre et Marie Curie, Paris 6

Version septembre 2011

Table des mati`eres

1 Equations
differentielles
1.1 Rappels sur la theorie . . . . . . . . . . . .
1.2 Methodes numeriques de resolution . . . .
1.3 Exemples dequations differentielles . . . .
1.4 Application a` la modelisation des e pidemies

.
.
.
.

.
.
.
.

Campus Jussieu, 15-25-313, http ://www.ljll.math.upmc.fr/postel

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

2
2
3
10
10


1 Equations
differentielles
1.1 Rappels sur la theorie
Quest-ce quune e quation differentielle
Une e quation reliant une fonction inconnue avec ses derivees.
Si la fonction ne depend que dune variable on parle dequation differentielle ordinaire (EDO). Sinon, on
parle de quations aux derivees partielles (EDP).
Exemples
1. Croissance (a > 0) ou extinction (a < 0) dune esp`ece

y (t) = ay(t),
y(0) = y0 ,
de solution
y(t) = y0 eat .
2. Le probl`eme du pendule
(t) +

g
sin (t) = 0,
L

o`u g > 0 est la constante gravitationnelle.


Passage dune ODE scalaire a` un syst`eme

(p)

(p1)
y
(t)
=
f
t,
y(t),
y
(t),
.
.
.
,
y
(t)

y(0) = y0
peut secrire
y (0) = y01

(p1)
y
(0) = y0p1

avec

y(t)
y (t)
: R 7 Rp ,
Y (t) =
..

y (p1) (t)

et

F : R Rp 7 Rp
(t Z) 7 F (t, Z)

avec

Y (t) = F (t, Y (t))


Y (0) = Y0

y0
y01
p

Y0 =
... R

y0p1

Z2

Z3
.
F (t, Z) =
.

..
f (t, Z1 , Z2 , . . . , Zp )

Application a` lexemple du pendule


Lequation differentielle dordre deux

(t) + sin (t) = 0,


L
(0) = 0 ,


(0) = 0 ,

peut secrire comme un syst`eme differentiel autonome du premier ordre


 
0

(t) = F ((t)), (0) =


,
0
2

en introduisant la fonction

2
2

F : R 7 R

Z 7 F (Z) =

Z2
g
sin(Z1 )
L

Syst`emes dequations differentielles ordinaires dordre 1


f : [0, T ] RN RN

u (t) = f (t, u) pour t [0, T ]
(P )
u(0) = u0 RN .
Cas o`u f (t, u) est Lipschitzienne par rapport a` u uniformement en t.
Cest-`a-dire quil existe L telle que pour tout x, x Rm , et t [0, T ] :
|f (t, x) f (t, x )| L|x x |.
La constante L est la constante de Lipschitz
Existence et unicite dune solution globale
Theor`eme de Cauchy-Lipschitz
Soit T > 0, y0 Rm et f (t, x) une fonction continue de [0, T ] Rm dans Rm , Lipschitzienne par rapport
a` x uniformement en t.
Alors il existe une unique fonction y(t) de [0, T ] dans Rm solution de lequation differentielle


y (t) = f t, y(t) , y(0) = y0 .

Existence et unicite dune solution locale


Si f est localement Lipschitzienne, cest-`a-dire que pour tout B Rm ouvert borne, x, x B, et t
[0, T ], il existe L telle que
|f (t, x) f (t, x )| LB |x x |.

Alors il existe 0 < T et une unique fonction y(t) de [0, ] dans Rm solution de lequation differentielle


y (t) = f t, y(t) , y(0) = y0 .

1.2 Methodes numeriques de resolution


Discretisation de lintervalle [0, T ] : t0 = 0 < . . . < ti < . . . < tn = T
Discretisation uniforme : ti+1 ti = h, avec nh = T
Methode numerique explicite a` un pas : definition dune solution approchee yi y(ti ) suite de Rm

yi+1 = yi + h(ti , yi , h) pour i = 0, . . . , n 1
y0 = y0
avec : [0, T ] Rm R Rm
Methodes numeriques a` un pas
Methode consistante : (t, y, 0) = f (t, y).
Erreur de consistance
e(ti , y, h) = u(ti+1 ) y h(ti , y, h)
o`u u(t) est la solution de u (t) = f (t, u) avec la condition initiale u(ti) = y.

Ordre p de la methode :
E(h) = max ||e(ti , y, h)|| Khp+1
i

avec K independant de ti et y pour y dans un borne.


Convergence
E(h) = max ||y(ti) yi || 0 quand h 0
i=0,..n

Stabilite

yi+1 = yi + h(ti , yi , h) avec y0 donne


zi+1 = zi + h(ti , zi , h) + i avec z0 donne

Le schema est dit stable sil existe une constante M ne dependant que de telle que
!
n
X
max ||
yi zi || M ||
y0 z0 || +
||i ||
i=0,..n

i=0

Deux resultats fondamentaux


Une methode a` un pas consistante et stable est convergente. Si f C p ([0, T ] Rn ) et si le schema est
dordre p alors lerreur globale de discretisation est en O(hp )
Si : [0, T ] RN [0, h ] RN est lipschitzienne en y uniformement par rapport a` t et h alors le
schema est stable.
Exemples de schemas numeriques
Euler explicite

y0 = y0
yi+1 = yi + hf (ti , yi) pour i = 0, 1, ...n 1
Runge Kutta, deuxi`eme ordre

y0 = y0

k1 = f (ti , yi )
k2 = f (ti + h/2, yi + hk1 /2)

yi+1 = yi + hk2 pour i = 0, 1, ...n 1

Runge Kutta dordre 4

y0 = y0

k1 = f (ti , yi )

k2 = f (ti + h/2, yi + hk1 /2)


k3 = f (ti + h/2, yi + hk2 /2)

k = f (ti + h, yi + hk3 )

4
yi+1 = yi + h(k1 + 2k2 + 2k3 + k4 )/6 pour i = 0, 1, ...n 1
Exemples de schemas numeriques implicites
Euler implicite

y0 = y0
yi+1 = yi + hf (ti+1 , yi+1)

pour i = 0, 1, ...n 1

CrankNicholson

y0 = y0
yi+1 = yi + h2 f (ti , yi) + h2 f (ti+1 , yi+1 ) pour i = 0, 1, ...n 1

` chaque pas de temps on doit resoudre une e quation non-lineaire (si la fonction f est non-lineaire) pour
A
determiner yi+1 en fonction de yi.
Mise en oeuvre Matlab

y (t) = ay(t),
y(0) = y0
La solution y(t) = y0 eat est representee sur la Figure
avec son approximation numerique.
EDO

h=T/n;
t=[0:n]*h;
ye=y0*exp(a*t);
ybar=y0*ones(1,n+1);
for i=1:n
ybar(i+1)=(1+h*a)*ybar(i);
end
plot(t,ye,b-,t,ybar,r-o)
ema dEuler explicite)
title(Sch
legend(exacte,Euler)

clear
close all
a=-1;
y0=1;
T=1;
n=10;

Schma dEuler explicite


1
exacte
Euler
0.9

0.8

0.7

0.6

0.5

0.4

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

F IG . 1 Solution de lequation devolution exponentielle


Script 2. Fonction second membre
clear
close all
% definition de la solution exacte
yexacte=inline(exp(t));
% definition de la fonction second membre
f=inline(y,t,y);
T=1; n=10; h=T/n; t=[0:n]*h;
ye=yexacte(t);
ybar=yexacte(t(1))*ones(1,n+1);
for i=1:n
ybar(i+1)=ybar(i)+h*f(t(i),ybar(i));
end
plot(t,ye,b-,t,ybar,r-o)
5

title(Sch
ema dEuler explicite)
legend(exacte,Euler)
Script 3. Fonctions second membre multiples
clear
% definition of exact solutions
yexacte0=inline(exp(t));
f0=inline(y,t,y);
yexacte1=inline((t+1).*exp(-t));
f1=inline(-t.*y./(t+1),t,y);
yexacte2=inline(1.0./(1-t));
f2=inline(y.*y,t,y);
yexacte3=inline(sin(t));
f3=inline(sqrt(1-y.*y),t,y);
Fonctions second membre multiples (2)
T=.9; n=100; h=T/n; t=[0:n]*h;
% choix du cas test
sol=yexacte2;
fun=f2;
ye=sol(t);
ybar=sol(t(1))*ones(1,n+1);
for i=1:n
ybar(i+1)=ybar(i)+h*fun(t(i),ybar(i));
end
plot(t,ye,b-,t,ybar,r-o)
title(Sch
ema dEuler explicite)
legend(exacte,Euler)
Script 4 - Verification de lordre dun schema
clear
NbDisc=10; % Nombre de discr
etisations `
a tester
T=1.;
% espacement uniforme dans une
echelle logarithmique
N=round(5*logspace(1,3,NbDisc));
ER=zeros(1,NbDisc);
for i=1:NbDisc
ER(i)=ErreurEuler(N(i));
end
loglog(T./N,ER,b-o,T./N,T./N,r-)
legend(Erreur,O(h))
title(v
erification de lordre du sch
ema dEuler)

Fonctions pour le script 4


Dans le fichier ErreurEuler.m
6

function er=ErreurEuler(n)
T=1; h=T/n; t=[0:n]*h;
sol=yexacte0;
fun=f0;
ybar=feval(sol,t(1))*ones(1,n+1);
for i=1:n
ybar(i+1)=ybar(i)+h*feval(fun,t(i),ybar(i));
end
er=abs(ybar(n+1)-feval(sol,t(n+1)));
Dans le fichier yexacte0.m
function y=yexacte0(t)
y=exp(t);
Dans le fichier f0.m
function dy=f0(t,y)
dy=y;
Script 6. Equation du pendule
clear
close all
T=50;
n=1000; h=T/n;
t=[0:n]*h;
ybar=zeros(2,n+1);
ybar(1,1)=1;
ybar1=zeros(2,n+1);
ybar1(1,1)=1;
for i=1:n
% euler
ybar1(:,i+1)=ybar1(:,i)+h*F(t(i),ybar1(:,i));
% runge kutta
yb=ybar(:,i)+h*F(t(i),ybar(:,i))/2;
ybar(:,i+1)=ybar(:,i)+h*F(t(i)+h/2,yb);
end
Script 6. Equation du pendule (2)
plot(t,ybar(1,:),t,ybar(2,:),t,ybar1(1,:),t,ybar1(2,:))
title(Mouvt. du pendule - comp. Euler et Runge-Kutta)
legend(phi (RK),phi (RK),phi (Euler),phi (Euler))
figure
plot(ybar(1,:),ybar(2,:),ybar1(1,:),ybar1(2,:))
title(comp. Euler et Runge-Kutta - espace des phases)
legend(RK,Euler)
Dans le fichier F.m
function YP=F(t,Y)
YP=Y;
YP(1)=Y(2);
YP(2)=-sin(Y(1));

Script 7 - comparaison e quation scalaire et vectorielle


yexacte3=inline(sin(t));
f3=inline(sqrt(1-y.*y),t,y);
T=10; n=200; h=T/n; t=[0:n]*h;
ye=yexacte3(t);
ybar=yexacte3(t(1))*ones(1,n+1);
for i=1:n
ybar(i+1)=ybar(i)+h*f3(t(i),ybar(i));
end
YBAR=ones(2,n+1);
YBAR(1,1)=0;
YBAR(2,1)=1;
for i=1:n
YBAR(:,i+1)=YBAR(:,i)+h*F1(t(i),YBAR(:,i));
end
plot(t,ye,t,ybar,t,YBAR(1,:))
ema dEuler explicite)
title(Sch
legend(exacte,Euler,Vect)
figure
Script 7 - comparaison e quation scalaire et vectorielle (2)
for i=1:n
yb=ybar(i)+h*f3(t(i),ybar(i))/2;
ybar(i+1)=ybar(i)+h*f3(t(i)+h/2,yb);
end
YBAR=ones(2,n+1); YBAR(1,1)=0; YBAR(2,1)=1;
for i=1:n
YB=YBAR(:,i)+h*F1(t(i),YBAR(:,i))/2;
YBAR(:,i+1)=YBAR(:,i)+h*F1(t(i)+h/2,YB);
end
plot(t,ye,t,ybar,t,YBAR(1,:))
title(Sch
ema de RungeKutta ordre 2)
legend(exacte,RK scal,Vect)
Dans le fichier F1.m
function YP=F1(t,Y)
YP=Y;
YP(1)=Y(2); YP(2)=-Y(1);
Utilisation du solveur ODE de matlab
ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb,
La syntaxe de base :
[T,Y] = solver(odefun,tspan,y0)
Arguments dentree :
odefun : fonction au second membre du systeme differentiel ci dessus f(t,y)
tspan : [t0,t1,...,tf] temps o`u on veut calculer la solution y
y0 : Condition initiale y(t0) (vecteur colonne n composantes)
8

Arguments de sortie :
T : les temps o`u est calculee la solution
Y : Les valeurs de la solution aux temps T
Script 8 - Exemple dutilisation du solveur ODE de matlab
yexacte3=inline(sin(t));
f3=inline(sqrt(1-y.2),t,y);
T=2; n=100; h=T/n; t=[0:n]*h;
ye=yexacte3(t);
[ty,ybar] =ode23(f3,[0,T],0);
Y0(1,1)=0; Y0(2,1)=1;
[ TY,YBAR ] =ode23(@F1,[0,T],Y0);
hold on
plot(t,ye,b)
plot(ty,ybar,rx)
plot(TY,YBAR(:,1),go)
title(Solveur ODE de MATLAB)
legend(exacte,scalaire,Vect)
Script 9 - Etude de la stabilite
yexacte3=inline(sin(t));
T=20;
n=400;
h=T/n;
t=[0:n]*h;
ye=yexacte3(t);
YBAR=ones(2,n+1);
YBAR(1,1)=0;
YBAR(2,1)=1;
for i=1:n
YBAR(:,i+1)=YBAR(:,i)+h*F1(t(i),YBAR(:,i));
end
Timp=100;
nimp=2000;
h=Timp/nimp;
timp=[0:nimp]*h;
yeimp=yexacte3(timp);
YBARimp=ones(2,nimp+1);
YBARimp(1,1)=0;
YBARimp(2,1)=1;
for i=1:nimp
YBARimp(2,i+1)=(YBARimp(2,i)-h*YBARimp(1,i))/(1+h
2);
YBARimp(1,i+1)=YBARimp(1,i)+h*YBARimp(2,i+1);
end
plot(timp,yeimp,t,YBAR(1,:),timp,YBARimp(1,:))
emas dEuler explicite et implicite)
title(Sch
legend(exacte,explicite,implicite)

1.3 Exemples dequations differentielles


Exercice 1 1) Resoudre a` la main lequation differentielle

x (t) = 2x(t) t2 3,
x(0) = 2.
2) Ecrire un script Matlab pour calculer numeriquement la solution avec le schema dEuler et comparer
avec la solution exacte. Representer les deux solutions sur lintervalle [0, 2] sur le meme graphe.
3) Meme question avec le schema de Runge-Kutta dordre 4.
4) Meme question avec le solveur ode45 de Matlab .
5) Verifier numeriquement lordre de convergence des schemas dEuler et Runge-Kutta.
Exercice 2 1) Resoudre a` la main lequation differentielle

x (t) = 2x(t) 3y(t) + 3et ,


y (t) = x(t) + y(t) et ,
x(0) = 1,

y(0) = 0.

On pourra se ramener a` une e quation differentielle dordre deux a` une inconnue, par e limination.
2) Ecrire un script Matlab pour calculer numeriquement la solution avec le schema dEuler et comparer
avec la solution exacte. Representer les deux solutions sur lintervalle [0, 2] sur le meme graphe (avec un
graphe pour chaque composante x(t) et y(t)).
3) Meme question avec le schema de Runge-Kutta dordre 4.
4) Meme question avec le solveur ode45 de Matlab .

1.4 Application a` la modelisation des e pidemies


On consid`ere que la population globale constante. Un petit groupe dindividus porteur dun virus est introduit et on e tudie la propagation du virus en fonction du temps. En premi`ere approximation on fait des
hypoth`eses simplificatrices. En particulier on regroupe les malades une fois gueris qui sont immunises avec
ceux qui ont decede de la maladie. On divise donc la population totale en trois categories
Les individus sains S (pour susceptibles en anglais)
Les individus contamines I (pour infected en anglais)
Les individus soit gueris, soit morts R (pour recovereden anglais)
On va e tudier levolution des effectifs de chaque categorie en fonction du temps S(t), I(t) et R(t). Pour
cela on va supposer que
Laugmentation du groupe des contamines est proportionnel au nombre dindividus contamines et dindividus sains rSI, avec r > 0 une constante. Le nombre dindividus sains decrot inversement.
La transition du groupe des individus contamines vers le groupe des individus gueris se fait proportionnellement au nombre de contamines aI avec une constante a. Donc 1/a mesure le temps passe dans
le groupe contamine.
On neglige le temps dincubation de la maladie, les transitions du groupe S au groupe I sont instantanees.
Avec ces hypoth`eses on peut e crire le syst`eme differentiel SIR (aussi connu sous le nom de son auteur
Kermack-McKendrick) verifie par les effectifs des trois classes

dS

= rSI,

dt
dI
(1)
= rSI aI,

dt

dR = aI.
dt
10

Pour une population donnee N = S +I +R constante, la propagation de lepidemie varie suivant les valeurs
des constantes r et a et des conditions initiales

S(0) = S0 ,
I(0) = I0 = N S0 ,
(2)

R(0) = 0.
Exercice 3
1. Resoudre le syst`eme (1) avec le schema de Runge-Kutta dordre 4. Parametriser le programme de mani`ere a` pouvoir faire varier facilement les coefficients et les conditions initiales.
2. Tracer sur le meme graphe levolution des trois groupes en fonction du temps
3. Pour a, r et N fixes, faire varier S0 et I0 et a` chaque fois tracer I(t) en fonction de S(t). Quobservet-on ?
dI
4. Un peu de maths... Calculer dS
et integrer. Quel est le nombre maximum de personnes contamines
au cours de lepidemie, en fonction de N et = a/r. Retrouver ce resultat sur les simulations
numeriques precedentes.
dS
5. Calculer dR
et integrer. En deduire une e quation differentielle scalaire pour R uniquement. Integrer
numeriquement.

6. Un exemple vecu dans un pensionnat de garcons en Angleterre en 1978 : N = 763, S0 = 762, I0 = 1,


= 202, r = 2.18 103 /jour. Tracer S et I en fonction du temps.

11

Vous aimerez peut-être aussi