ATLAB est un logiciel multi plateforme payant, qui permet d'implémenter facilement des formules mathématiques. Il est à la fois un langage de programmation et un environnement de développement.
Il tourne sous Microsoft Windows, Linux et MAC OS.
Sa particularité et sa force tiennent en la présence de nombreuses Boîtes à outils "ToolBoxes" qui couvrent beaucoup de domaines scientifiques (traitement du signal, biologie, mathématiques, etc...).
Son concurrent direct du monde libre est OCTAVE. La seule chose qui fait qu'OCTAVE reste encore un peu confidentiel est le fait que sa communauté LINUX a du mal à développer les ToolBoxes (faute de développeurs prêts à passer du temps sur ce projet).
Je ne vais pas traiter l'installation de Matlab sur les différents systèmes, puisque des tutoriels existent déjà et sont fort bien faits sur le site de l'éditeur MathWORKS (en anglais hélas).
A noter tout de même qu'il existe différentes versions, que certaines d'entre elles possèdent tout de même quelques bugs :
par exemple, sur la 2010, en mode terminal sous Linux Debian64 sans l'interface graphique de Matlab,
il est impossible d'utiliser des caractères avec accent tels que "é è à ù" ou d'autres tels que "µ" sous peine d'exploser matlab : il faut tuer la tâche pour sortir d'une boucle infernale qui démarre aussitôt dans le terminal.
autre exemple : inversion de l'utilisation des variables dans certaines fonctions à l'occasion du passage d'une version à l'autre.
A déplorer le nombre de licences à acheter lorsque l'on tourne sur un serveur multi processeur, du moins en version réseau !
Néanmoins, MATLAB reste tout de même un outils très pratique et très puissant.
ATTENTION !
JE NE TRAITERAI DANS CE TUTORIEL QUE LA PARTIE QUI SERA UTILE A MES RECHERCHES
C'EST A DIRE TOUT CE QUI, DE PRES OU DE LOIN, TOURNE AUTOUR DU TRAITEMENT DU SIGNAL.
atlab possède un espace de travail multi fenêtres. Cinq fenêtres sont disponibles. (Pour ouvrir les fenêtres, il suffit avec la souris de cliquer sur View / Desktop Layout / Five Panel).
1.1.1 Description de l'environnement
Command Window (fenêtre des commandes): Toutes les commandes tapées dans cette fenêtre sont exécutées immédiatement !
Command History (historique des commandes): Affiche tout ce que l'on a tapé dans la fenêtre Command Window
Current Directory (répertoire courant): affiche le répertoire de travail (La ou tout sera sauvegardé)
Workspace (espace de travail) : Contient l'état de l'ensemble des variables utilisées
Launch Pad (rampe de lancemant) : Contient
Matlab 7.6.0 (R2008a) sous microsoft windows
1.1.2 - Contenu de l’espace de travail
La commande whos renvoie le nom des variables de l’espace de travail, leur taille, leur occupation en mémoire et leur classe. La fenˆetre “workspace” permet aussi d’acceder à ces informations. La commande clear permet de libérer la place mémoire occupée par certaines variables.
1.1.3 - Contenu d’un répertoire
(sous linux)
La commande dir ou ls retourne la liste des fichiers du répertoire courant.
La commande pwd permet de connaître le nom de ce répertoire. Pour changer de répertoire utiliser
cd (change directory).
La commande type permet d’afficher le contenu d’un fichier et
delete permet de détruire fichier et objet graphique.
Pour passer une commande Unix, il suffit de commencer la ligne de commande avec un point d’exclamation.
Par exemple :
>> !emacs /usr/local/matlabr12/toolbox/matlab/demos/bench.m&
ouvre le fichier bench.m avec l’´editeur emacs.
vec Matlab, on travaille essentiellement avec un seul type d’objet : une matrice.
(d'où le nom : Matrix Laboratory)
1.2 - LES MATRICES
En Matlab, une matrice est un tableau rectangulaire de nombres représentés en virgule
flottante avec une double précision, c’est `a dire 8 octets pour un nombre réel et 16
octets pour un nombre complexe. Une matrice 1×1 est interprétée comme un scalaire,
celle ayant une seule ligne ou une seule colonne comme un vecteur.
1.2.1 - Création de matrices
Pour créer une matrice il suffit d’ouvrir un [, énumérer les éléments ligne par ligne,
puis fermer le ]. Sur une même ligne les éléments sont séparés par une virgule ou un
espace, deux lignes successives sont s´epar´ees par un point virgule ou un retour chariot.
Par exemple, l’instruction
>> A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
crée une matrice 4 × 4 appelée A. La réponse de Matlab est
A =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
L’instruction suivante crée la même matrice, mais le résultat n’est pas affiché car un
point-virgule termine l’instruction :
>> A = [1, 2, 3, 4
5, 6, 7, 8
9 10 11 12; 13, 14, 15, 16
];
On peut aussi créer la même matrice A avec l’instruction suivante :
>> A = [1:4; 5:8; 9:12; 13:16]
exemple :
commandes:
>> mat = rand(2,3), scal = pi, vlig = [1 2 3 4], vcol = zeros(3,1)
résultats :
mat =
0.4103 0.0579 0.8132
0.8936 0.3529 0.0099
scal =
3.1416
vlig =
1 2 3 4
vcol =
0
0
0
Nous avons utilisé ici l’opérateur deux-points. Cet opérateur est très important, on
l’utilise très souvent. Il permet de discrétiser un intervalle avec un pas constant.
L’instruction :
>> u = 0:9
crée un vecteur u contenant les entiers de 0 `a 9. Par d´efaut le pas est égal à 1,
mais on
peut spécifier une autre longueur de pas :
>> 0:2:9, 9:-3:0, 0:pi/3:2*pi
Noter que dans la ligne ci-dessus, nous avons utilisé une virgule pour séparer deux
instructions sur une même ligne.
On voit donc que virgule et point-virgule permettent de séparer des éléments d’une matrice et que ce sont aussi des séparateurs d’instructions.
, sépare 2 éléments sur une ligne termine une instruction avec affichage
; sépare 2 lignes termine une instruction sans affichage
Certaines fonctions permettent de créer des matrices particulières :
– eye(n) crée une matrice identité de dimension n ;
– ones et zeros créent des matrices de 1 et de 0 ;
– rand et randn des matrices dont les éléments sont choisis au hasard selon une
loi
uniforme sur ]0, 1[ et une loi normale centrée réduite ;
– magic(n) crée un carré magique de dimension n (n >=3) ;
– diag permet d’extraire des diagonales ou bien de créer des matrices diagonales ;
– triu et tril permettent d’extraire les parties triangulaire supérieure et
triangulaire
1.2.2 - Lecture / intérrogation de matrice (accès à ses données)
Pour acc´eder aux éléments d’une matrice, on utilise la notation standard de l’algèbre
linéaire :
A(i,j) fait référence à l’élément de la ligne i et de la colonne j de A.
Dans l’exemple précédent, l’instruction A(2,3) retourne la valeur 7. Seul un entier positif
non nul est accepté comme indice de matrice ou de vecteur.
On peut extraire plusieurs éléments simultanément, par exemple :
>> A([1,3],2), A([1,3],[2,1,4])
On utilise l’opérateur deux-points pour extraire une ligne, une colonne ou une sousmatrice.
A(2,:) extrait la deuxième ligne,
A(:,1) la première colonne
A(2:4,1:3) retourne le bloc
ans =
5 6 7
9 10 11
13 14 15
L’instruction A(:) crée un vecteur colonne contenant les éléments de A énumérés colonne
par colonne.
Notons que l’instruction A(7) retourne la valeur 10,
car les éléments d’une
matrice sont numérotés selon ce même ordre d’énumération.
Ainsi, l’élément A(i,j) est numéroté i+m*(j-1), où m est le nombre de lignes de A.
1 m + 1 2m + 1 · · ·
2 m + 2 2m + 2 · · ·
. .
. .
. .
. .
. .
. .
. .
. .
m 2m 3m . . .
Cette numérotation permet d’extraire des éléments avec un tableau d’indices. Par exemple, l’instruction
>> A([1 2 3; 4 5 6])
retourne
ans =
1 5 9
13 2 6
1.2.3 - Modification d'une matrice
On peut modifier les éléments d’une matrice en leur affectant de nouvelles valeurs :
>> A(4,4) = 0, A(1,:) = A(1,:)*10, A = [A; [1 1 1 1]]
Matlab possède aussi un éditeur de tableau qui permet de modifier les dimensions et les
entrées d’une matrice.
Pour utiliser cet éditeur, sélectionner Workspace dans le menu
View. Une fenêtre contenant les variables en mémoire apparaît, puis cliquer deux fois
sur la variable à éditer.
On peut aussi ouvrir A dans l´éiteur avec l’instruction open A
1.2.4 - Opérations sur les matrices
1.2.4.1 - Opérations algébriques
Les opérations algébriques usuelles sont :
Soit X une variable aléatoire et soit (a, b) un couple de nombres réels.
Alors E(aX+b) = aE(X)+b et σ(aX + b) = |a|σ(X).
+ addition
- soustraction
* produit
’ transposition (complexe conjuguée)
^ puissance
\ division à gauche
/ division à droite.
Toutes ces opérations doivent respecter les règles usuelles de l’algèbre linéaire.
>> M = [1,2] * [3;4], P = [1;2] * [3,4], Q = [1,2] * [3,4]
M =
11
P =
3 4
6 8
? ? ? Error using ==> *
Inner matrix dimensions must agree.
Quand les opérandes sont une matrice et un scalaire (par exemple A+1, A-1, A*2
ou A/2), l’opération est effectuée entre le scalaire et chaque élément de la matrice.
>> twos = ones(2) + 1
twos =
2 2
2 2
1.2.4.2 La division
Les opérateurs de division permettent de calculer une solution d’une équation linéaire.
Lorsque A est inversible, A\b calcule la solution de l’´equation Ax=b.
C’est la même chose que inv(A)*b, la solution étant calculée sans inversion explicite de la matrice.
Matlab ustilise une méthode de Gauss avec pivotage partiel. Si la matrice est
singulière, Matlab retourne un message d’avertissement.
Par exemple :
>> [1 3;2 6]\[1;1]
Warning : Matrix is singular to working precision.
ans =
Inf
Inf
Lorsque A n’est pas carrée, A\b retourne une solution
calculée au sens des moindres
carrés.
Par exemple, s’il y a plus de lignes que de colonnes et que A est de plein rang,
le résultat est une solution du problème de minimisation min kAx − bk, pour la norme
euclidienne usuelle.
Matlab calcule la solution de l'équation
normale A>Ax = A>b.
L’opérateur de division à droite est défini par b/A = (A’\b’)’.
Si A est inversible, c’est la même chose que b*inv(A).
1.2.4.3 Opérations éléments par éléments
Matlab utilise un type d’opérations particulires appelées “array operations”. Ces
opérations concernent *,b, / et \.
Lorsque un de ces opérateurs est précédé d’un point, l’opération est effectuée sur chaque élément de la matrice.
>> [1:10].^2
ans =
1 4 9 16 25 36 49 64
81 100
>> [1:4]./[2:5]
ans =
0.5000 0.6667 0.7500 0.8000
>> [1 2 3 ; 4 5 6 ; 7 8 9] .* eye(3)
ans =
1 0 0
0 5 0
0 0 9
Ces opérateurs sont très utiles pour tracer des graphiques. Lorsqu’on effectue des calculs avec des nombres complexes, la transposition non complexe conjuguée est
obtenue avec l’opérateur .’.
>> Z1 = [1 ; i]’ , Z2 = [1 ; i].’
Z1 =
1.0000 0 - 1.0000i
Z2 =
1.0000 0 + 1.0000i
1.2.4.4 Opérateurs relationnels
Les opérateurs relationnels sont
== égal
~= différent
> strictement plus grand
>= plus grand ou égal
< strictement plus petit
<= plus petit ou égal.
Les deux opérandes doivent être de même dimension, sauf si un des deux opérandes
est un scalaire.
Le résultat est une matrice de même dimension n’ayant que des 0 (faux) et des 1 (vrai), la comparaison étant effectuée élément par élément. Lorqu’un des deux opérandes est un scalaire,la comparaison est effectuée entre chaque élément de la matrice et le scalaire.
>> R = randn(1,6), R>0
R =
1.1892 -0.0376 0.3273
0.1746 -0.1867 0.7258
ans =
1 0 1
1 0 1
1.2.4.5 Opérateurs logiques
Les opérateurs logiques sont
& et
| ou
~ non.
Calculons une table logique :
>> a = [0;0;1;1]; b = [0;1;0;1]; EtOuDonc = [a,b,a&b,a|b,(~a)|b]
EtOuDonc =
0
0 0 0 1
0 1
0 1 1
1 0
0 1 0
1
1 1 1 1
Une valeur numérique est considérée comme vraie (= 1) si elle est non nulle, sinon elle est fausse (= 0).
Par exemple, ~A renvoie une matrice dont les éléments valent 1 là où A a des éléments nuls et 0
ailleurs.
1.2.4.6 Le type logical
Le résultat d’une opération relationnelle ou logique est du type logical.
Un tableau de type logical peut être utilisé comme tableau d’indice d’une matrice de même dimension.
Dans l’exemple ci-dessous, R = randn(3,4) est une matrice de dimension 3 × 4
dont les valeurs sont choisies selon une loi normale.
L’opération Rpos=R>0 retourne une matrice de même dimension telle que
Rpos(i,j)=1 si R(i,j)>0 et Rpos(i,j)=0.
La matrice Rpos est utilisée ensuite pour extraire les valeurs positives de R.
>> R = randn(3,4), Rpos=R>0, R(Rpos)
R =
-2.1707 0.6145
0.5913 -1.0091
-0.0592 0.5077
-0.6436 -0.0195
-1.0106 1.6924
0.3803 -0.0482
Rpos =
0 1 1 0
0 1 0 0
0 1 1 0
ans =
0.6145
0.5077
1.6924
0.5913
0.3803
La fonction logical permet d’affecter le caractère logique à un tableau de données numériques. Cette action permet d’utiliser le tableau comme d’un tableau d’indices
>> A = [0,1;2 3]; A(logical(eye(2)))
ans =
0
3
tudions les differents type de fonctions sous Matlab.
1.3 - LES FONCTIONS USUELLES
1.3.1 Fonctions scalaires
Ce sont les fonctions mathématiques usuelles.
sin sinus cos cosinus
tan tangente
asin
acos atan
sinh cosh tanh
asinh acosh
atanh
exp
log
log10
abs
sqrt sign
rem
round floor
ceil fix real
imag
conj
angle
L’argument d’entrée peut être un scalaire, un vecteur ou une matrice.
L’argument de sortie est une matrice de même dimension, la fonction ´etant appliquée sur chacun de
ses éléments.
>> log(0:5)
Warning: Log of zero.
ans =
-Inf 0 0.6931
1.0986 1.3863 1.6094
1.3.2 Fonctions vectorielles
Lorsque l’argument d’entrée de ces fonctions est un vecteur, le résultat est un scalaire.
min
max
sum
prod sort
median
mean
std
any all
>> [min(rand(1,10000)), max(rand(1,10000))]
ans =
0.0001 0.9999
Lorsqu’une telle fonction est appliquée à une matrice, elle agit colonne par colonne et
retourne un vecteur ligne.
>> sum(magic(5))
ans =
65 65 65 65
65
Les fonctions any et
all sont très utiles. Si x est un vecteur,
any(x) renvoie la valeur logique 1 si au moins une composante du vecteur est non
nulle, sinon elle renvoie la
valeur logique 0 ;
all(x) renvoie la valeur logique 1 si toutes les composantes de x sont non nulles, sinon elle renvoie 0.
1.3.3 Fonctions matricielles
Ce sont des fonctions usuelles de l’analyse numérique matricielle.L’argument d’entrée est une matrice.
cond conditionnement
det déterminant
norm norme 1, 2, Frobenius, 1
rank rang
trace trace
chol factorisation de Cholesky
inv inverse
lu factorisation LU
qr factorisation QR
eig valeurs propres et vecteurs propres
poly polynôme caractéristique
svd décomposition en valeurs singulières
expm exponentielle de matrice
sqrtm racine carrée de matrice
Dans l’exemple ci dessous, on calcule les vecteurs propres (V) et les valeurs propres (diagonale de D) de la matrice
1 1
1 1
>> [V,D] = eigs(ones(2,2))
V =
0.7071 -0.7071
0.7071 0.7071
D =
2 0
0 0
1.3.5 - Fonctions prédéfinies
Une fonction prédéfinie de Matlab est soit une fonction intégrée (built-in function),
soit une fonction écrite en Matlab sauvegardée dans une des bibliothèques.
La commande which fonc indique si fonc est une variable, une fonction intégrée ou
bien
retourne le chemin d’acc`es au fichier fonc.m.
>> which min, which bench
min is a built-in function.
/usr/local/matlabr12/toolbox/matlab/demos/bench.m