Dans ce TP, on va etudier plusieurs types de m ethodes dint egration ` a pas constant d equations di erentielles ordinaires. On appliquera ces m ethodes ` a lint egration dun probl` eme simple : l equation r egissant le mouvement dun pendule simple de longueur l et faisant un angle par rapport ` a la verticale : (t) = g sin( (t)). l On rappelle que g = 9.81, et on prendra pour limpl ementation l = 1. (1)
qui retourne dans le tableau theta, la solution du syst` eme en N instants choisis ` a intervalle r egulier dans lintervalle trange. Ces instants sont m emoris es dans le vecteur t. 1
L evaluation de la fonction fct a ` lint erieur de la fonction Euler, avec les param` etres t et x, se fait par feval(fct,t,x). L etat initial du pendule d enit lamplitude du mouvement : si celle-ci est faible, la solution de l equation lin earis ee (t) = g (t) (2) l donne une bonne approximation du comportement du pendule. On va v erier la validit e de cette approximation pour di erents etats initiaux, en comparant pour chacun le r esultat de lint egration num erique de l equation du pendule avec la solution analytique du probl` eme lin earis e. ecrire une fonction function theta = PenduleLinearise(t,theta0) [...] qui calcule la solution analytique de ce probl` eme en chaque point du tableau de temps t, et pour theta0 l etat du pendule ` a linstant t(0). d enir un chier de script Exercice1.m qui trace sur un m eme graphique, pour lintervalle de temps [0,5], et pour l etat initial (0) = 0.1, (0) = 0 : la solution (t) du pendule, calcul ee par la m ethode dEuler avec 5000 points dint egration, la solution du pendule donn ee par la m ethode pr ed enie de Matlab ode45, la solution analytique de l equation lin earis ee. Recommencer pour (0) = 1, (0) = 0. Notes : On peut appeller la fonction impl ementant le sch ema dEuler appliqu e au pendule par : [tE,thetaE] = Euler(@Fpendule,trange,thetazero,N); La commande ode45, qui impl emente un sch ema de Runge-Kutta dordre 5 avec pas de temps adaptatif pour contr oler lerreur sappelle par [tref,thetaref] = ode45(@Fpendule,trange,thetazero); (pour plus de d etail sur les options de ode45, voir laide en ligne Matlab).
2
2.1
On va comparer le comportement des m ethodes dEuler explicite, implicite et symplectique sur l equation lin earis ee (2) du mouvement du pendule.
q H H Exprimer cette EDO sous la forme dun syst` eme hamiltonien ( p t = q (q ), t = p (p)). Ecrire le syst` eme d equations (3) traduisant le sch ema dEuler symplectique pour ce probl` eme, pn+1 = pn h H q (qn ) (3) q H n+1 = qn + h p (pn+1 )
Ecrire une fonction qui impl emente ce sch ema, par exemple : function theta = PL_EulerSymplectique(trange,theta0,N) [...] Tester la fonction en comparant la courbe (t) ainsi obtenue avec la solution analytique, de la m eme fa con quen 1. Remarque : on obtiendrait un autre sch ema symplectique en faisant avancer le sch ema dabord sur la composante q puis sur p au lieu du contraire, cest-` a-dire pn+1 = pn h H q (qn+1 ) q H n+1 = qn + h p (pn ) Ecrire les equations traduisant la m ethode dEuler implicite pour r esoudre ce probl` eme sous la forme dun syst` eme yn+1 = Ayn . Impl ementer ce sch ema dans la fonction : function theta = PL_EulerImplicite(trange,theta0,N) [...] 0 ) = (0.4, 0), les courbes (t, (t)) obtenus avec les m Comparer, pour (0 , ethodes dEuler explicite, implicite et symplectique, pour t dans lintervalle [0, 15], et avec 1000 pas de temps. (t)). Observer ` a pr esent les courbes ( (t), Montrer quen eet, la solution num erique (pn , qn ) de la m ethode symplectique reste sur g g 2 2 a-dire une quantit e proche de l energie lellipse p + l q h l pq = Const pour tout n. Cest-` H (p, q ) du syst` eme reste constante. Observer graphiquement l evolution de l energie en fonction du temps pour les 3 m ethodes. En utilisant la solution analytique, tracer les courbes derreur sur (t) avec t [0, 250] pour les trois m ethodes. Utiliser par exemple 10000 pas de temps. Faire varier le pas de temps et la dur ee dint egration.
2.2
Pour information, des programmes matlab impl ementant des m ethodes dint egration num erique dordre sup erieur sont disponibles sur la page de Ernst Hairer, ` a lurl http://www.unige.ch/ hairer/software.html. Ces m ethodes permettent par exemple lint egration ` a long terme du probl` eme ` a N corps (astronomie, biologie mol eculaire).
Lid ee naturelle pour am eliorer la pr ecision de la m ethode dEuler est dapprocher lint egrale dans y (tn1 + t) = yn1 + par des formules de quadrature dordre plus elev e: Euler explicite (1768) : on utilise la tangente au point (tn1 , yn1 ) : yn = yn1 + tf (tn1 , yn1 ) Runge (1895) : on prend la formule du point milieu y (tn1 + t) yn1 + tf (tn1 + dans laquelle on approche la valeur inconnue y (tn1 + t t , y (tn1 + )) 2 2
t 2 )
f (t, y (t))dt
tn1
Heun dordre 3 (1900) : on prend une formule de quadrature dordre 3 y (tn1 + t) yn1 + 2t 2t t (f (tn1 , yn1 ) + 3f (tn1 + , y (tn1 + ))), 4 3 3
2t 3 )
Ecrire et programmer les sch emas de Runge et Heun (fonctions Runge2 et Heun de m emes param` etres que Euler) 0 ) = (0.4, 0), comparer la solution Pour lintervalle de temps [0,5], et pour l etat initial (0 , des sch emas Euler explicite, Runge et Heun, avec un m eme pas dint egration assez large (par exemple pour 100 pas sur lintervalle de temps). Pour cela, on achera par exemple, pour l equation du pendule, les courbes (t, (t)) sur un m eme graphique. Comparer la pr ecision compar ee des sch emas Euler explicite et symplectique, Runge et Heun, en achant pour l equation lin earis ee, les erreurs respectives commises avec ces 4 m ethodes en fonction du pas de temps. Pour comparer la pr ecision des sch emas pour un co ut de calcul equivalent, on comparera plus pr ecis ement les erreurs en fonction du nombre d evaluations de la fonction Fpendule linearise.
Nh esitez pas ` a consulter laide en ligne (MATLAB Help dans le menu Help), tr` es bien faite, en particulier dans longlet MATLAB, la section Getting Started, et, et dans la section Mathematics, la sous-section Dierential Equations. Sinon, en ligne de commande, taper help suivi dun nom de commande matlab vous renseigne sur cette commande.
4.1
Variables
Une d eclaration typique de variable est A=1 Si une expression se termine par un point-virgule, le r esultat nest pas ach e, sinon il lest. La fonction whos liste les variables connues dans lespace de travail. On peut les eacer toutes par la commande clear, o` u choisir celles que lon eace toujours par la m eme commande.
4.2
Scripts et fonctions
Le logiciel peut sutiliser soit en mode interactif, en ecrivant les commandes en ligne, ou en utilisant des scripts (M-les), qui sont des chiers ASCII avec une extension .m que lon peut editer via linterface de Matlab, et dans lesquels on tape les instructions que lon taperait en mode interactif. Un script est ex ecut e en appelant le nom de chier sans lextension .m. Une fonction est un chier ayant une extension .m et un en-t ete sp ecial, par exemple ici le chier f.m contient function y = f(x) % incr emente x de 1 y = x+1; En invoquant la commande help f, on obtient le texte en commentaire.
4.3
Matrices
Une matrice est d eclar ee entre crochets, les el ements des colonnes sont s epar es par des espaces ou virgules, les lignes par des points-virgules. Par exemple la matrice A suivante a 3 colonnes et 2 lignes : A = [1 6 3; 2 9 5] La transpos ee se note A . On peut cr eer une matrice par concat enation, en sassurant de la compatibilit e des matrices el ementaires, par exemple B = [A A] poss` ede 6 colonnes et 2 lignes. On peut extraire certaines parties dune matrice en pr ecisant les lignes et colonnes fronti` eres, par exemple C = B(1,3:4) permet dextraire les el ements de la premi` ere ligne et des colonnes 3 et 4. On peut prendre toutes les colonnes ou toutes les lignes, par exemple D = B(:,3:4)
permet dextraire les el ements des deux lignes et des colonnes 3 et 4. La multiplication de 2 matrices A B est la multiplication matricielle classique. On peut aussi calculer la multiplication terme ` a terme par A. B . On peut g en erer un vecteur ligne contenant des nombres compris entre une valeur de d epart d et une valeur de n f , avec un incr ement dt par la commande x = [d:dt:f]
4.4
Conditionnelles if expression1 instructions1 elseif expression2 instructions2 ... else instructions end Boucle for for k = vecteur instructions end Par exemple, la boucle for k = 1:n x=x+1; end incr emente x de 1, pour k entier de 1 ` a n. Boucle while while expression instructions end
4.5
Graphiques
Pour acher sur un graphique y = f (x), o` u x et y sont donn es comme des vecteurs de m eme dimension, utiliser par exemple : plot(x,y,b+-);
Dans cette commande, le b sp ecie la couleur (blue), le + la fa con de signaler les points, et le - que deux points sont reli es par un trait plein. Pour acher plusieurs courbes sur le m eme graphique, utiliser hold on suivi des commandes plot. Pour ouvrir une nouvelle fen etre, utiliser figure. Pour fermer une fen etre, close ou close all. On peut egalement ajouter un titre (title(text)), des l egendes sur les axes (xlabel(texte) et ylabel(texte)), ajouter une grille sur le graphique courant (grid), etc.