Overblog
Editer la page Suivre ce blog Administration + Créer mon blog
/ / /

matlab_logo.gif        mM.gifATLAB 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 desk

 

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.

 

 

 

 

 

 

 

 

aa.gifvec 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

 

 

 

 

 

 

 

Eetudions 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

 

Partager cette page
Repost0

Présentation

  • : Le blog de outilsrecherche
  • : Blog d'un thésard qui partage ses connaissances et ses recherches. Logiciels, environnements, notes perso, Parole, reconnaissance automatique, modélisation, acoustique, biologie, cognition, neuro-sciences, langage, audition, production de la parole traitement du signal et informatique
  • Contact

Recherche

Archives

Liens