Manipulation de matrices | samuelboudet.com
Manipulation de matrices
##Création de vecteur et de Matrices##608## La manipulation de matrice est particulièrement bien pensée sous Matlab. Voici quelques exemples de commandes pour créer des matrices :
  • a=[1 2 3;4 5 6] : créé une matrice de 2 lignes et 3 colonnes contenant les éléments 1 2 3 sur la première ligne et 4 5 6 sur la deuxième.
  • b=[1 ;2 ;3] : Créé un vecteur colonne valant 1 2 3.
  • a=[1,2,3] (identique a =[1 2 3]) : créé le vecteur ligne 1 2 3 .
  • b=[a;1 2 3] : Créé une matrice dont la première ligne vaut a et la deuxième ligne vaut 1 2 3.
  • a=1:5 : Créé un vecteur valant 1 2 3 4 5.
  • a=1:2:10 : Créé un vecteur valant 1 3 5 7 9.
  • a=[1 3:5] : Créé un vecteur valant 1 3 4 5.
  • a=(1:3)’ : donc réalise un vecteur colonne valant 1 2 3 (' permet de faire la transposée).
  • a=zeros(3) : Créé une matrice de 0 de taille 3x3.
  • a=ones(2,4) : Créé une matrice de 1 de taille 2x4.
  • a=zeros(2,3,4) : Créé une matrice de 0 de taille 2x3x4.
  • a=linspace(1,10,5) Créé un vecteur de 5 éléments linéairement réparti entre 1 et 10.
  • a=logspace(1,10,5) Créé un vecteur de 5 éléments logarithment réparti entre 1 et 10.
Petit exemple : Créer avec la ligne de commande la plus courte possible la matrice A valant :
1 2 3 4 5 6 7 8 9
2 4 6 8 0 1 2 3 4
2 2 2 2 2 2 2 2 2

Solution : (Sélectionner pour voir la solution)

Note: La commande zeros est très souvent utilisée pour déclarer une matrice. En Matlab, les variables ne sont pas déclarées. Cependant lorsqu'on affecte des valeurs à un vecteur ou une matrice, celui ci s'agrandit au fur et à mesure et le temps d'exécution de la fonction peut alors être fortement augmenté. Il est donc recommandé d'utiliser la commande zeros pour initialiser la matrice à la bonne dimension. ## ##Accès aux éléments et sous-matrices##608## Soit la matrice a=[1 2 3;4 5 6] et le vecteur b=[1 2 3].
Noter que les indices des matrices Matlab commence à 1 (et non 0 comme en C).
  • a(1,2)=4 : Affecte 4 à l'élément de la première ligne et deuxième colonne de la matrice a.
  • b(3)=4 : Affecte 4 au troisième élément du vecteur b.
  • a(1,:) : Sous matrice correspondant à la première ligne.
  • a(:,2) : Sous matrice correspondant à la deuxième colonne.
  • a(2,2:end) : Sous matrice correspondant à la deuxième ligne, colonne 2 à fin(soit 3).
  • a(2,[1 end-1]) : Sous matrice correspondant à la deuxième ligne, colonne 1 et fin-1(soit 2).
  • a([2 3],[1 2])=[1 2;3 4] : Affecte [1 2;3 4] à la sous matrice formé par les lignes 2 et 3, colonne 1 et 2.
  • a(:) : Vecteur colonne formé par tous les éléments de a.
Exemple : Reprendre A =
1 2 3 4 5 6 7 8 9
2 4 6 8 0 1 2 3 4
2 2 2 2 2 2 2 2 2
et inverser l'ordre des colonnes sur les éléments en gras (toujours en une seule ligne de commande). C'est à dire que l'on doit avoir A=
8 7 6 5 4 3 2 1 9
3 2 1 0 8 6 4 2 4
2 2 2 2 2 2 2 2 2

Solution : (Sélectionner pour voir la solution)

Logical indexing :
Il est possible de construire une sous matrice en appliquant un masque à la matrice principale. Exemple :
v=[1 2 3 4];
v(logical([1 0 1 0])) retourne [1 3]
v(v>2) retourne [3 4] (Equivalent à v(find(v>2)) mais plus rapide)
## ##Opérations sur les matrices##608## Prenons A=[1+i 2+i 0;1 2 3;1 i 0] une matrice complexe et B=[1 2 3;4 5 6;7 8 9].
  • A' : Adjoint de A (Conjugué de la transposée).
  • A.' : transposée de A.
  • C=B^-1; : Inverse de B.
  • C*B : Produit matriciel.
  • C.*B : Produit terme à terme.
  • C+B : Somme.
  • C^2 : C*C (puissance matricielle).
  • C.^B : Puissance terme à terme.
  • C./B : division terme à terme.
  • C\B : équivalent à B^-1*C mais plus rapide car ne calcul pas l'inverse de B.
  • B/C : Equivalent à (C'\B')'.
Note : On peut remplacer une des opérandes par un scalaire. Par exemple B+2 ajoute 2 à chacun des termes de B.

Exemple : Soit a un vecteur quelconque (ex. a=rand(1,100)) et x un reel (ex x=2;)
En utilisant les opérations vectorielles, écrire de façon la plus concise possible une séquence d’instructions qui évalue le polynôme :


Solution : (Sélectionner pour voir la solution)

## ##Fonctions usuelles sur les matrices##608## Prenons B=[1 2 3;4 5 6;7 8 9], v=[1 0 1];
  • size(B) : Vecteur correspond à la taille de chacune des dimensions de B (ici [3 3]).
  • size(B,1) : Vecteur correspond à la taille de la première dimension de B.
  • length(v) : Nombre d'élément dans v (Souvent utiliser quand v peut être un vecteur ligne ou colonne).
  • length(B) : maximum entre le nombre de lignes et le nombre de colonne (ici 3)
  • f=diag(B) : Vecteur colonne contenant la diagonal de B.
  • diag(f) : Matrice diagonal dont la diagonal correspond à f.
  • det(B) : Déterminant.
  • norm(B) : Norme.
  • rank(B) : Rang.
  • trace(B) : Rang.
Fonctions d'analyse : Chacune de ses fonctions peuvent être appliquée sur un vecteur ligne ou colonne. Si elles sont appliquées sur des matrices chacune des colonnes est tratée indépendamment formant ainsi un vecteur ligne.
  • sum(B) : Somme
  • prod(B) : Produit
  • mean(B) : Moyenne
  • std(B) : Ecart type
  • var(B) : Variance (sans biais (/(N-1)))
  • var(B,1) : Variance statistique (/N)
  • max(B) : maximum
  • min(B) : minimum
Autres diverses
  • cumsum(v) : Somme cumulé (ici [1 1 2]).
  • cumprod(v) : Produit cumulé (ici [1 0 0]).
  • eye(5) : Renvoie la matrice identité de dimension 5x5.
  • randn(3,4) : Renvoie 3x4 dont chaque terme suit une variable aléatoire gaussienne.
  • [P,D]=eig(C) : Diagonalisation de C : P*D*P^-1
  • null(h) : Matrice orthogonal. (h*null(h)=0)
  • pinv(h) : Pseudo inverse.
  • sort(R) : Trie les éléments de chacune des colonnes indépendamment.
  • sortrows(R,3) : Trie les lignes par rapport aux éléments de la troisième colonne.
  • find(g==5) : Donne les positions des éléments de g qui sont égaux à 5 (find est une fonction qui renvoie les positions des éléments non nulles. Dans le cas ou l'on cherche à obtenir g(find(g==5)) le "logical indexing" est généralement plus rapide).
## ##Fonctions avancés##608## Fonctions d'analyse numérique
  • lu : Décomposition LU.
  • chol : Cholesky.
  • qr : Décomposition QR.
  • qzhess : Hessenberg.
  • schur : Schur.
  • housh : Householder.
  • krylov : Krylov.
Matrices et booléens
  • b=(g>=5) : renvoie un vecteur b(ou une matrice) tel que b(i)=g(i)>=5
  • mat3=(mat1==mat2) : Renvoie une matrice mat3 de même dimension que mat1 et mat2 avec mat3(i,j)=mat1(i,j)==mat2(i,j)
  • b=(g==5 | g==3) : b(i)=(g(i)==5 | g(i)==3) (même principe pour &)
  • find(g==5) : Donne les positions des éléments de g qui sont égaux à 5 (find est une fonction qui renvoie les positions des éléments non nulles)
  • isequal(mat1,mat2) : Renvoie 1 si tous les membres de mat1 sont égaux à ceux de mat2 sinon 0
  • mat3 = ismember(mat1,mat2) : mat3(i,j)=1 si mat1(i,j) est dans mat2 (sinon 0)
  • any(vec) : Renvoie 1 si un ou plusieurs éléments de vec sont 1 (sinon 0)
  • all(vec) : Renvoie 1 si tous les éléments de vec sont 1 (sinon 0)
Fonctions de transformation de matrices :
  • reshape([1 2 3 4 5 6],2,3) : renvoie [1 2 3;4 5 6] (Recréé une matrice à partir d'un vecteur).
  • fliplr([1 2 3;4 5 6]) : renvoie [3 2 1;6 5 4] (replace les éléments de droite à gauche).
  • flipud([1 2 3;4 5 6]) : renvoie [4 5 6;1 2 3] (replace les éléments de bas en haut).
  • flipdim : Replace les éléments dans l'ordre inversé suivant la dimension spécifiée.
  • permute : Permet de permuter les dimensions d'une matrice (généralisation de la transposée en dimension >2)
  • ipermute : Permet de faire l'opération inverse de permute
  • tril : Extrait la matrice triangulaire inférieure
  • triu : Extrait la matrice triangulaire supérieure
Gestion des ensembles :
  • E=unique(mat) : Renvoie un vecteur colonne contenant tous les élément triés de mat mais une et une seule fois (Ce qui permet de considerer après E comme un ensemble d'élément)
  • intersect(var1,var2) : Intersection (trié)
  • setdiff(var1,var2) : Différence
  • union(var1,var2) : Union
##
Last updated : 2nd of August 2012
 
copyrightfrance | Administration