MECA0029-1 Théorie des vibrations Année académique 2009
Transcription
MECA0029-1 Théorie des vibrations Année académique 2009
MECA0029-1 Théorie des vibrations Année académique 2009-2010 Séance pratique 1 1 Rappel théorique – – – – – – 2 Contraintes holonomes et non-holonomes ; Coordonnées généralisées ; Équations de Lagrange ; Énergie potentielle et énergie cinétique ; Équations du mouvement au voisinage d’une position d’équilibre ; Fréquences propres et modes propres. Exercice 1 Soit le système masses-ressorts suivant : On souhaite : 1. Calculer l’énergie cinétique et l’énergie potentielle du système ; 2. En déduire la forme matricielle des équations du mouvement ; 3. Calculer les fréquences propres et les modes propres du système ; 4. Normaliser les modes propres de sorte que leur masse généralisée soit 1 ; 5. Vérifier l’orthogonalité des modes propres par rapport aux matrices de masse et de raideur. 2.1 Calculer l’énergie cinétique et l’énergie potentielle du système L’énergie cinétique du système est la somme des contributions de chacune des masses du système. On trouve T = 1 1 1 mẋ21 + 2mẋ22 + mẋ23 2 2 2 1 L’énergie potentielle du système est la somme des contributions de chacun des ressorts du système. On trouve V = 2.2 1 1 k(x2 − x1 )2 + k(x3 − x2 )2 2 2 En déduire la forme matricielle des équations du mouvement En l’absence de forces extérieures, la linéarisation des équations de Lagrange donne Mq̈ + Kq = 0 avec 1 0 M = m 0 2 0 0 2.3 1 −1 K = k −1 2 0 −1 0 0 1 0 −1 1 x1 q = x2 x3 Calculer les fréquences propres et les modes propres du système On a le problème aux valeurs propres q = x(r) exp (iωr t) ⇒ (K − ωr2 M)x(r) = 0 det(K − ωr2 M) = 0 ⇒ on trouve les pulsations propres ω1 = 0 ω2 = r k m ω3 = correspondant aux modes propres 1 1 x(1) = 1 x(2) = 0 1 −1 2.4 r x(3) 2 k m 1 = −1 1 Normaliser les modes propres de sorte que leur masse généralisée soit 1 Les masses généralisées des modes propres sont ∗ µ1 = x(1) Mx(1) = 4m ∗ µ2 = x(2) Mx(2) = 2m on trouve donc les modes propres normalisés 1 1 1 1 1 0 x(2) = √ x(1) = √ 2m −1 4m 1 2.5 ∗ µ3 = x(3) Mx(3) = 4m x(3) 1 1 −1 =√ 4m 1 Vérifier l’orthogonalité des modes propres par rapport aux matrices de masse et de raideur On vérifie les relations ∗ x(s) Mx(r) = δrs et 2 ∗ x(s) Kx(r) = ωr δrs 3 Tutoriel MATLAB L’interface de MATLAB se présente comme suit 3.1 Command Window La fenêtre de commande est l’endroit où l’utilisateur entre des commandes, après l’invite de commande ’>> ’. On peut, entre autre, y utiliser les opérateurs d’addition ’+’, de soustraction ’-’, de multiplication ’*’ et de division ’/’. >> 2+2 ans = 4 L’opérateur d’assignation ’=’ permet de définir des variables, éventuellement de manière silencieuse en terminant l’instruction par ’;’. Une variable est un conteneur d’information, sous la forme d’un scalaire ou d’un tableau, contenant des nombres, des caractères, etc. >> a = 2+2 a = 4 >> b = a-3; >> b b = 1 Le caractère ’%’ permet d’ajouter des commentaires, ceux-ci ne sont pas pris en compte par l’interpréteur de commande. La commande ’clc’ permet de nettoyer la fenêtre de commande. >> % ceci est un commentaire >> clc % la fenêtre de commande est nettoyée 3 3.2 Aide L’utilisateur peut d’abord trouver de l’aide localement grâce aux commandes ’help’ (dans la fenêtre de commande) et ’doc’ (dans le navigateur d’aide de MATLAB). Il est utile de remarquer que la touche ’tab’ permet l’autocomplétion des commandes. >> help clc CLC Clear command window. CLC clears the command window and homes the cursor. See also home. Reference page in Help browser doc clc >> doc clc Ensuite, toujours localement, MATLAB intègre des démonstrations, il peut être utile d’y jeter un œil. >> demo Enfin, parmi les ressources disponibles sur Internet, l’utilisateur peut notamment consulter le site web : http://www.mathworks.com/products/matlab/ 3.3 Command History L’historique des commandes offre à l’utilisateur une vue sur les commandes entrées lors des la session courante et des sessions précédentes. Il permet, entre autre, de réévaluer une commande ou un groupe de commandes. %-- 20/10/09 9:05 --% 2+2 a = 2+2 b = a-3; b % ceci est un commentaire clc % la fenêtre de commande est nettoyée help clc doc clc demo Dans la fenêtre de commande, il est parcouru grâce aux touches ’↑’ et ’↓’. 3.4 Workspace L’espace de travail fourni à l’utilisateur des informations sur les variables définies à un l’instant présent. Il offre des facilités pour la gestion des variables (création, édition, suppression, etc.). Ces informations sont également accessibles par le biais des commandes ’who’ et ’whos’. La variable ’ans’ correspond à la réponse non-assignée la plus récente de MATLAB (ici il s’agit donc du résultat de la commande ’2+2’). 4 >> who Your variables are: a ans b >> whos Name a ans b Size 1x1 1x1 1x1 Bytes 8 8 8 Class double double double Attributes La commande ’clear’ sert à supprimer une variable, voire à nettoyer l’ensemble de l’espace de travail si elle est appelée avec le mot-clef ’all’. >> clear a >> who Your variables are: ans b >> clear all >> who 3.5 Current Directory et Editor Le répertoire courant est le répertoire où l’utilisateur travaille. Le contenu de ce répertoire est affiché et des facilités pour la gestion de son contenu sont fournies. L’affichage du contenu du répertoire courant est obtenu dans la fenêtre de commande à l’aide de la commande ’dir’. Pour l’instant ce répertoire est vide, à l’exception de ’.’ qui est le répertoire courant et de ’..’ qui est le répertoire parent du répertoire courant. >> dir . .. On crée un fichier ’hello.m’ à l’aide de la commande ’edit’. >> edit hello Cela ouvre l’éditeur. On entre les commandes % Script affichant ’Hello World!’ text = ’Hello World!’; disp(text); On sauve le fichier et on retourne dans la fenêtre de commande. La commande ’what’ affiche les fichiers spécifiques MATLAB du répertoire courant. >> dir . .. hello.m >> what M-files in the current directory /home/sburton/matlab hello 5 Les fichiers MATLAB du répertoire courant peuvent être appelés directement depuis la ligne de commande. L’exécution du fichier ’hello.m’ se fait en entrant son nom, sans l’extension ’.m’ dans la fenêtre de commande. L’ensemble des commandes du fichiers sont alors exécutées, c’est à dire l’assignation du texte ’Hello World!’ à la variable ’text’ et son affichage. >> hello Hello World! On constate donc >> who Your variables are: text >> text text = Hello World! L’appel à help hello renvoie le premier bloc de commentaires du fichier. >> help hello Script affichant ’Hello World!’ 3.6 Fonctions Le fichier ’hello.m’ est un script, c’est à dire un ensemble de commandes exécuté dans l’environnement de travail. Par opposition, une fonction est un ensemble de commandes exécuté dans un sous-environnement qui n’existe que pendant l’exécution de la fonction. On crée un fichier ’byebye.m’ edit byebye On y entre les commandes % Fonction affichant ’Bye bye World!’ function byebye text = ’Bye bye World!’; disp(text); end On sauve le fichier et on retourne dans la fenêtre de commandes. L’exécution du fichier ’byebye.m’ donne >> byebye Bye bye World! Dans ce cas, on constate >> who Your variables are: text >> text text = Hello World! 6 La fonction ’byebye’ se déroulant dans un sous-environnement de travail, la variable ’text’ de l’environnement de travail n’a pas été altérée par l’exécution de la fonction. Les variables globales, définies à l’aide du mot-clef ’global’ constituent une exception notable à ce comportement en ce sens que leur portée n’est plus locale mais globale. Il existe aussi des variables persistentes, définies à l’aide du motclef ’persistent’, qui conservent leur valeur entre les appels de la fonction où elles sont définies. Par sécurité, l’usage de variables globales et de variables persistentes est généralement déconseillé. Les fonctions peuvent prendre plusieurs arguments en entrée et en sortie. Par exemple, dans le cas d’une fonction f prenant trois arguments en entrée et deux arguments en sortie on écrira la fonction function [out1 out2] = f(in1,in2,in3) % le corps de la fonction end et on appelera [out1 out2] = f(in1,in2,in3) De nombreuses fonctions sont intégrées nativement dans MATLAB, par exemple on retrouvera les fonctions mathématiques : – pi : renvoie la valeur de π ; – sin : renvoie le sinus d’un angle en radians ; – sqrt : revoie la racine d’un nombre ; – ceil : renvoie l’arrondi supérieur d’un nombre. L’aide et sa fonction de recherche permettent de trouver et de comprendre les fonctions de manière efficace. 3.7 Structures de contrôle MATLAB intègre des structures de contrôle parmi lesquelles on retrouve : – if : contrôle conditionnel sur des expressions logiques ; – switch : contrôle conditionnel sur une expression logique ; – for : contrôle de boucle sur un compteur ou un itérateur ; – while : contrôle de boucle sur une expression logique. L’aide permet de comprendre les structures de contrôles de manière efficace. 3.8 Vecteurs et matrices MATLAB est un langage de programmation qui permet la manipulation de scalaires, de vecteurs, de matrices et de tableaux d’ordre plus élevé encore. Ainsi, on peut faire des opérations avec des matrices et, en toute généralité, les fonctions peuvent prendre en argument des matrices. On peut définir des vecteurs de nombreuses manières >> a = [1 5 2 4 3] a = 1 5 2 4 3 >> b = 1:2:10 7 b = 1 3 5 7 9 >> c = linspace(-pi,pi,5) c = -3.1416 -1.5708 >> d = rand([1 5]) d = 0.2785 0.5469 0 1.5708 3.1416 0.9575 0.9649 0.1576 On peut accéder aux éléments d’un vecteur en utilisant les indices linéaires (ceux-ci vont de ’1’ pour le premier élément à ’end’ pour le dernier élément) >> a(1) ans = 1 >> b([2 end]) ans = 3 9 >> c(3:end-1) ans = 0 1.5708 >> d(a(2)) ans = 0.1576 On peut modifier les éléments d’un vecteur (’:’ utilisé seul revoie l’entierté d’une dimension) >> a(1) = 10 a = 10 5 2 4 >> b([end+1 10]) = [11 12] b = 1 3 5 7 3 9 11 >> c([1 2 3]) = c([3 2 1]) c = 0 -1.5708 -3.1416 >> d(:) = 2 d = 2 2 2 2 1.5708 0 0 0 12 3.1416 2 Entre autres, la fonction ’length’ renvoie la longueur d’un vecteur et la fonction ’sort’ permet de trier les valeurs d’un vecteur (le second argument de sortie repérant les index correspondants dans la configuration initiale). 8 >> length(a) ans = 5 >> [a index] = sort(a) a = 2 3 4 5 index = 3 5 4 2 10 1 On peut aussi définir des matrices >> A = [1 2;3 4] A = 1 2 3 4 >> B = eye(3) B = 1 0 0 1 0 0 0 0 1 >> C = zeros(2,3) C = 0 0 0 0 0 0 >> D = diag([7 1 3]) D = 7 0 0 0 1 0 0 0 3 On peut accéder aux éléments d’une matrice en utilisant les indices de ligne et de colonne, ou les indices linéaires >> A(2,1) ans = 3 >> B(1,:) ans = 1 0 0 >> C(:,end) ans = 0 0 >> D(9) 9 ans = 3 On peut évidemment modifier les éléments d’une matrice. Entre autres, la fonction ’size’ renvoie les dimensions d’une matrice et la fonction ’find’ permet de trouver les indices linéaires correspondant aux valeurs non-nulles d’un tableau. >> size(A) ans = 2 2 >> find(A > 2) ans = 2 4 >> A(find(A > 2)) = 0 A = 1 2 0 0 Remarquons trois pièges courants, d’abord la différence entre l’opérateur de multiplication matricielle ’*’ et l’opérateur de multiplication élément par élément ’.*’, ensuite la différence entre l’opérateur de transposition ’.’’ et l’opérateur de transposition et complexe-conjugué ’’’ et enfin l’existence de l’élément vide ’[]’ repérable à sa longueur nulle. 3.9 Graphiques MATLAB offre des fonctionnalités puissantes pour la création de graphiques. L’affichage le plus simple se fait à l’aide de la fonction ’plot’. La gestion des différentes figures se fait à l’aide de la fonction ’figure’. Pour afficher plusieurs courbes sur une même figure, on active le maintient du graphique à l’aide de la commande ’hold on’. Ce maintient est désactivé à l’aide de la commande ’hold off’. Pour sauver une figure on utilise la fonction ’print’. Pour fermer une figure on utilise la fonction ’close’, pour fermer toutes les figures on entre la commande ’close all’. 3.10 Entrées/sorties Les sortie écran et entrée clavier se font respectivement à l’aide des fonctions ’disp’ et ’input’. La sauvegarde et le chargement des variables se font respectivement à l’aide des fonctions ’save’ et ’load’. Pour une gestion plus souple de la lecture et de l’écriture d’un fichier, on peut être amené à utiliser les fonctions ’fopen’, ’fclose’, ’fprintf’, ’fscanf’, ’fgetl’ et ’fgets’. La concaténation de chaînes de caractères se fait à l’aide de l’opérateur ’[]’. Il peut être utile de transformer des nombres en chaînes de caractères et vice versa à l’aide des fonctions ’num2str’ et ’str2num’. Pour une gestion plus souple des chaînes de caractères, on peut employer les fonctions ’sprintf’ et ’sscanf’. 10 3.11 Ça coince. . . Il n’y a pas que l’aide qui puisse aider l’utilisateur en cas de problème. D’abord en cas de mauvaise utilisation de MATLAB, un message d’erreur apparaît. Par exemple, le sinus du caractère ’a’ n’a pas de sens, un message d’erreur explicite est renvoyé. >> sin(’a’) ??? Undefined function or method ’sin’ for input arguments of type ’char’. Ensuite, l’éditeur comprend un analyseur syntaxique mettant en évidence – en soulignant en rouge et dans la marge de droite – les avertissements et les erreurs d’un fichier qui y est édité. Une aide contextuelle à la résolution de ces problèmes est fournie. Enfin, MATLAB intègre un debugger intégré à l’éditeur. Il permet de définir des breakpoints (des points d’arrêt) dans le fichier en cliquant dans la marge de gauche de l’éditeur (c’est presque l’équivalent d’une commande ’keyboard’ ajoutée au fichier). Lors de l’exécution du fichier l’utilisateur prend alors le contrôle aux différents breakpoints. Il peut y consulter les variables de l’environnement local, éventuellement en créer, modifier ou supprimer. Après quoi il peut continuer l’exécution via les contrôles du debugger, soit pas à pas (c’est l’équivalent de l’usage de la commande ’dbstep’), soit jusqu’au prochain breakpoint (c’est l’équivalent de l’usage de la commande ’dbcont’). Il est utile de mentionner l’existence des « nombres » ’i’ (le nombre imaginaire), ’Inf’ (l’infinité positive) et ’NaN’ (le nombre indéfini ou « Not-a-Number »). Il est également utile de mentionner l’existence des fonctions ’is*’ permettant de détecter l’état d’une entité (par exemple les trois nombre précédents peuvent être testés avec les fonctions ’isreal’, ’isinf’ ou ’isnan’). Pour terminer il est important de prendre conscience que la précision de calcul n’est pas infinie (c’est facilement observable avec la fonction ’eps’). 3.12 Ça traîne. . . Pour tester la performance d’un code et éventuellement l’améliorer, l’utilisateur peut tirer avantage du profiler de MATLAB. Celui-ci se contrôle via la commande ’profile’, ou directement via son interface graphique (accessible par la commande ’profile viewer’). Le profiler donne des statistiques sur le nombre d’appels et le temps passé lors de l’exécution d’un code. Ces informations permettent de mettre en évidence les parties les plus gourmandes du codes. Pour l’analyse d’un code très rapide, il peut se révéler utile de répéter celui-ci un certain nombre de fois, de manière à observer des temps d’exécution non-négligeables. 4 Exercice 2 Soit le système masses-ressorts suivant : 11 On souhaite : 1. Calculer la forme matricielle des équations du mouvement ; 2. Calculer les fréquences propres et les modes propres du système. 4.1 Calculer la forme matricielle des équations du mouvement En l’absence de forces extérieures, on trouve Mq̈ + Kq = 0 avec M = m 4.2 1 0 1 .. 0 . 1 2 −1 K = k 0 −1 2 .. . 0 .. .. . . −1 −1 2 x1 x2 q= . .. xn Calculer les fréquences propres et les modes propres du système Avec MATLAB, pour n = 20, m = 1kg et k = 1N/m, on trouve % n m k Parametres = 20; % Le = 1; % La = 1; % La du probleme nombre de masses masse d’une masse [kg] raideur d’un ressort [N/m] % Construction des matrices M et K M = m*eye(n,n); K = zeros(n,n); K(1,1) = k; % Le ressort encastre a droite K(end,end) = k; % Le ressort encastre a gauche for i = 1:n-1 K([i i+1],[i,i+1]) = K([i i+1],[i,i+1])+k*[1 -1;-1 1]; end % Les autres ressorts % Calcul des pulsations propres et des modes propres [V,D] = eig(K,M); D = sqrt(diag(D)); % Affichage des frequences propres figure,plot(1:n,D/(2*pi),’o’) xlabel(’index du mode’) ylabel(’frequence [Hz]’) title(’Frequences propres’) 12 Frequences propres 0.35 0.3 frequence [Hz] 0.25 0.2 0.15 0.1 0.05 0 0 2 4 6 8 10 12 index du mode 14 16 18 20 % Affichage des premiers modes propres nm = min(5,n); figure,plot(1:n,V(:,1:nm)) xlabel(’index de la masse’) ylabel(’deplacement [m]’) title(’Modes propres’) legend(num2str([1:5]’)) Modes propres 0.4 1 2 3 4 5 0.3 deplacement [m] 0.2 0.1 0 −0.1 −0.2 −0.3 −0.4 0 2 4 6 8 10 12 index de la masse 13 14 16 18 20