UPMC - Licence Elec. L2 S2 UE Calcul Scientifique ; initiation à MATLAB (LE205) Projet MATLAB I. Introduction Objectif : le but de ce projet est de réaliser une simulation d’un oscillateur modélisé comme une masse suspendue à un ressort. Nous étudierons plusieurs cas : - les oscillateurs non amortis - les oscillateurs amortis - les oscillateurs forcés Vous pouvez consulter plusieurs sites pour les aspects théoriques, dont : - http://www.uel-pcsm.education.fr/consultation/reference/physique/syst_oscillants/ - http://www.edunet.tn/ressources/resdisc/physique/nabeul/franosc/oscfexp.htm Exemple d’un oscillateur amorti Pour cela, vous utiliserez les notions abordées en cours mais il vous sera demandé d’aller encore plus loin. Vous aurez donc besoin de votre cerveau et du manuel HELP de matlab (à utiliser sans modération). ¾ Lisez bien le document présent afin de bien comprendre ce qui vous est demandé. ¾ Suivez bien les recommandations qui y sont faites et suivez le cahier des charges à la lettre. ¾ Des obligations vous sont fournies, vous devez absolument les respecter. ¾ Des conseils vous sont aussi fournis tout le long du texte, vous pouvez les utiliser. ¾ Ecrivez à la main sur ce document l’analyse du fonctionnement de votre programme qui vous sera demandée à la fin de la première phase de programmation. Vous devrez donc rendre cet énoncé à la fin de votre projet. ¾ Commentez vos programmes : pas de longs discours mais des informations pertinentes. La rigueur de votre travail sera un élément déterminant pour la notation de votre travail. II. Déroulement du projet Le projet de déroule en deux phases : 1. La première phase consiste en la programmation basique du programme principal et des fonctions qui permettent de simuler le système et d’en réaliser une petite animation. C’est le minimum qui vous sera demandé. 2. La deuxième phase consiste en l’amélioration de ce programme. Ces améliorations sont multiples et vous seront proposées dans un ordre de difficulté croissant. Néanmoins, à partir du moment où la première phase est réalisée, vous êtes libre de traiter la phase 2 comme bon vous semble. III. Cahier des charges – première phase Suivez rigoureusement ce cahier des charges. Considérez qu’il s’agit de la commande d’un acheteur qui y a défini ses besoins : vous ne pouvez pas vous en écartez. III.1. Fonctionnement global Votre programme doit impérativement s’articuler autour d’un programme principal et utiliser des fonctions nommées comme l’indique le synopsis de la figure 1. Déclaration et initialisation des variables Saisie des paramètres du système oscillant Simulation du système oscillant Fonction syst_libre : modéle de l’oscillateur libre non amorti Fonction simulation Affichage des résultats et des courbes Fonction syst_amorti : modéle de l’oscillateur libre amorti Fonction syst_force : modéle de l’oscillateur libre amorti en régime forcé Figure 1 : Synopsis du programme à réaliser III.2. Les différentes parties du programme : III.2.1 Le programme principal Le programme principal doit fonctionner comme l’indique l’algorithme de la figure 2. Obligations : • Le programme principal devra être contenu dans un fichier nommé principal.m. • La fonction simulation sera dans un fichier séparé éponyme, simulation.m. Elle contiendra les appels aux équations différentielles régissant le mouvement de l’oscillateur sous la forme de Cauchy. Elle aura en entrée tous les paramètres nécessaires à leur appel via ode23() ou ode45(), ainsi que ceux nécessaires à la simulation. En sortie, elle donnera essentiellement les positions x et les vitesses x’ simulées de l’oscillateur, ainsi que les valeurs temporelles des échantillons dans l’intervalle de temps fourni. • La fonction affichage sera dans un fichier séparé éponyme, affichage.m. Elle réalisera les affichages des courbes d’évolution de la position et de la vitesse de l’oscillateur en fonction du temps. Déclaration et initialisation des variables Saisie des paramètres de l’oscillateur et de la simulation Lancer simulation Appel à la fonction simulation Appel à la fonction affichage quitter Autre paramètre à modifier Fonction simulation Fonction affichage recommencer Figure 2 : synopsis du programme principal • La saisie des différents paramètres devra se faire via une interface sous forme de question/réponses. • Initialement, les paramètres de la simulation seront : o Oscillateur : masse, m = 2kg, raideur du ressort, h = 0.5N/m, coefficient d’amortissement, c=1Ns/m. o L’amplitude, la pulsation et la phase de la stimulation (force appliquée à la masse) : A= 1.4N, w=0,5rad/s et ϕ=0rad ; on considérera un régime forcé de type sinusoïdale : F(t)=Asin(wt+ϕ). o Conditions initiales : x(0) = 1m , x'(0) = 0 m/s. o Choix du système à simuler : système non amorti o Intervalle de temps : [0-10] secondes Chacun pourra être modifié via un menu. L’affichage à l’écran pourra se présenter soit sous forme textuelle (figure 3, à gauche) soit sous forme graphique (figure 3, à droite). Nous vous conseillons fortement la forme graphique. Conseils : • Ne vous inquiétez pas dans un premier temps des appels aux fonctions simulation et affichage. • Réalisez ce qu’il faut pour changer un seul paramètre, puis incluez-le dans la boucle. Ensuite, faîtes les autres paramètres. Enfin, faîtes les options « quitter », puis « lancer la simulation » (qui contiendra les appels à simulation et affichage, cf. sections III.2.2 et III.2.3). Les paramètres de la simulation sont : 1. masse : 2kg 2. raideur du ressort : 0.5N/m 3. coefficient d’amortissement : 1.4Ns/m 4. amplitude stimulation : 2N 5. pulsation stimulation : 0.5rad/s 6. phase stimulation : 0rad 7. position initiale : 1m 8. vitesse initiale : 0m/s 9. intervalle de temps : [0 10]s 10. méthode : ode23 11. choix du système : non amorti Donnez le numéro du paramètre à modifier, ou tapez (s) pour lancer la simulation, ou (q) pour quitter le programme. Figure 3 : menus permettant la modification des paramètres : à gauche sous forme textuelle, à droite sous forme graphique III.2.2 La fonction simulation Dans la fonction simulation, nous allons réaliser la simulation de l’oscillateur suivant : Un ressort élastique, de masse négligeable, de raideur h, de longueur à l’équilibre y, a son extrémité supérieure S fixe. A l’extrémité inférieure est fixé un corps M assimilable à un point matériel de masse m. Le rôle unique de l’amortisseur D, de masse négligeable, lié à M, est d’exercer sur le corps la force : où v désigne la vitesse de M et h un coefficient de frottement fluide, positif. Les mouvements de M sont verticaux. A l’équilibre, l’abscisse l=x-y de M est nulle. On a alors : - en cas d’oscillations libres non amorties (c=0 et F=0) : m.l’’ + h.l = 0 - en cas d’oscillations libres amorties (c≠0 et F=0) : m.l’’ + c.l’ + h.l = 0 - en cas d’oscillations libres amorties et forcées (c≠0 et F≠0) : m.l’’ + c.l’ + h.l = F avec F=Asin(wt+ϕ) Obligations : • La fonction simulation devra être contenue dans un fichier nommé simulation.m. • Les 3 modèles de Cauchy seront codés dans 3 fonctions séparées : syst_libre.m, syst_amorti.m et syst_force.m. • Il est interdit d’utiliser des variables globales ; vous devez faire passer les paramètres des modèles comme arguments d’entrée. • Les simulations devront se faire selon la méthode choisie par l’utilisateur : ode23 ou ode 45. • Dans le cas d’oscillations non forcées, vous devrez inclure un test pour vérifier si les conditions initiales ne sont pas nulles (dans ce cas, il n’y aura pas d’oscillations). • Selon le choix de l’utilisateur (réalisé dans le programme principal), vous devrez simuler le système non amorti, le système amorti ou le système amorti forcé. • En sortie, vous renverrez les positions et les vitesses de la masse pour la (des) simulation(s) réalisée(s). Conseils : • Pour simplifier votre code, notamment pour le choix des méthodes (ode23/ode45), nous vous conseillons d’utiliser la fonction Matlab « feval » (help feval), qui permet d’évaluer une fonction entrée en premier argument ; exemple : t=1 :2*pi/30:10 ; F=@sin; ysin=feval(F,t) ; F=@cos; ycos=feval(F,t) ; plot(t,ysin,t,ycos) ; III.2.3 La fonction affichage La fonction affichage gèrera l’affichage des résultats sous forme graphique : • les courbes d’évolution des positions et des vitesses de la masse • une animation du système (masse et ressort) Obligations : • La fonction affichage devra être contenue dans un fichier nommé affichage.m. • Les courbes des positions et des vitesses pourront soit être dans 2 fenêtres séparées, soit dans une seule mais dans 2 graphes séparés (subplot). Ce choix devra être laissé à l’utilisateur. • Les courbes devront comportées : titre, noms des axes, légende,… • Enfin, vous devrez réaliser une animation graphique du système représentant l’évolution de la masse dans l’espace comme sous la figure 4 : o o o o le ressort sera formé par 10 périodes d’une fonction sinusoïdale. la masse par un point « marqué » par un cercle dont vous aurez augmenté la taille (cf. help plot) ; pour modifier la taille d’un marqueur (« marker »), vous devez modifier le paramètre « Markersize » (un exemple est donné dans l’aide pour le paramètre « LineWidth »). il est nécessaire d’utiliser « hold on/off » pour afficher à la fois la masse et le ressort sur le même graphique. la fonction « axis » vous permettra de fixer les valeurs limites des axes (de sorte à les garder constantes). La figure 5 donne un synopsis de l’algorithme à développer. 5 point S point M Figure 4 : animation du système « masse-ressort » Entrées : - positions du point M par rapport au point 0 - positions temporelles des échantillons Calcul des vecteurs contenant les positions en x et en y du ressort (fonction sinus sur 10 périodes sur un intervalle en y=[0 1]) FOR pour chaque position du point M Effacement de la figure (help clf) Affichage de la masse M Affichage du ressort ; il est nécessaire d’appliquer : - une translation (addition d’un scalaire) au point S - une homothétie (multiplication par un scalaire) pour que la longueur du ressort corresponde à la distance entre M et S Pause de quelques millisecondes (10ms par exemple) permettant la visualisation de l’animation (help pause) Figure 5 : synopsis de l’animation du système « masse-ressort » 6 IV. Cahier des charges – seconde phase Pour chacune de ces améliorations, nous vous conseillons de réaliser des fonctions dans des fichiers séparés, qui seront appelées, selon le besoin, dans principal.m, simulation.m ou affichage.m. IV.1 Améliorations au niveau de l’affichage : • Dans la fonction affichage, laissez le choix à l’utilisateur de quelles couleurs, il veut représenter ses courbes (parmi celles possibles ; help plot) via un menu. • Dans le cas d’un système amorti, représentez l’enveloppe de la courbe. Il s’agit de relier les maxima entre eux par des droites (help line). De même, pour les minima. Pour détecter la position des optima (minima et maxima), il s’agit de détecter le passage par zéro de la dérivée, et de noter le signe de la dérivée seconde en ces points (si elle est positive, il s’agit d’un minimum, si elle est négative, c’est un maximum). Attention, il est possible que le système soit en régime critique, on ne pourra pas dessiner d’enveloppe : il faudra détecter ce cas avant de dessiner ou non l’enveloppe. La détection des optima devra faire l’objet d’une fonction dans un fichier séparé. Le régime critique est caractérisé par les paramètres du système ; on observe alors que le discriminant est nul : ∆ = λ2-ω02 = 0 avec : λ = c / (2.m) ω02 = h / m • Lors de l’animation, faîtes en sorte que le graphe de la position de la masse apparaîsse à fur et à mesure dans un graphe à côté (comme s’il s’agissait d’un enregistrement simultanée) : 7 IV.2 Améliorations au niveau de la simulation : • Ajouter une option (dans le choix du système à simuler) qui permettrait de simuler les 3 systèmes avec les mêmes paramètres, puis en afficher le courbes de sorte à pouvoir les comparer. • Dans le cadre des oscillations amorties, ajouter une option qui permet d’automatiser le réglage de l’intervalle de temps (selon le nombre de pseudo-périodes ou suivant le décrément logarithmique que l’on veut observer ; attention la pseudo-période et le décrément n’ont de sens qu’en régime pseudo-périodique). • Dans le cadre des oscillations forcées, nous voudrions stimuler le système avec d’autres fonctions, notamment une fonction « créneaux » et une fonction « triangle » (en utilisant l’amplitude, la phase et la période de la fonction « sinus » précémment employée) ; vous aurez à cœur de créer deux fonctions qui associent à une valeur t, la valeur de la force appliquée au système. • Dans le cadre des oscillations forcées, créez une fonction analyse_reg_permanent.m qui sera appelée dans l’affichage et qui calcule numériquement et renvoie l’amplitude d’amplification et le déphasage en régime permanent. L’affichage de ces résultats devra se faire dans la fonction affichage.m. Par exemple, dans la courbe ci-dessous, le régime permanent est atteint au-delà de 4s (attention, ce ne sera pas forcément le cas dans votre simulation ; à vous de tester si le régime permanent est atteint). L’amplitude du signal est alors de 0,52. La courbe 1 représente une oscillation amortie. La courbe 2 est une oscillation libre non amortie. La courbe 3 est une oscillation forcée amortie. 8