27 février 2004
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
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 :
> mafonc(1)
3
ans =
-0.1585
> x3
x3 =
Result is undefined
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
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
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).
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