Académique Documents
Professionnel Documents
Culture Documents
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.
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.
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 ) = f (1) (t , w)
M
w (t ) = f ( n ) (t , w)
( n)
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.
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 :
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.
2
En crivant :
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 ci-
dessous.
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.
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
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) :
3
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 :
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) :
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.
4
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; % valeur diffrente de prcdemment
h = 0.1;
om= 1.0;
Remarque : cette solution nest pas lgante, car elle nous oblige crer X fichiers diffrents
pour X valeurs diffrentes du paramtre c.
5
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 % dclaration de c en global
h = 0.1;
om= 1.0;
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 ci-
aprs.
6
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.
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;
7
DEUXIEME PARTIE : EXERCISES
w' = A w
dans l'intervalle [t0,tf], avec la condition initiale W(t0) = w0, et tracez les rsultats.
0.5 1 0
Paramtres : A = , t0=0, tf = 4, w0 =
1 0.5 1
dr
= 2r rf
dt
df
= f + rf
dt
8
Exercice 5 : pendule
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).
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.
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.
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 = Wv x / v
mv y = Wv y / v mg
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
2 4
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.
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.
di q
Indication: avec la seconde loi de Kirchhoff, L + Ri + = E et i=q
dt C
11
Exercice 10 : vidange dun rservoir
12