Projet MATLAB

publicité
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
Téléchargement