Généralités sur matlab
2.1 Lancement de Matlab
L’interface Matlab se compose d’une fenêtre principale
divisée en quatre sous-fenêtres. A
gauche, il y a la fenêtre Current Folder qui gère
l’emplacement des fichiers. Celui-ci sera utile
pour le travail avec les m-files. Au centre, il y a une
grande fenêtre : Command Window. La
Command Window est la fenêtre d’interaction avec Matlab. En
haut à droite, il y a la fenêtre
Workspace qui permet de gérer les variables utilisées. Nous
y reviendrons au paragraphe
2.3. En bas à droite la fenêtre Command History indique les
dernières commandes
effectuées.
Figure 1- Lancement de MATLAB
Le symbole [>>] indique à l’utilisateur où il faut
rentrer la commande. On ne peut pas «
revenir en arrière », c’est-à-dire, il ne faut pas essayer
de placer le curseur sur une ligne audessus
du dernier [>>]. Pour taper une autre commande on le
fait à la suite.
>>
2+3
ans =
5
>>
3*5
ans =
15
Si on rentre des commandes erronées, Matlab nous l’indique
par un message d’erreur :
>> 2*
2*
|
Error:
Expression or statement is incomplete or incorrect.
>> ax
Undefined
function or variable 'ax'.
Les touches [↑] et [↓] permettent de naviguer parmi les
dernières commandes effectuées,
ce qui peut être utile si l’on commet une erreur et qu’on
veut éviter de taper à nouveau
toute la commande.
2.2 Commandes et calculs de base
Matlab possède de nombreuses fonctions prédéfinies utiles en
mathématiques que nous
allons étudier au cours de ces travaux pratiques.
>> pi
ans =
3.1416
>>
cos(pi/3)
ans =
0.5000
>>
log(1.5)
ans =
0.4055
>> j^2
ans =
-1
Il peut parfois être utile de stocker une valeur dans une
variable pour l’utiliser plus tard.
L’affectation d’une variable en Matlab se fait au moyen du
signe [=]. Le nom d’une variable
doit commencer par une lettre (majuscule ou minuscule, sans
accent) puis peut contenir des
lettres (même remarque), des chiffres et des caractères
soulignés [_]. Le nom peut contenir
au maximum 31 caractères. La valeur d’une variable peut être
un nombre, une chaîne de
caractères ou un tableau (voir la section 3). Contrairement
au C++ ou au fortran, Matlab
n’est pas « typé ». Autrement dit, une variable contenant un
entier peut contenir plus tard
une chaîne de caractères ou un tableau. Précisons que Matlab
est « case-sensitive », c’est-à-
dire qu’il fait la distinction entre majuscules et
minuscules.
>> A=21
A =
21
>> a=12.24
a =
12.2400
>> A='Bonjour'
A =
Bonjour
On peut évidement faire des calculs avec des variables. Le
résultat d’un calcul est, par
défaut, stocké dans une variable nommée ans. Celle-ci peut
être changée pour n’importe
quelle autre variable. Par défaut, Matlab affiche le
résultat de la dernière opération. Cet
affichage peut être supprimé en terminant votre commande par
la touche [ ;]. Plusieurs
commandes peuvent être rentrées sur une même ligne en les
séparant soit par [,] soit par [
;].
>>
x=3;y=4;
>>
z=x^2+y^2
z =
25
Pour une liste complète des opérations mathématiques que
l’on peut faire dans Matlab voir
le paragraphe 3.3.
2.3 Gestion des variables
Dès que nous commençons à avoir un certain nombre de
variables, on peut rapidement se
perdre. Si l’on tape le nom d’une variable, Matlab renvoie
la valeur de celle-ci. Mais
comment savoir quelle variable a été utilisée ? Pour se
retrouver, Matlab propose plusieurs
solutions. La commande who permet de lister simplement les
variables utilisées, alors que
whos donne des informations détaillées sur toutes les
variables.
>>
who
Your
variables are:
A a ans x y
z
>> whos
Name Size Bytes Class Attributes
A 1x7 14 char
a 1x1 8 double
ans 1x1 8 double
x 1x1 8 double
y 1x1 8 double
z 1x1 8 double
L’onglet Workspace donne une alternative graphique à la
commande whos. En double
cliquant sur une variable on peut voir sa valeur et même la
modifier. Pour effacer
complètement une variable, il suffit de rentrer la commande
clear suivie du nom de la
variable. Pour tout effacer, clear all.
2.4 Historique des commandes
Matlab garde en mémoire les dernières commandes effectuées.
Elles sont visibles dans
l’onglet Command History. On peut également y accéder
directement dans la Command
Window au moyen des touches [↑] et [↓]. Ceci est
particulièrement utile pour répéter la
dernière commande.
2.5 Aide
Matlab possède un grand nombre de fonctions et commandes. On
ne pourra pas toutes les
traiter en détail. Afin d’obtenir de l’information (nombre
de paramètres d’une fonction,
valeur de retour, etc), il suffit de rentrer help nom_de_la_commande.
La commande lookfor est très utile. Elle permet de chercher
les fonctions par mots clefs.
Plus précisément, lookfor XYZ renvoie toutes les fonctions
qui contiennent XYZ dans la
première ligne de leur descriptif. Nous y reviendrons au
paragraphe sur m-files. Si vous êtes
perdu, la commande help help pourra vous aider...
2.6 Sauvegarde
Le Workspace : On peut sauver l’état de la session en
cours dans un fichier .mat. Pour
cela, dans la barre d’outils, dans l’onglet Variable cliquer
sur Save Workspace, et vous
choisissez l’emplacement et le nom de votre fichier. Matlab
sauvegarde ainsi le nom et la
valeur de chacune des variables. La prochaine fois que vous
utilisez Matlab, au moyen de
l’onglet File /Open vous retrouvez le Workspace dans l’état
dans lequel vous l’avez laissé.
Les m-files : Il s’agit d’un fichier dans lequel on
regroupe des commandes. C’est très utile
pour aborder des pr
3. Vecteurs et matrices
La structure de données de Matlab est le tableau ; même un
nombre est considéré comme
une matrice 1 × 1. Toutes les fonctions et opérations
relatives aux tableaux sont très
optimisées et sont à utiliser aussi souvent que possible.
3.1 Création
Un tableau est délimité par des crochets. On sépare les
colonnes par des espaces et les
lignes par des points-virgules.
>> A=[1 2 3 ; 4 5 6]
A =
1 2 3
4 5 6
>> B=[1; 2; 3]
B =
1
2
3
Les tableaux qui n’ont qu’une seule ligne sont appelés des
vecteurs lignes ou des listes ; ceux
qui n’ont qu’une seule colonne sont appelés des vecteurs
colonnes ou simplement des
vecteurs. Si le nombre d’éléments dans chaque ligne (ou
colonne) n’est pas le même, Matlab
signale une
erreur.
>>
A=[1 2 3; 4 5]
Error using
vertcat
Dimensions
of matrices being concatenated are not consistent.
Matlab propose des commandes pour créer certaines matrices
particulières très
simplement. Pour plus d’information, lire le help de chaque
fonction.
Commande Description
ones(n,m) Matrice de taille n × m ne contenant que des 1.
zeros(n,m) Matrice de taille n × m ne contenant que des 0.
eye(n,m) Matrice de taille n × m contenant des 1 sur la
première diagonale et des 0 ailleurs.
diag(v) Matrice diagonale où les éléments de la
diagonale sont les composantes du vecteur v.
rand(n,m) Matrice de taille n × m contenant des nombres
aléatoires
Tableau 1 : Commandes pour créer des matrices
[a:p:b] : Matlab dispose également de moyens très simples
pour créer des listes. La
commande [a:p:b] crée une liste dont les éléments sont
a, a + p, a
+ 2p, . . . , a + np,
où n ∈N, a+np ≤ b <
a+(n+1)p
Le cas particulier [a:b] est un raccourci pour [a:1:b]. Si
les conditions initiales sont erronées,
Matlab renvoie un message d’erreur.
Remarque : Il n’y a pas de différence entre les commandes
[a:p:b], (a:p:b) et a:p:b.
>> x=[1:2:10]
x =
1 3 5 7 9
>> y=[-5:0]
y =
-5 -4 -3 -2 -1 0
>> z=[10:2:-10]
z =
Empty matrix: 1-by-0
linspace : Un autre cas particulier de [a:p:b] est la
fonction linspace(a,b,n). Celle-ci crée
une liste de n éléments uniformément répartis entre a et b.
Autrement dit,
linspace(a,b,n) est la même chose que [a: b−a/n−1:b].
logspace : Il est parfois utile de travailler avec des
échelles logarithmiques ; pour cela, la
commande logspace(x1,x2,n) crée une liste de n points
répartis logarithmiquement
uniformément entre 10x1 et 10x2
.
Une dernière méthode pour créer des tableaux est la concaténation.
Si A et B sont deux
tableaux, alors [A B], ou [A,B] est le tableau obtenu en
collant B à la droite de A, et [A ;B]
est le tableau obtenu en collant B au-dessous de A. Comme
d’habitude, il faut faire
attention aux tailles de A et de B.
>>
A=[1,3,5], B=[2,4,6], C=[1,2;3,4]
A =
1 3 5
B =
2 4 6
C =
1 2
3 4
MATLAB
& SIMULINK
>> A(2,:)
ans =
5 6 7 8
>> A(:,3)
ans =
3
7
>> A([1 3 5])
ans =
1 2 3
>> A([1; 3; 5])
ans =
1
2
3
>> A([1 3;4 6])
ans =
1 2
6 7
Pour modifier les éléments d’une matrice, on utilise les
mêmes commandes que ci-dessus.
On ajoute à la commande le signe [=] et la nouvelle valeur.
>>
A(2,3)=0
A =
1 2 3 4
5 6 0 8
>>
A([1 3 5])=[-1 -1 -1]
A =
-1 -1 -1 4
5 6 0 8
>>
A(:,4)=[10 20]
A =
-1 -1 -1 10
5 6 0 20
Remarquons cependant que dans ce cas on est autorisé à
dépasser la taille de la matrice
initiale. Matlab crée automatiquement une nouvelle matrice
en ajoutant aux anciennes
valeurs les nouvelles. Si rien n’est spécifié, il remplit
avec des 0.
>> B=[1 2;3 4]
B =
1 2
3 4
>> B(2,4)=99
B =
1 2 0 0
3 4 0 99
4. Opérations avec les matrices
4.1 Opérations de bases
Matlab permet de faire certaines opérations avec des
matrices. Dans ce qui suit, A et B sont
des tableaux et c est un scalaire.
Commande Description
A+B Addition terme à terme ; A et B doivent avoir le même
format.
A+c = c+A Addition de c aux éléments de A.
A-B
Soustraction terme à terme ; A et B doivent avoir le
même format.
A-c Soustraction de c aux éléments de A.
c-A Tableau dont les éléments sont c − aij .
A*B Produit matriciel standard ; nb. col. A doit être le
même que
A*c = c*A Multiplication de c aux éléments de A.
A.*B Multiplication terme à terme ; A et B doivent avoir le
même format.
Aˆn (n ∈ +)
A * A * . . . * A (n fois) ; A doit être carrée.
Aˆn (n ∈ -)
A
-1
* A-1
* . . . * A-1
(|n| fois) ; A doit
être inversible.
A.ˆB Tableau dont les éléments sont
A’ Transposition et conjugaison.
A.’ Transposition ; A.’ = A’ dans le cas où A est réelle.
B/A
Le résultat est un tableau X tel que XA = B. Si A est
inversible, alors X = BA-1
; nb. col. A doit être le même
que nb. col. B.
A\B
Le résultat est un tableau X tel que AX = B. Si A est
inversible, alors X = A
−1
B ; nb. lign. A doit être le même
que nb. lign. B.
A./B Division terme à terme des éléments de A par ceux de
B ; A et B doivent avoir le même format.
A.\B
Division terme à terme des éléments de B par ceux de
A ; A et B doivent avoir le même format.
A/c Division des éléments de A par c.
Tableau 3 : Opérations avec des matrices
Précisons que Matlab ne renvoie pas un message d’erreur lors
d’une division par 0, mais
donne le résultat Inf. Attention néanmoins à ne pas
travailler avec Inf comme avec un
nombre.
>> A=[1 2 3; 5 0 0; 4 0 7]
A =
1 2 3
5 0 0
4 0 7
>> B=[-1 -2 -3; -5 0 0; -4 0 -7]
B =
-1 -2 -3
-5 0 0
-4 0 -7
>> A+B
ans =
0 0 0
0 0 0
0 0 0
>> A*B
ans =
-23 -2 -24
-5 -10 -15
-32 -8 -61
>> A.*B
ans =
-1 -4 -9
-25 0 0
-16 0 -49
>> A^2
ans =
23 2 24
5 10 15
32 8 61
>> A/B
ans =
-1 0 0
0 -1 0
0 0 -1
Important. Pour la résolution de systèmes d’équations,
utilisez toujours les commandes B/A
et A\B. N’inversez JAMAIS une matrice !
4.2 Fonctions sur les matrices
Etant donnée une matrice A, il y a un certain nombre de
choses que l’on peut calculer en
rapport avec A. Nous présentons ici quelques fonctions
définies dans Matlab prenant
comme paramètre des tableaux.
Commande Description
det(A) Renvoie le déterminant de A ; celle-ci doit être
carrée.
trace(A) Renvoie la trace de A.
rank(A) Renvoie le rang de A
null(A) Renvoie une base du noyau de A ; l’argument
supplémentaire ’r’ donne une « meilleure » base
diag(A) Renvoie la première diagonale de A.
norm(v)
Renvoie la norme euclidienne de v ; v est un
vecteur. Il est aussi possible de calculer d’autres
normes ;
mean(A) Renvoie une liste contenant la moyenne des
éléments de chaque colonne.
sum(A) Renvoie une liste contenant la somme des
éléments de chaque colonne.
prod(A) Renvoie une liste contenant le produit des
éléments de chaque colonne.
max(A) Renvoie une liste contenant la valeur maximale
chaque colonne.
min(A) Renvoie une liste contenant la valeur minimale de
chaque colonne.
length(A) Renvoie le maximum entre le nombre de lignes et
de colonnes ;
Tableau 4 : Fonctions sur des matrices
Finalement, on précise que toutes les fonctions
mathématiques classiques (cos, sin, log, exp,
etc) s’appliquent également aux tableaux. Le résultat est un
tableau où l’on a appliqué terme
à terme la fonction en question.
>>teta=[0:pi/4:pi]
teta =
0 0.7854 1.5708
2.3562 3.1416
>> sin(teta)
ans =
0 0.7071 1.0000
0.7071 0.0000