Systèmes dynamiques, modélisation et simulation Résolution avec Scilab Claude Gomez 1 et Christine Gomez Université d été de Sourdun, 7 30 août 01 Table des matières Table des matières... 1 Équation différentielle du premier ordre en dimension 1... 1.1 Équation différentielle linéaire... 1. Solution... Équation différentielle du second ordre en dimension 1....1 Le pule amorti.... Solution... 3 3 Équation différentielle du premier ordre en dimension... 3 3.1 Système de Lotka-Volterra... 3 3.1.1 Énoncé... 3 3.1. Solution... 4 3. Système de Lotka-Volterra avec prise en compte de la surpopulation... 5 3..1 Énoncé... 5 3.. Solution... 5 3.3 Système non autonome... 6 3.3.1 Énoncé... 6 3.3. Solution... 6 1 Directeur général de Scilab Enterprises. Professeur de mathématiques au lycée Descartes, 9 Antony. Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. 1/6
1 Équation différentielle du premier ordre en dimension 1 1.1 Équation différentielle linéaire On repr l équation différentielle étudiée en terminale y ' ay b:, où a et b sont des constantes réelles, avec a 0. ici 1. Résoudre l équation pour a 1 et b 6, avec y(0) 1.. Vérifier que la courbe intégrale correspond à la solution théorique bie connue. 3. Faire une boucle pour tracer les courbes intégrales obtenues y (0) avec variant de 1 à 5. 1. Solution a=1; b=6; yprim=a*y+b; // Une courbe intégrale t0=0; y0=1; t=t0:0.1:t0+; y=ode(y0,t0,t,f); clf; plot(t,y) // Comparaison avec la solution connue function y=s(t) y=((a+b)/a)*exp(a*t)-b/a; plot(t,s,"r") // Tracé de plusieurs courbes intégrales en faisant // varier la condition initiale for y0=0:5 y=ode(y0,t0,t,f); plot(t,y) Équation différentielle du second ordre en dimension 1.1 Le pule amorti On considère le mouvement d un pule amorti de l longueur et de masse m. est l angle que fait le pule avec la verticale. La force de friction à laquelle est soumis le pule est opposée au mouvement kt et '( égale ) avec à k 0. Pour obtenir le système d équations différentielles correspondant, on écrit la loi de Newton projetée sur la tangente au cercle parcouru par le pule et obtient : mgsin( ( t)) k '( t) ml ''( t) Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. /6
où g est l accélération de la pesanteur. Si l on pose( tt ) '( ), on obtient le système du premier ordre et de dimension suivant : '( tt) ( ) kg '( t) ( t) sin( ( t)) ml l On prra l 1m, m 1kg etg 9,81m/s. 1. Résoudre le système et tracer la courbe ()t en de fonction de t pour k 3, avec une vitesse initiale nulle et un angle initial. de. Faire une boucle sur k entre 0 et 10 et tracer sur une même figure les courbes de ()t en fonction de t.. Solution yprim(1)=y(); yprim()=-(k/(m*l))*y()-(g/l)*sin(y(1)); // Courbe intégrale pour k=3 l=1; m=1; g=9.81; k=3; t0=0; tmax=5; t=t0:0.05:tmax; teta0=%pi/; omega0=0; y=ode([teta0;omega0],t0,t,f); clf; plot(t,y(1,:)) // Plusieurs courbes intégrales en faisant varier la // constante k for k=0:10 y=ode([teta0;omega0],t0,t,f); plot(t,y(1,:)) 3 Équation différentielle du premier ordre en dimension 3.1 Système de Lotka-Volterra 3.1.1 Énoncé Les équations de Lotka-Volterra décrivent le comportement du système de proies xt( ) 0 (sardines) et de prédateurs yt( ) 0 (requins) : x'( t) a x ( t) b x ( t) y ( t) y '( t) c x ( t) y ( t) d y ( t ) Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. 3/6
avec des conditions initiales xx(0) 0, yy(0) 0, et a, b, c, et d strictement positifs. 1. Tracer des trajectoires dans le plan de phase en partant du point cliqué par la souris. On prra a 3, b 1, c 1 et d.. On augmente la fréquence de pêche, c'est-à-dire aa et dd. Sur la même figure tracer les nouvelles trajectoires en partant du point cliqué par la souris. On prra et. 3.1. Solution yprim(1)=a*y(1)-b*y(1)*y(); yprim()=c*y(1)*y() -d*y(); // Une trajectoire a=3; b=1; c=1; d=; t0=0; tmax=5; t=t0:0.05:tmax; x0=3; y0=1.5; clf; plot(y(1,:),y(,:)) // Tracés de différentes trajectoires en cliquant pour // imposer la condition initiale if c_i==5 then break ; plot(y(1,:),y(,:)) Ci-dessus on utilise la fonction xclick qui va retourner le numéro du bouton de la souris cliqué ainsi que les coordonnées du point correspondant. Lors l'on clique sur le bouton droit de la souris, qui correspond à un retour de xclick égal à 5, on sort de la boucle et le programme s'arrête. Sinon, o intègre l'équation différentielle en prenant comme condition initiale les coordonnées du point cliqué. // Plus de pêcheurs alpha=; delta=; a=a-alpha; d=d+delta; if c_i==5 then break ; plot(y(1,:),y(,:),"r") Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. 4/6
3. Système de Lotka-Volterra avec prise en compte de la surpopulation 3..1 Énoncé Les équations de Lotka-Volterra qui décrivent le comportement du système d proies xt( ) 0 (sardines) et de prédateurs yt( ) 0 (requins) sont un peu simplistes. En particulier, elles ne tiennent pas compte de la surpopulation des espèces. Pour en tenir compte, on introduit un terme carré. Le système d'équations s'écrit alors : x t a x t b x t y t x t '( ) ( ) ( ) ( ) ( ) y t c x t y t d y t y t '( ) ( ) ( ) ( ) ( ) avec des conditions initiales xx(0) 0, yy(0) 0, et a, b, c, d, et strictement positifs. 1 On prra a 4, b, c 1, d, 3 et 1. 1. En prenant le cadre x [0, 4] et y [0, 4], tracer des trajectoires dans le plan de phase en partant du point cliqué par la souris.. Quelle sont les différences de comportement de ce système proies prédateurs par rapport au système classique de Lotka-Volterra? 3.. Solution yprim(1)=a*y(1)-b*y(1)*y()-lambda*y(1)*y(1); yprim()=c*y(1)*y()-d*y()-mu*y()*y(); // Tracé d une trajectoire a=4; b=0.5; c=1; d=; lambda=1.5; mu=0.5; t0=0; tmax=5; t=t0:0.05:tmax; x0=1; y0=1; clf; axes=gca(); axes.data_bounds=[0,0;4,4]; plot(y(1,:),y(,:)) Ci-dessus on a défini le cadre correspondant x [0, 4] à et y [0, 4] danslequel on veut faire le tracé. Pour cela, grâce à la fonction gca («Get Current Axes»), on donne à la variable axes une valeur qui pointe vers la structure graphique des axes et dont on pourra modifier les propriétés. Il suffit ensuite de donner la bonne valeur à la propriété data_bounds pour avoir le cadre désiré. Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. 5/6
// Tracés en cliquant if c_i==5 then break ; plot(y(1,:),y(,:)) 3.3 Système non autonome 3.3.1 Énoncé On veut résoudre le système non autonome, c est-à-dire où t apparaît le temps explicitement dans l équation, suivant : x '( t) sin( y ( t)) y '( t) x ( t) t En prenant le cadre x [ 6, 6] et y [ 6, 6], tracer des trajectoires dans le plan de phase en partant du point cliqué par la souris. 3.3. Solution yprim(1)=sin(y()); yprim()=y(1)^-t; // Une trajectoire t0=0; tmax=30; t=t0:0.1:tmax; x0=4; y0=0; clf; axes=gca(); axes.data_bounds=[-6,-6;6,6]; axes.auto_scale="off"; Ci-dessus on a défini le cadre correspondant x [ 6, 6] à et y [ 6, 6] comme en 3.., mais en plus il est nécessaire de positionner la auto_scale propriété à "off" afin que le cadre ne s adapte pas automatiquement aux tracés suivants, ce qui est le comportement par défaut. plot(y(1,:),y(,:)) // tracés en cliquant if c_i==5 then break ; plot(y(1,:),y(,:)) Systèmes dynamiques, modélisation et simulation. Résolution avec Scilab. 6/6