Vous êtes sur la page 1sur 9

MATLAB VADE-MECUM

pour étudiants mécaniciens


Prof. Pierre Dehombreux et Olivier Verlinden
Faculté Polytechnique de Mons.

27 février 2004

1 Les programmes de calcul matriciel


MATLAB est devenu un standard en matière de calcul numérique et matri-
ciel. La disponibilité de très nombreuses librairies ou toolboxes sous ce format en
assurent la situation dominante, même si plusieurs autres logiciels concurrents com-
merciaux (O-Matrix, ...) ou libres (Octave, MathViews, RLaB, SciLab...) présentent
des fonctionnalités équivalentes, souvent à coût réduit. Le programme Octave consti-
tue l’alternative la plus sage, car presque entièrement compatible avec MATLAB.
Octave fait partie en standard de toutes les distributions Linux. Le programme
Scilab, développé par l’INRIA en France, est quant à lui de loin le plus complet
mais présente malheureusement de nombreux écarts de syntaxe avec MATLAB (un
convertisseur est néanmoins fourni).
Il peut arriver que certaines fonctions soient sujettes à des erreurs de syntaxe,
suite à une conversion imparfaite entre MathViews et MATLAB.

2 Les opérations élémentaires


Effectuons quelques opérations élémentaires (introduire uniquement les opérations + * - /
suivant le signe > ) et remarquons que les nombres complexes peuvent être utilisés
sans restriction :
> 2*4+2
ans =
10
> sqrt(-1)
ans =
0+1j

Des variables peuvent être définies en cours de session, sans qu’il soit nécessaire de variables
les déclarer au préalable. Lorsque l’on termine une commande par un point-virgule,
l’opération est effectuée sans que son résultat ne soit affiché.

1
> rayon = 1e-1;
> surface = pi * rayon * rayon
surface =
0.0314

Le nombre de décimales par défaut n’est généralement pas satisfaisant : il faut décimales
utiliser la commande format suivie de long, long e pour obtenir davantage de
chiffres significatifs. format short permet de revenir à un affichage plus condensé.
Les matrices peuvent être introduites entre crochets ”[” et ”]”. Pour accéder à
un élément d’une matrice, il faut utiliser les parenthèses ”(” et ”)”. Les éléments vecteurs
d’une même ligne sont séparés par un espace et les lignes sont séparées par des matrices
points-virgules. Les lignes et les colonnes d’une matrice peuvent être adressées di-
rectement. Le caractère ” :” symbolise l’ensemble des indices utilisés dans une ligne,
une colonne ou une matrice. Il permet également de générer des suites de nombres.
> MAT = [ 1 2 3; 4 5 6; 7 8 10]
MAT =
1 2 3
4 5 6
7 8 10
> vecteur = [10; 0; 1000]
vecteur =
10
0
1000
> lig = MAT(1,:)
lig =
1 2 3
> col = MAT(:,1)
col =
1
4
7
> 1:10
ans =
1 2 3 4 5 6 7 8 9 10
> 1:0.3:2
ans =
1 1.3000 1.6000 1.9000

Les opérations vectorielles et matricielles peuvent être effectuées directement,


comme de simples opérations arithmétiques :
> somme = vecteur - 2*col

2
somme =
8
-8
986
> lig * col
ans =
30
> produit = MAT * vecteur
produit =
3010
6040
10070

L’utilisation d’un point ”.” avant un opérateur l’appliquera entre les éléments des opérations
vecteurs ou matrices qu’il met en relation plutôt que sur ces vecteurs ou matrices : terme à
terme
> MAT.*MAT
MAT.*MAT
ans =
1 4 9
16 25 36
49 64 100

Transposition
L’opération de transposition d’une matrice réelle est obtenue en adjoignant à la Conjugué
matrice une apostrophe ’. Il faut se méfier de cet opérateur lorsque il appliqué à des
matrices complexes.
Si A est une matrice complexe,
A’ hermitienne (conjuguée et transposée) de A
A.’ transposée de A
conj(A) conjuguée de A
La définition et l’utilisation d’une fonction s’effectue assez simplement, mais Définition
nécessite la création d’un fichier d’extension .m de même nom que la fonction (ce d’une
fichier doit défini avec un éditeur, au format texte standard). Un fichier de nom fonction
mafonc.m devra contenir la définition de la fonction suivant l’exemple :

function resultat = mafonc (x)


x3 = x*x*x;
resultat = x3 + sin(x) - 2;
end;

Une fois sauvegardée et compilée, la fonction peut être utilisée :

> mafonc(1)

3
ans =
-0.1585
> x3
x3 =
Result is undefined

Le nombre d’arguments de la fonction peut être quelconque, et la définition des


types (réel, vecteur, matrice, fonction) n’est nécessaire ni pour la fonction, ni pour
ses arguments. Il est possible de définir des variables locales au sein de la fonction
(comme x3). MATLAB ne reconnaı̂t que des fonctions et ne permet pas de définir
des procédures.
Les variables logiques prennent les valeurs 1 ou 0 selon qu’elles indiquent vrai opérations
ou faux. Les comparaisons entre variables s’effectuent à l’aide des opérateurs >, >=, logiques
<, <=, == (égalité), ∼= (non égalité). Les opérateurs ”et” et ”ou” sont introduits au
moyen de & et |, respctivement.
MATLAB supporte les structures de test : if then else

x=input(’Valeur’);
if x > 5
’x superieur a 5’
else
if x == 5
’x egale 5’
else
’x est inferieur a 5’
end
end

MATLAB supporte les structures itératives telles que : for while

x = 1:5
for i = 2:4
x.^i
end
% Commentaire: fournit les carrés, cubes et quatrièmes
% puissances des nombres de 1 à 5
i=2;
while i<5
x.^i
i=i+1;
end

4
3 Résolution de problèmes numériques classiques
La résolution d’un système A.x = b d’équations linéaires utilise l’opérateur \ à Résolution
distinguer de /qui reste celui de la division “classique” de
systèmes
> x = MAT \ vecteur
linéaires
x =
993.33
-2006.7
1010

La résolution du problème aux valeurs propres A.x = λ B.x s’effectue à l’aide de Problème
la fonction eig(A,B) qui retourne deux variables val pour les valeurs propres λ et aux valeurs
vec pour les vecteurs propres x : propres
> [vec,val] = eig (A,B);

Les valeurs propres ne sont pas triées par ordre croissant ou décroissant ! Il faut
utiliser la fonction sort pour le faire si nécessaire !
Un polynôme ak xk +. . .+a2 x2 +a1 x+a0 est défini par un vecteur ligne reprenant Polynôme
ses coefficients caractéristiques [ak , . . . , a2 , a1 , a0 ]. Il peut être évalué rapidement par
la fonction polyval.
> pol=[1,2,3,4]
pol =
1 2 3 4
> polyval(pol,-1)
ans =
2

La recherche des racines d’un polynôme s’effectue à l’aide de la fonction roots qui Racines de
prend comme argument le vecteur de ses coefficients caractéristiques. Par exemple, polynômes
pour rechercher les racines du polynôme x3 + 2x2 + 3x + 4, on introduira les com-
mandes suivantes :
> pol=[1,2,3,4]
pol =
1 2 3 4
> roots(pol)
ans =
-1.6506+ 0.0000j
-0.1747+ 1.5469j
-0.1747- 1.5469j

5
La recherche au sens des moindres carrés des coefficients d’un polynôme à partir Régression
de valeurs y(x), s’effectue à l’aide de la fonction polyfit qui prend comme argument polyno-
le vecteur des valeurs y exprimées pour les abscisses x. Par exemple, pour trouver miale
les coefficients caractéristiques de la meilleure droite passant par les points de coor-
données (1,10), (3,18) et (10,37), il suffit d’introduire les commandes suivantes :
> x=[1 3 10];
> y=[10 18 37];
> polyfit(x,y,1)
ans =
2.92537 8.01493

L’équation de la droite est donc du type y = 2.925x + 8.015.


La recherche des zéros d’une fonction non linéaire s’effectue à l’aide de la procédure Zéro d’une
rroots qui ne fait pas partie de la librairie standard (il existe un fichier rroots.m : fonction
> racines=rroots(’mafonc’,-1,10,100,1e-6)
> racines =
1.0434

La liste d’appel de rroots comprend successivement : le nom de la fonction dont on


veut obtenir les zéros, les bornes minimale et maximale entre lesquelles les racines
sont recherchées, le nombre de sous-intervalles dans lesquels les racines sont détectées
par bisection, la tolérance sur la valeur de la fonction en-dessous de laquelle le zéro
est accepté.

4 Résolution de quelques problèmes de vibrations


4.1 Recherche des pôles
Soit un système non amorti, dont les équations du mouvement libre s’écrivent
[M]{q̈} + [K]{q} = 0 (1)
La recherche des pôles consiste à rechercher les racines du polynôme caractéristique
en p, donné par
det p2 [M] + [K] = 0
¡ ¢
(2)
Il est possible d’obtenir le polynôme en λ (=p2 ), par la commande poly, et d’en seis01,
extraire les racines par la commande roots dmex
> polcar=poly(-inv(M)*K)
> lambda=roots(polcar)
> poles=sqrt(lambda)

6
En effet, la commande poly(A) recherche les coefficients du polynôme caractéristique
de la matrice A, à savoir le polynôme en λ, donné par
det ([A] − λ[I]) (3)
ce qui donne dans le cas précédent
¡ ¢
det −[M]−1 · [K] − λ[I] (4)
équivalent à
det ([K] + λ[M]) (5)
qui correspond bien au polynôme caractéristique si λ = p2 .
Le même résultat peut être obtenu encore plus rapidement à l’aide de la com-
mande eig(A), qui recherche directement les valeurs propres, soit les racines de
l’équation caractéristique :
> lambda=eig(-inv(M)*K)
> poles=sqrt(lambda)

La commande eig peut également être utilisée sous la forme eig(A,B), qui
recherche les racines de l’équation en λ
det ([A] − λ[B]) = 0 (6)
Les pôles peuvent alors être déterminés comme suit
> lambda=eig(K,-M)
> poles=sqrt(lambda)

Si le système est non amorti, les équations du mouvement libre font cette fois
intervenir une matrice d’amortissement
[M]{q̈} + [C]{q̇} + [K]{q} = 0 (7)
et peuvent être remises sous la forme suivante
µ ¶ µ ¶ µ ¶ µ ¶
M 0 q̇ 0 −M q
· + · =0 (8)
0 M q̈ K C q̇
équivalente à un système du premier ordre
Aẏ + By = 0 (9)
dont les pôles peuvent être déterminés par eig(B,-A).
> Z=zeros(size(M));
> A=[M Z;Z M];
> B=[Z -M;K C];
> poles=eig(B,-A)

7
4.2 Vecteurs et valeurs propres
Pour un système non amorti, le problème aux valeurs propres consiste à recher-
cher les pulsations propres ωi et les vecteurs propres ψ i , tels que
¡ 2
−ωi [M] + [K] {ψ i } = 0
¢
(10)

On peut le résoudre avec MATLAB en utilisant la fonction eig avec une syntaxe
un peu différente pour récupérer à la fois les valeurs et vecteur propres.

> [Vec,Omega2]=eig(K,M)
> Omega=sqrt(diag(Omega2))

Les colonnes de Vec donnent les vecteurs propres alors que les termes diagonaux de
Omega2 donnent les pulsations au carré. Notez que le signe moins a disparu parce
que les racines ne sont pas les pôles au carré mais les pulsations au carré (p = jω).
Pour obtenir les pôles et vecteurs propres complexes d’un système amorti, on
procède de la même manière sur le système équivalent du premier ordre

> Z=zeros(size(M));
> A=[M Z;Z M];
> B=[Z -M;K C];
> [Vec,poles]=eig(B,-A)

Notez toutefois que seules les N premières lignes des vecteurs propres doivent être
récupérées (Les N dernières sont les N premières, multipliées par le pôle correspon-
dant).

4.3 Intégration numérique


Le Service de Mécanique rationnelle, Dynamique et Vibrations met à votre dis-
position la routine newmark (fichier newmark.m), pour l’intégration d”équations de
la forme Intégration
[M]{q̈} + [C]{q̇} + [K]{q} = {F(q̇, q, t)} (11) selon
Newmark
correspondant à un système mécanique soumis à des efforts géneralisés {F} qui
peuvent dépendre du temps t, des positions q et des vitesses q̇. La routine utilise le
schéma de Newmark, bien adapté aux équations de systèmes mécaniques. Consulter
les exemples fournis dans les fichiers mckf*.m.
MATLAB fournit également des procédures d’intégration (ex : ode15s) mais
celles-ci nécessitent un passage au premier ordre.

8
5 Trucs et astuces
En pratique, les commandes seront programmées dans un fichier texte, soit direc-
tement dans l’éditeur de la fenêtre ”Program”, soit à l’aide d’un éditeur indépendant.
Lors de l’exécution d’un programme, il arrive fréquemment que les résultats diary
défilent à l’écran trop rapidement que pour pouvoir être lus et analysés. Pour
remédier à ce problème, il est intéressant d’enregistrer dans un fichier les commandes
et les résultats à l’aide de la commande diary. Ainsi le bloc d’instructions :

> diary(’session.log’)
> fem_s2
> diary off

ouvre le fichier de nom session.log dans le répertoire courant, exécute les com-
mandes contenues dans le fichier fem_s2.m et ferme ensuite le fichier session.dry
qui contient l’historique des commandes et des résultats produits par l’exécution du
fichier fem_s2.m.
Les instructions who et whos fournissent une liste des variables et des fonctions who
définies dans la session en cours. La fonction sans argument clear réinitialise MAT- whos
LAB en détruisant la définition des variables créées jusqu’alors. clear

Vous aimerez peut-être aussi