Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Matrices dans l’environnement MATLAB

Ce thème comprend une introduction à la création de matrices et à la réalisation de calculs matriciels de base dans MATLAB®.

L’environnement MATLAB utilise le terme matrice pour indiquer une variable contenant des nombres réels ou complexes arrangés selon une grille à deux dimensions. Un tableau est, plus généralement, un vecteur, une matrice ou une grille de nombres comportant plus de dimensions. Tous les tableaux dans MATLAB sont rectangulaires, dans le sens où les vecteurs composants, quelle que soit la dimension du tableau, sont tous de la même longueur. Les opérations mathématiques définies sur des matrices sont le sujet de l’algèbre linéaire.

Création de matrices

MATLAB comporte de nombreuses fonctions qui créent différents types de matrices. Par exemple, vous pouvez créer une matrice symétrique avec des entrées basées sur le triangle de Pascal :

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6

Ou vous pouvez créer une matrice de carré magique asymétrique, dont les sommes des lignes et des colonnes sont égales :

B = magic(3)
B =
       8     1     6
       3     5     7
       4     9     2

Un autre exemple est une matrice rectangulaire 3 x 2 composée de nombres entiers aléatoires. Dans ce cas, la première entrée de randi décrit la plage des valeurs possibles pour les nombres entiers, et les deux entrées suivantes décrivent le nombre de lignes et de colonnes.

C = randi(10,3,2)
C =

     9    10
    10     7
     2     1

Un vecteur colonne est une matrice m x 1, un vecteur ligne est une matrice de 1 x n et un scalaire est une matrice de 1 x 1. Pour définir une matrice manuellement, utilisez des crochets [ ] pour indiquer le début et la fin de la matrice. À l’intérieur des crochets, utilisez un point-virgule ; pour indiquer la fin d’une ligne. Dans le cas d’un scalaire (matrice de 1 x 1), les crochets ne sont pas requis. Par exemple, les instructions suivantes produisent un vecteur colonne, un vecteur ligne et un scalaire :

u = [3; 1; 4]

v = [2 0 -1]

s = 7
u =
       3
       1
       4

v =
       2     0    -1

s =
       7

Pour plus d’informations sur la création et l’utilisation des matrices, consultez Creating, Concatenating, and Expanding Matrices.

Addition et soustraction de matrices

L’addition et la soustraction de matrices et de tableaux sont effectuées éléments par éléments. Par exemple, ajouter A à B, puis soustraire A du résultat restitue B :

X = A + B
X =
       9     2     7
       4     7    10
       5    12     8
Y = X - A
Y =
       8     1     6
       3     5     7
       4     9     2

L’addition et la soustraction nécessitent que les deux matrices aient des dimensions compatibles. Si les dimensions sont incompatibles, cela génère une erreur :

X = A + C
Error using  + 
Matrix dimensions must agree.

Pour plus d’informations, consultez Array vs. Matrix Operations.

Produits et transposition de vecteurs

Il est possible de multiplier un vecteur ligne et un vecteur colonne de la même longueur dans n’importe quel ordre. Le résultat est soit un scalaire, appelé le produit intérieur, soit une matrice, appelée le produit extérieur :

u = [3; 1; 4];
v = [2 0 -1];
x = v*u
x =

     2
X = u*v
X =

     6     0    -3
     2     0    -1
     8     0    -4

Pour les matrices réelles, latransposée échange aij et aji. Pour les matrices complexes, un autre élément à prendre en compte est d'utiliser le conjugué complexe des entrées complexes de la matrice pour former la transposée conjuguée complexe. MATLAB utilise l’opérateur apostrophe (') pour effectuer une transposée conjuguée complexe et l’opérateur point-apostrophe (.') pour transposer sans conjugaison. Pour les matrices ne contenant que des éléments réels, les deux opérateurs donnent le même résultat.

La matrice proposée en exemple A = pascal(3) est symétrique, par conséquent, A' est égal à A. Cependant, B = magic(3) n’est pas symétrique, donc les éléments de B' se trouvent le long de la diagonale principale :

B = magic(3)
B =

     8     1     6
     3     5     7
     4     9     2
X = B'
X =

     8     3     4
     1     5     9
     6     7     2

Pour les vecteurs, la transposée change un vecteur ligne en un vecteur colonne (et inversement) :

x = v'

x =
       2
       0
      -1

Si x et y sont tous deux des vecteurs colonnes réels, alors le produit x*y n’est pas défini, mais les deux produits

x'*y

et

y'*x

produisent le même résultat scalaire. Cette quantité est utilisée tellement souvent qu’elle porte trois noms différents : produit intérieur, produit scalaire ou produit point. Il existe même une fonction dédiée pour les produits points appelée dot.

Pour un vecteur ou une matrice complexe, z, la quantité z' transpose non seulement le vecteur ou la matrice, mais convertit également chaque élément complexe en son conjugué complexe. Autrement dit, le signe de la partie imaginaire de chaque élément complexe change. Par exemple, soit la matrice complexe suivante

z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z =

   1.0000 + 2.0000i   7.0000 - 3.0000i   3.0000 + 4.0000i
   6.0000 - 2.0000i   0.0000 + 9.0000i   4.0000 + 7.0000i

La transposée conjuguée complexe de z est :

z'
ans =

   1.0000 - 2.0000i   6.0000 + 2.0000i
   7.0000 + 3.0000i   0.0000 - 9.0000i
   3.0000 - 4.0000i   4.0000 - 7.0000i

La transposée complexe non conjuguée, où la partie complexe de chaque élément conserve son signe, est indiquée par z.' :

z.'
ans =

   1.0000 + 2.0000i   6.0000 - 2.0000i
   7.0000 - 3.0000i   0.0000 + 9.0000i
   3.0000 + 4.0000i   4.0000 + 7.0000i

Pour les vecteurs complexes, les deux produits scalaires x'*y et y'*x sont des conjugués complexes l’un de l’autre, et le produit scalaire x'*x d’un vecteur complexe avec lui-même est un réel.

Multiplication de matrices

La multiplication de matrices est définie d’une manière qui reflète la composition des transformations linéaires sous-jacentes et permet la représentation compacte de systèmes d’équations linéaires simultanées. Le produit matriciel C = AB est défini lorsque la dimension des colonnes de A est égale à la dimension des lignes de B, ou lorsque l’une des deux est scalaire. Si A est de dimension m x p et si B est de dimension p x n, leur produit C est de dimension m x n. Le produit peut être défini à l’aide de boucles for, de la notation colon et de produits points vectoriels de MATLAB :

A = pascal(3);
B = magic(3);
m = 3; 
n = 3;
for i = 1:m
     for j = 1:n
        C(i,j) = A(i,:)*B(:,j);
     end
end

MATLAB utilise un astérisque pour indiquer la multiplication de matrices, comme dans C = A*B. La multiplication de matrices n’est pas commutative, autrement dit, A*B n’est généralement pas égal à B*A :

X = A*B
X =
      15    15    15
      26    38    26
      41    70    39
Y = B*A
Y =
      15    28    47
      15    34    60
      15    28    43

Une matrice peut être multipliée à droite par un vecteur colonne et à gauche par un vecteur ligne :

u = [3; 1; 4];
x = A*u
x =

     8
    17
    30
v = [2 0 -1];
y = v*B
y =

    12    -7    10

Les multiplications de matrices rectangulaires doivent satisfaire aux conditions de compatibilité des dimensions. Étant donné que A est de dimension 3 x 3 et C de dimension 3 x 2, vous pouvez les multiplier pour obtenir un résultat de dimension 3 x 2 (la dimension intérieure commune s’annule) :

X = A*C
X =

    24    17
    47    42
    79    77

Cependant, la multiplication ne fonctionne pas dans l’ordre inverse :

Y = C*A
Error using  * 
Incorrect dimensions for matrix multiplication. Check that the number of columns 
in the first matrix matches the number of rows in the second matrix. To perform 
elementwise multiplication, use '.*'.

Vous pouvez multiplier n’importe quoi par un scalaire :

s = 10;
w = s*y
w =

   120   -70   100

Lorsque vous multipliez un tableau par un scalaire, le scalaire s’étend implicitement pour avoir la même taille que l’autre entrée. On appelle souvent cela l’expansion scalaire.

Matrice identité

La notation mathématique généralement acceptée utilise la lettre majuscule I pour indiquer les matrices identité. Ce sont des matrices de taille différente avec des 1 sur la diagonale principale et des 0 ailleurs. Ces matrices ont pour propriété que AI = A et IA = A lorsque les dimensions sont compatibles.

La version d’origine de MATLAB ne pouvait pas utiliser I à cette fin, car elle ne faisait pas la distinction entre les lettres majuscules et minuscules, et i était déjà utilisé pour les indices et les unités complexe. Un jeu de mots en anglais a donc été introduit. La fonction

eye(m,n)

renvoie une matrice identité rectangulaire de dimension m x n et eye(n) renvoie une matrice identité carrée n x n.

Inverse de matrice

Si une matrice A est carrée et non singulière (déterminant non nul), alors les équations AX = I et XA = I ont la même solution X. La solution est appelée l’inverse de A et est notée A-1. La fonction inv et l’expression A^-1 calculent toutes deux l’inverse de la matrice.

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6
X = inv(A)
X =

    3.0000   -3.0000    1.0000
   -3.0000    5.0000   -2.0000
    1.0000   -2.0000    1.0000
A*X
ans =

    1.0000         0         0
    0.0000    1.0000   -0.0000
   -0.0000    0.0000    1.0000

Le déterminant calculé par det est une mesure du facteur d’échelle de la transformation linéaire décrite par la matrice. Lorsque le déterminant est exactement égal à zéro, la matrice est singulière et aucun inverse n’existe.

d = det(A)
d =

     1

Certaines matrices sont presque singulières et, malgré le fait qu’une matrice inverse existe, le calcul s’expose à des erreurs numériques. La fonction cond calcule la mesure de conditionnement pour l’inversion, qui donne une indication de la validité des résultats de l’inversion de la matrice. La mesure de conditionnement est comprise entre 1 pour une matrice numériquement stable et Inf pour une matrice singulière.

c = cond(A)
c =

   61.9839

Il est rarement nécessaire de former l’inverse explicite d’une matrice. Une mauvaise utilisation de inv se produit fréquemment lors de la résolution d’un système d’équations linéaires Ax = b. La meilleure manière de résoudre cette équation, d'un point de vue temps d’exécution et exactitude numérique, est d’utiliser l’opérateur matriciel antislash x = A\b. Consultez mldivide pour plus d’informations.

Produit tensoriel de Kronecker

Le produit de Kronecker, kron(X,Y), de deux matrices est la matrice plus grande formée à partir de tous les produits possibles des éléments de X avec ceux de Y. Si X est de dimension m x n et si Y est de dimension p x q, alors kron(X,Y) est de dimension mp x nq. Ces éléments sont arrangés de manière à ce que chaque élément de X soit multiplié par la matrice entière Y :

[X(1,1)*Y  X(1,2)*Y  . . .  X(1,n)*Y
                     . . .
 X(m,1)*Y  X(m,2)*Y  . . .  X(m,n)*Y]

Le produit de Kronecker est souvent utilisé avec des matrices de 0 et de 1 pour constituer des copies répétées de petites matrices. Par exemple, si X est une matrice de dimension 2 x 2

X = [1   2
     3   4]

et I = eye(2,2) est la matrice identité de dimension 2 x 2, alors :

kron(X,I)
ans =

     1     0     2     0
     0     1     0     2
     3     0     4     0
     0     3     0     4

et

kron(I,X)
ans =

     1     2     0     0
     3     4     0     0
     0     0     1     2
     0     0     3     4

Outre kron, d’autres fonctions utiles pour répliquer des matrices sont repmat, repelem et blkdiag.

Normes de vecteurs et de matrices

La norme p d’un vecteur x,

xp=(|xi|p)1p,

est calculée par norm(x,p). Cette opération est définie pour toute valeur de p > 1, mais les valeurs les plus courantes de p sont 1, 2 et ∞. La valeur par défaut est p = 2, ce qui correspond à la distance euclidienne ou à l’amplitude du vecteur :

v = [2 0 -1];
[norm(v,1) norm(v) norm(v,inf)]
ans =

    3.0000    2.2361    2.0000

La norme p d’une matrice A,

Ap=maxxAxpxp,

peut être calculée pour p = 1, 2 et ∞ par norm(A,p). Là encore, la valeur par défaut est p = 2 :

A = pascal(3);
[norm(A,1) norm(A) norm(A,inf)]
ans =

   10.0000    7.8730   10.0000

Dans les cas où vous souhaitez calculer la norme de chaque ligne ou colonne d’une matrice, vous pouvez utiliser vecnorm :

vecnorm(A)
ans =

    1.7321    3.7417    6.7823

Utilisation d’un calcul multithread avec des fonctions d’algèbre linéaire

MATLAB supporte le calcul multithread pour plusieurs fonctions d’algèbre linéaire et fonctions numériques calculées éléments par éléments. Ces fonctions s’exécutent automatiquement sur plusieurs threads. Pour qu’une fonction ou une expression s’exécute plus rapidement sur plusieurs processeurs, plusieurs conditions doivent être remplies :

  1. La fonction effectue des opérations qui peuvent facilement être partitionnées en sections qui s’exécutent simultanément. Ces sections doivent pouvoir s’exécuter avec une communication limitée entre les processus. Elles doivent nécessiter peu d’opérations séquentielles.

  2. La taille des données est suffisamment importante pour que les avantages d’une exécution simultanée fassent plus que compenser le temps requis pour partitionner les données et gérer des threads d’exécution séparés. Par exemple, la plupart des fonctions s’accélèrent uniquement lorsque la matrice contient au minimum plusieurs milliers d’éléments.

  3. L’opération n’est pas liée à la mémoire ; la durée de traitement ne dépend pas de la durée d’accès à la mémoire. En règle générale, les fonctions plus complexes sont davantage accélérées que les fonctions simples.

Les opérateurs de multiplication (X*Y) et de puissance (X^p) de matrices démontrent une vitesse d'exécution significativement accrue sur des matrices de grandes tailles en double précision (de l’ordre de 10 000 éléments). Les fonctions d’analyse de matrices det, rcond, hess et expm démontrent également une vitesse sensiblement accrue sur des matrices de grandes tailles en double précision.

Sujets associés

Sites web externes