Vous êtes sur la page 1sur 12

UPMC - Licence Elec.

L2 S2
UE Calcul Scientifique ; initiation MATLAB (LE205)

TP 5 : Modlisation et Simulation
PREMIERE PARTIE : COURS ET EXEMPLES
Thmes abords :
* Equations diffrentielles,
* Forme de Cauchy,
* Solutions numriques dEdo sous MATLAB
Remarque IMPORTANTE : dans ce TP, lorsquun exemple ou un exercice est donn, vous
tes invit fortement le raliser et en noter le rsultat.
I.

Introduction : quations diffrentielles

Un nombre important de modles physiques peuvent tre dcrits en utilisant les quations
diffrentielles. MATLAB utilise cinq mthodes gnrales pour dcrire un systme
dynamique. Bien qu'elles permettent toutes de reprsenter la plupart des systmes, certaines
sont parfois plus pertinentes. En effet. l'une des mthodes peut fournir des rsultats
numriques plus prcis ou tre conceptuellement plus simple. Les cinq reprsentations sont
les fonctions de transfert, zros-ples-gain, les fractions partielles, les reprsentations d'tat
et la forme de Cauchy.
Dans ce TP, nous nutiliserons que la dernire de ces formes : la forme de Cauchy. Nous
allons tout dabord lappliquer un problme souvent tudi : le ressort linaire.
Un ressort lastique, de masse ngligeable, de raideur h, de
longueur vide y, a son extrmit suprieure S fixe. A
lextrmit infrieure est fix un corps M assimilable un
point matriel de masse m.
Le rle unique de lamortisseur D, de masse ngligeable,
r
r
li M, est dexercer sur le corps la force f f = cv ,
r
o v dsigne la vitesse de M et h un coefficient de
frottement fluide,positif. Les mouvements de M sont
verticaux.
A lquilibre, labscisse l=x-y de M est nulle. Soit F
lensemble des forces externes, on a alors :
m.l + c.l + h.l = F
Dans ce chapitre, nous traiterons l'quation avec les paramtres suivants
m = 2kg
c = 1.4Ns/m
h = 0.l N/m
1

II.

Forme de Cauchy

La forme de Cauchy est un systme de n quations diffrentielles du premier ordre qui est de
la forme :

w(1) (t ) =

M
w (t ) =
( n)

f (1) (t , w)
f ( n ) (t , w)

o t est une variable indpendante, gnralement le temps, o w(t) est un vecteur n


lments et o la drive par rapport la variable indpendante est indique par le symbole
prime comme dans w Avec les notations vectorielles, ce systme s'crit :

w(t) = f (t, w )
La fonction f (t, w ) est gnralement contenue dans une unit diffrente, telle qu'un
M-file ou une routine fortran. Pour pouvoir utiliser les fonctions MATLAB ode23 et ode45
prsentes dans la prochaine section, on doit dcrire le modle sous cette forme.

III.

Solutions numriques dEquations Diffrentielles Ordinaires


a. Ecriture et rsolution avec ode23

Ecrivons lquation de ressort soumis une force F, F=a sin (t) avec a = 2N,
sous le forme de Cauchy. Prenons pour les valeurs dtat w1 = l et w2=l. Lquation
scrit alors comme suit :
w1 = -c/m w1 h/m w2 + a/m sin(t)
w2 = w1

Ce systme possde une unique solution pour chacun des jeux de conditions initiales.
Commenons la simulation pour une valeur to = 0, pour les conditions initiales suivantes :
w1(0) = 0
w2(0) = 0

Nous allons utiliser la routine ode23 pour rsoudre le systme diffrentiel ainsi obtenu.

En crivant :
>> help ode23

vous remarquez la prsence dans la liste d'un paramtre nomm options, suivi par un nombre
de paramtres Pl, P2, etc. Nous ne nous attarderons pas sur ces paramtres optionnels.
MATLAB leur attribuera une valeur raisonnable. Pour calculer la dynamique du ressort, nous
devons d'abord crire une fonction qui dcrive le systme, comme le fichier springb.m cidessous.
Dans le jargon MATLAB, une telle fonction est appele fichier ode (odefile) (ode est
l'acronyme anglais d'quation diffrentielle ordinaire). Un fichier ode est une fonction qui,
sous sa forme la plus simple, prend un scalaire en entre (gnralement le temps, t dans
l'exemple suivant), un vecteur colonne des tats (w dans l'exemple suivant) et retourne un
vecteur (wd dans l'exemple suivant) qui reprsente la drive de w au temps t.
Voici le code source de la fonction springb.m :
function wd=springb(t,w);
% cette fonction dfinit la dynamique d'un systme
% masse-ressort-amortissement, sujet une force externe
% sinusodale.
% Il est crit en accord avec la syntaxe requise par les
% fonctions de rsolution des edo
% -- attribution des valeurs aux constantes
%
qui dfinissent le systme
a=2.0;
%N
m = 2.0;
%kg
c = 1.4;
%Ns/m
h = 0.1;
%N/m
om= 1.0;
%rad/s
% --- allocation d'espace pour wd
wd = zeros(size(w));
% --- calcul des drives
wd(l) = -c/m*w(l) -h/m*w(2) + a/m*sin(om*t);
wd(2) =w(l);

Pour observer l'oscillation de la masse, crivez les commandes suivantes (nous vous
conseillons de les crire dans un script, tp5.m ; compltez-le fur et mesure du TP) :
>>
>>
>>
>>
>>
>>
>>

t0 = 0.0 ; tf = 100 ; w0= [0 ;0] ;


[t, w] = ode23(springb , [t0, tf ], w0)
plot(t,w(:,2)); %position au deuxime tat
grid on;
xlabel('Temps, t, en secondes');
ylabel('Elongation du ressort, l, en metres') ;
title('Simulation d un systme masse-ressort) ;

b. Spcifier les valeurs de temps


Dans l'exemple prcdent, la fonction ode23 calculait le tableau des temps t et les valeurs
correspondantes du vecteur d'tats, w. Les valeurs de t taient gnres par MATLAB, de
faon optimiser les calculs. Il est souvent utile de dfinir les valeurs du vecteur t, par
exemple avec un pas constant. On peut procder simplement, en dfinissant un vecteur
tspan comme suit :
>>
>>
>>
>>
>>
>>
>>

tspan= 0.0: 0.1 : 100;


[t, w] = ode23(springb , tspan, w0)
figure, plot(t,w(:,2));
grid on;
xlabel('Temps, t, en secondes');
ylabel('Elongation du ressort, l, en metres') ;
title('Simulation d un systme masse-ressort) ;

c. Autres mthodes de rsolution


MATLAB contient de nombreuses mthodes pour rsoudre les quations diffrentielles
ordinaires (edo). Comme leur nombre crot avec les nouvelles versions de MATLAB, il nous
est impossible d'en donner une liste exhaustive ici. Pour obtenir celles qui sont disponibles
avec votre version, entrez
>> help ode23

Chacune de ces mthodes est en principe, capable de rsoudre n'importe quel systme
d'quations diffrentielles, mais la performance et la prcision sont diffrentes pour chacune
d'entre elles. Il est souvent difficile de choisir la mthode approprie; pour cela il faut une
bonne connaissance des thories mathmatiques sous-jacentes, sujet qui n'intresse pas
ncessairement un utilisateur occasionnel.
La syntaxe reste identique pour toutes ces fonctions. On peut ainsi soumettre le fichier
springb.m une nouvelle fonction comme ode45, l'aide de la syntaxe suivante (en
utilisant les springb, tspan et w0 dfinis la section prcdente) :
>>
>>
>>
>>

[t, w] = ode45(springb , tspan, w0)


hold on
plot(t,w(:,2),r);
hold off

d. Passage de paramtres un modle


Dans cette section, nous partons d'une situation trs courante. Nous possdons dj le fichier
ode springb.m, et nous al1ons le modifier pour observer l'volution des solutions quand on
fait varier les paramtres dfinissant le systme. On pourra, notamment, modifier les valeurs
de c, le coefficient d'amortissement, ou de om, qui change la frquence de la force externe.
Dans les exemples suivants, pour simplifier, nous ne ferons voluer qu'un seul paramtre : c.

Pour faire cela, trois possibilits s'offrent nous: elles sont prsentes la suite.
Solution 1

La solution 1 est la plus simple, mais pas la plus lgante. Elle consiste crer un
nouveau fichier ode springb1.m o la valeur de c est diffrente de celle dans
springb.m :

function wd=springbl(t,w);
% cette fonction dfinit la dynamique d'un systme
% masse-ressort-amortissement, sujet une force externe
% sinusoidale
a =2.0;
m = 2.0;
c = 2.5; %
h = 0.1;
om= 1.0;

valeur diffrente de prcdemment

% --- allocation d'espace


wd = zeros(size(w));
% --- calcul des drives
wd(l) = -c/m*w(l) -h/m*w(2) + a/m*sin(om*t);
wd(2) = w(l);

Les commandes excuter sont les suivantes :


>> tspan=[0,100]; w0=[0 ;0] ;
>> %rsolution du systme original
>> [t,w]=ode23(springb,tspan,w0);
>> % rsolution du systme modifi
>>[tl,wl]=ode23(springb1,tspan,w0);
>> %comparaison des rsultats
>> figure, plot(t,w( :,2),tl,w1( :,2)
>> grid on
>> xlabel('Temps, t, en secondes')
>> ylabel('Elongation du ressort, l, en metres')
>> title(simulation du ressort (2 valeurs -> 2 fichiers)) ;

Remarque : cette solution nest pas lgante, car elle nous oblige crer X fichiers diffrents
pour X valeurs diffrentes du paramtre c.

Solution2

Nous pouvons dfinir le paramtre que nous dsirons faire varier comme un paramtre global;
function wd=springg(t,w);
% cette fonction dfinit la dynamique d'un systme
% masse-ressort-amortissement, sujet une force externe
% sinusoidale
a = 2.0;
m = 2.0;
global c %
h = 0.1;
om= 1.0;

dclaration de c en global

% --- allocation d'espace


wd = zeros(size(w));
% --- calcul des drives
wd(l) = -c/m*w(l) -h/m*w(2) + a/m*sin(om*t);
wd(2) = w(l);

Les commandes excuter sont les suivantes :


>> tspan=[0,100]; w0=[0 ;0] ;
>> global c
>> %rsolution du systme original
>> c=1.4 ;
>> [t,w]=ode23(springg,tspan,w0);
>> % rsolution du systme modifi
>> c=2.5 ;
>>[tl,wl]=ode23(springg,tspan,w0);
>> %comparaison des rsultats
>> figure, plot(t,w( :,2),tl,w1( :,2)
>> grid on
>> xlabel('Temps, t, en secondes')
>> ylabel('Elongation du ressort, l, en metres')
>> title(simulation du ressort (parametre global)) ;

Remarque : Nous n'avons plus besoin d'utiliser l'diteur pour chaque test d'une nouvelle
valeur pour un paramtre. On doit cependant dfinir un paramtre global, dans notre cas c.
L'utilisation de variables globales est souvent la cause de bogues par exemple dans le cas
o un autre programme utilise une variable de mme nom c. Nous vous conseillons fortement
d'viter cette pratique sauf pour des programmes courts. Utilisez plutt la solution dcrite ciaprs.

Solution 3

On peut ajouter le ou les paramtre(s) la liste des arguments en entre du fichier ode, juste
aprs le vecteur d'tat initial, soit en troisime position. Cependant mfiez-vous : certaines
anciennes versions de MATLAB (dont la version 5.3 qui est utilise en TP) ncessitent
l'intervention, en troisime position, d'une variable flag (introduite pour des raisons de
compatibilit avec Simulink, mais sans objet dans les versions 6 et suivantes), qui va dcaler
ainsi les autres paramtres en quatrime position.
On va donc transformer la fonction springb.m pour obtenir un nouveau fichier
springp.m (fonction 'spring' avec des paramtres), en modifiant la premire ligne pour y
inclure le paramtre c en entre et en supprimant la ligne o la variable c tait dfinie.
function wd=springp(t,w,flag,c);
% cette fonction dfinit la dynamique d'un systme
% masse-ressort-amortissement, sujet une force externe
% sinusoidale
% pour les versions 6 et + : function wd=springg(t,w,c) ;
a = 2.0;
m = 2.0;
% il ny a plus de dclaration de c , ici ; car elle est
% fate dans les paramtres dentre de la fonction
h = 0.1;
om= 1.0;
% --- allocation d'espace
wd = zeros(size(w));
% --- calcul des drives
wd(l) = -c/m*w(l) -h/m*w(2) + a/m*sin(om*t);
wd(2) = w(l);

Les commandes excuter sont les suivantes :


>> tspan=[0,100]; w0=[0 ;0] ;
>> %rsolution du systme original
>> c=1.4 ;
>> [t,w]=ode23(springp,tspan,w0,[],c);
>> % rsolution du systme modifi
>> c=2.5 ;
>>[tl,wl]=ode23(springp,tspan,w0,[],c);
>> %comparaison des rsultats
>> figure, plot(t,w( :,2),tl,w1( :,2)
>> grid on
>> xlabel('Temps, t, en secondes')
>> ylabel('Elongation du ressort, l, en metres')
>> title(simulation du ressort (parametre en argument)) ;

DEUXIEME PARTIE : EXERCISES


Exercice 1 : systme linaire invariant dans le temps
Rsolvez le systme d'quations diffrentielles en utilisant la fonction ode23 ou ode45
w' = A w
dans l'intervalle [t0,tf], avec la condition initiale W(t0) = w0, et tracez les rsultats.
1
0.5
0
, t0=0, tf = 4, w0 =
Paramtres : A =

1 0.5
1
Exercice 2 : quations linaires variant dans le temps.
Rsolvez le systme d'quations diffrentielles en utilisant la fonction ode23 ou ode45 dans
l'intervalle [to,tf]. A partir des conditions initiales, dterminez et tracez les rsultats.
(1)

w' + (1.2-sin(10t) w = 0

, t0 = 0,

tf = 5,

w(t0) = 1

(2)

3 w' + 1/(1+t2) w = cos t

, t0 = 0,

tf = 5,

w(t0) = 1

Exercice 3 : quations linaires dordre lev


Rsolvez le systme d'quations diffrentielles en utilisant la fonction ode23 ou ode45 dans
l'intervalle [to,tf]. A partir des conditions initiales, dterminez et tracez les rsultats.
(1)

(1+t2) w'' + 2 t w' + 3 w = 2

(2)

w''' 5 cos(2t) / (1+t) 2 w'' + w' + 1/(3+sin t) w = cos t ,


avec t0 = 0, tf = 5, w(t0) = 1, w' (t0) = 0, w'' (t0) = 2

, t0 = 0, tf = 5, w(t0) = 0, w' (t0) = 1

Exercice 4 : renards et lapins


Il s'agit de l'cosystme bien connu de VitoVolterra (Italien, 1860-1940). On considre deux
populations : l'une de lapins, l'autre de renards relies par les quations
dr
= 2r rf
dt
df
= f + rf
dt

avec r le nombre de lapins, f le nombre de renards, et t le temps donn en annes. En


utilisant ode23, calculez et tracez la solution de ce systme diffrentiel, pour = 0.01 sur
l'intervalle [0, 25] pour les conditions initiales r0= 300 et f0 = 150.

Exercice 5 : pendule
Le mouvement d'un pendule idal de longueur est gouvern par
l'quation : = gl sin , o est l'angle du pendule par rapport la
verticale. Dterminez en fonction de t, pour l'intervalle de temps [0,
10], et tracez et ' en fonction du temps.
Paramtres: g = 9.81m/s2 et l = 0.5 m.
Conditions initiales: (0) = 1 radian, '(0) = 0 rad/s.

Ne soyez pas surpris si les graphiques de et ' ressemblent des sinusodes. La sinusode est
la solution du modle linaris obtenu en substituant sin dans l'quation. Le modle
linaris est excellent, tant que l'angle et sa drive restent au voisinage de 0. Afin de
vrifier que et ' ne sont pas des sinusodes, recommencez la simulation avec une grande
valeur de '(0).

Exercice 6 : chien cherchant son matre


De nombreuses courbes correspondent la trajectoire d'un point
D qui se dplace vitesse constante tout en pointant dans la
direction d'un autre point M qui volue sur un parcours connu.
Ces mthodes de traque sont appeles dog-tracking parce
qu'elles ressemblent au chemin effectu par un chien qui
poursuit son matre. Des courbes similaires correspondent un
navire qui poursuit un autre navire ou des trajectoires de
missiles sol-air ou air-air.
Sur la figure ci-contre, la trajectoire du matre est reprsente
par les o et celle du chien par les *.
On obtient en notation vectorielle :
r r
r
M D
VD = vel D r r
M D

Calculez et tracez les trajectoires du chien dans les deux cas


suivants :
(1) Le matre se dplace linairement et les paramtres du problme sont :
Position initiale du chien (x,y) = (0,0),
Vitesse du chien velD ,= 10 m/s.
Position du matre au temps t, xM = velM t, yM = 100m
Vitesse du matre velD= 5m/s,
9

Temps initial et final t0= 0s. , tf = 10 s.


(2) Le chien est au centre d'une mare circulaire de rayon r, alors que son matre marche
sur le bord vitesse constante velM. Le chien nage, vitesse constante velD, orient
vers son matre comme cela est reprsent la figure de la page prcdente. Tracez la
trajectoire du chien dans l'intervalle [t0,tf]. Les paramtres du problme sont:
r = 15m.
Position initiale du chien (x,y)= (0, 0).
Vitesse du chien velD = 2.5 m/s.
Vitesse du matre velM = 2 m/s.
Exercice 7 : chats se poursuivant

Quatre chats se situent aux quatre coins d'une pice carre de base unit. Au temps t = 0, ils
commencent se poursuivre une vitesse de valeur unit, de la manire suivante. Le chat n1
court en direction du chat n 2, le chat n 2 court en direction du chat n 3, le chat n3 court
en direction du chat n4 et le chat n 4 court en direction du chat n1 jusqu' ce qu'ils se
rejoignent au centre de la pice.

En utilisant ODE23, calculez et tracez les trajectoires des chats. Si vous aimez les
mathmatiques, vous pourrez dterminer la longueur des trajectoires ana1itiquement,
gnraliser le problme des formes de pices diffrentes (par exemple un polygone rgulier)
ou des dimensions suprieures (chats volants dans une pice ttradrique) et ainsi de suite.

La figure ci-dessus reproduit le rsultat attendu.

10

Exercice 8 : balistique
Un modle balistique simple suppose que seules deux forces agissent sur le projectile: la
pesanteur et la trane. Pour ce modle, les quations du mouvement sont

mv x

mv y

= Wv y / v mg

Wv x / v

Ici vx et vy sont les composantes de la vitesse et v son module. On obtient la trane W grce
l'quation :

W = cW

v2

d2

Le symbole cW correspond au coefficient de trane. Il reste peu prs constant tant que le vol
se fait une vitesse subsonique: est la densit de l'air et d le diamtre du projectile.
(1) Tracez la trajectoire, en utilisant les paramtres suivants: g = 9.81 m/s2, m = 10kg, cW=
0.2, = 1.225 kg/m et d = 0.050 m. Les conditions initiales sont x(0) = 0m, .y(0)= 0m,
v(0) = 250 m/s et l'lvation de l'arme est gale /6.
(2) Si vous avez utilis ode23 avec la valeur de tol par dfaut, le graphique de la trajectoire
est dplaisant, cause du petit nombre de points rsultants. Reprenez le problme en (1) et
gnrez un graphique plus rgulier en donnant la valeur 5e-4 au paramtre tol, pour
remplacer la tolrance par dfaut 1e-3.
Exercice 9 : circuit RLC
La figure ci-contre reprsente un simple circuit lectrique
constitu d'une source de tension E, d'une rsistance H, d'une
bobine L et d'une capacit C. La source de tension produit un
courant alternatif avec :
E = E0 sin( 2 f t )
Pour des conditions initiales nulles, calculez la charge q de la capacit et le courant i qui
circule dans le circuit; tracez ensuite q et i en fonction du temps, de 0 100 millisecondes.
Utilisez ode23 avec tol = 1.Oe-4. Paramtres: E0 = 5 v, r = 400Hz, R = 20 ohm, C = 100mF ,
L = 50mH.
Indication: avec la seconde loi de Kirchhoff, L

di
q
+ Ri + = E et i=q
dt
C

11

Exercice 10 : vidange dun rservoir


La figure ci-dessous reprsente un rservoir cylindrique de rayon R rempli d'eau. L'eau
s'coule par un large orifice de rayon r. Soit h le niveau d'eau par rapport l'axe de dorifice.
A chaque instant t, h satisfait l'quation diffrentie1le suivante :

avec g l'acclration de la gravit et C le coefficient de dcharge. Dans cet exercice, on


suppose que C est constant. Tracez la hauteur de liquide en fonction du temps, pour t de 0
100 secondes.
Paramtres: R = 1.0 m, r = 0.1 m, g = 9.81 m/s2, C = 0.6.
Conditions initiales: h0 = 1 m.

12