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

Documents pareils