Matrice vide

Matrice de dimension ''m'' × 0 ou 0 × ''n'' (éventuellement de dimension 0 × 0), notée ()

En mathématiques, une matrice vide[1],[2] est définie comme une matrice dont l'une des dimensions m ou n est nulle ; il s'agit donc de matrices de dimension m × 0, 0 × n ou bien 0 × 0.

Une matrice pouvant être définie abstraitement par une famille finie d'éléments d'un ensemble K (souvent un anneau commutatif ou un corps) indexée par un produit cartésien I × J où I et J sont des ensembles finis, une matrice vide correspond au cas où soit I soit J est l'ensemble vide[3].

Ces matrices sont utiles pour travailler avec l'espace nul K0 (K étant un corps commutatif quelconque, habituellement ℝ ou ℂ). Elles permettent donc d'appliquer les matrices à cet espace vectoriel trivial. D'un point de vue pratique, les matrices vides étendent la validité de théorèmes à des cas limites ; elles permettent par exemple d'utiliser des équations de dynamique à des situations statiques[4]. En informatique, une matrice vide peut être le résultat d'une recherche infructueuse ou bien survenir au début ou à la fin d'un algorithme itératif ; l'extension des règles de l'algèbre aux cas limite des matrices vides permet donc d'éviter de traiter ces cas comme des exceptions[4].

Une matrice vide en tant que représentant d'une application linéaireModifier

L'espace nul K0 ne contient qu'un seul élément, le « vecteur vide » (le vecteur n'ayant aucune coordonnées[5]). Un espace vectoriel ayant nécessairement un élément neutre, ce vecteur vide est le vecteur nul de K0 noté 0K0 :

K0 = {0K0}

L'espace nul est de dimension 0. Considérons maintenant un K-espace vectoriel E quelconque. Il n'existe qu'une seule application linéaire de E dans K0, celle transformant tout vecteur de E en ce vecteur nul (c'est l'application nulle). L'ensemble des applications linéaires de E dans K0 est donc un singleton.

L(E, K0) = {ƒE, K0} avec
ƒE, K0 : E → K0
x ↦ 0K0

Si l'on appelle n la dimension de E, alors il existe une unique matrice de dimension n×0 qui représente cette application linéaire unique, c'est une matrice vide que l'on pourra noter ()n, 0.

De même, il n'existe qu'une seule application linéaire de K0 dans E, l'image de K0 par cette application étant le vecteur nul de E puisque l'unique élément de K0 est le vecteur nul (c'est donc également l'application nulle). L'ensemble des applications linéaires de K0 dans E est également un singleton.

L(K0, E) = {ƒK0, E} avec
ƒK0, E : K0 → E
x ↦ 0E

Il existe donc une unique matrice de dimension 0×n représentant cette applications linéaire, la matrice vide ()0, n.

En tant que représentant d'une application nulle, une matrice vide est une matrice nulle :

()n, 0 = 0n, 0 ;
()0, n = 00, n.

La matrice vide de dimension 0×0, que l'on peut noter ()0, 0, représente en particulier l'identité Id0 de l'espace nul. C'est donc une matrice inversible (régulière), donc carrée. Puisqu'elle représente également l'application nulle, nous avons donc :

()0, 0 = Id0 = 00, 0,

c'est-à-dire que dans l'anneau nul des matrices de dimension 0×0, l'unique élément est neutre à la fois pour le produit et pour la somme.

Propriétés des matrices videsModifier

Dans ce qui suit, nous notons « () » pour désigner une matrice vide de dimension quelconque ()n, 0, ()0, n ou ()0, 0.

  • image : Im() = {0} ;
  • noyau :
    • Ker()0, n = {0},
    • Ker()n, 0 = Kn ;
  • pour toutes les normes : ║()║ = 0 ;
  • la transposée d'une matrice vide est encore vide ;
  • le produit dépend de la dimension de la matrice vide considérée : considérons une matrice A de dimension (m × n) et une matrice B de dimension (n × p), au moins un des entiers m, n et p étant nul ; AB est une matrice de dimension (m × p) et donc
    • si m = 0 , alors AB est une matrice de dimension (0 × p) donc une matrice vide : ()0, n × B = ()0, p,
    • si p = 0, alors AB est une matrice de dimensions (m × 0), c'est également une matrice vide : A × ()n, 0 = ()m, 0,
    • mais si n = 0 et si m ≠ 0 et p ≠ 0, alors la matrice AB est une matrice de dimension (m × p), ce n'est pas une matrice vide ; c'est en revanche la matrice nulle : ()m, 0 × ()0, p = 0m, p ; concrètement, la multiplication des matrices correspond à la composition d'applications linéaires, nous avons ici la composition de deux applications nulles, la résultante est logiquement l'application nulle de l'espace de départ Kp vers l'espace d'arrivée Km ;
  • rang : rg() = 0 ;

Concernant la somme : l'addition de matrices est une loi de composition interne, les matrices ont donc nécessairement la même dimension. Ainsi, on ne peut écrire « A + () » ou bien « () + A » que si A est elle-même une matrice vide identique, le résultat est donc également une matrice vide.

Pour la matrice vide de dimension 0×0 :

  • ()0, 0 = I0 (matrice identité) donc :
    • la matrice est sa propre inverse : ()0, 0–1 = ()0, 0,
    • la matrice ()0, 0 à valeurs réelles est orthogonale ;
  • conditionnement :
    • certains retiennent la convention cond()0, 0 = 0 par calcul[2] (puisque la norme est nulle),
    • d'autres retiennent cond()0, 0 = 1 par application de la notion de conditionnement[6] (une précision parfaite correspondant à un score de 1 et la matrice vide est une identité, les matrices unités ayant toutes un conditionnement de 1) ;
  • déterminant : det()0, 0 = 1 ; c'est une conséquence de la notion de produit vide dans la formule de Leibniz et c'est cohérent avec le fait que c'est une matrice identité ;
  • son polynôme caractéristique est 1 d'après le point précédent ;
  • ce polynôme n'a pas de racine donc la matrice n'a pas de valeur propre (et donc pas de vecteur propre) ;
  • la matrice vide est nulle donc :

Dans les langages de programmationModifier

MatlabModifier

Jusqu'à sa version 4, Matlab n'acceptait qu'une matrice vide notée []. À partir de sa version 5, il distingue les matrices vides 0 × 0 (notée []), 0 × 1 et 1 × 0[7]. On peut obtenir une matrice vide 0 × 1 par

>> zeros(0, 1)

ans =

   Empty matrix: 0-by-1
>> a = ones(3, 2)
a =

     1     1
     1     1
     1     1
>> b = zeros(3, 2)
b =

     0     0
     0     0
     0     0
>> c = find(a<b)
c =

   Empty matrix: 0-by-1

Le logiciel vérifie la compatibilité des dimensions des matrices vides pour le produit et la somme. Si l'on ajoute un scalaire à la matrice vide — ce qui revient dans Matlab à ajouter le scalaire à tous les éléments de la matrice vide —, Matlab retourne la matrice vide.

>> 5 + c
c =

   Empty matrix: 0-by-1

Concernant le produit, on a :

>> c*c'

ans =

     []

>> c'*c

ans =

     0

On a également sum(c) == 0 et sum(c) == 1 car ce sont les éléments neutres de la somme et du produit respectivement.

Seule la matrice vide 0 × 0 est considérée comme carrée et inversible. On a alors det([]) == 1, inv([]) == [] et cond([]) == 0.

GNU Octave dispose également de ces trois matrices vide avec un comportement similaire[8].

ScilabModifier

Le logiciel Scilab ne définit qu'une seule matrice vide notée []. L'exemple précédent donne dans Scilab :

--> zeros(0, 1)
 ans  =

    []
--> a = ones(3, 2)
 a  = 

   1.   1.
   1.   1.
   1.   1.
--> b = zeros(3, 2)
 b  = 

   0.   0.
   0.   0.
   0.   0.
--> c = find(a<b)
 c  = 

    []

Le logiciel autorise le produit et la somme avec une matrice vide sans vérifier les dimensions. On a :

  • [] + A == A + [] == A jusqu'à sa version 5.5.2[9] et
  • [] + A == A + [] == [] à partir de sa version 6.0.0[10] ;
  • A*[] == []*A == [] ;
  • sum([]) == 0 et prod([]) == 1 ;
  • det([]) == 0[11] ;
  • inv([]) == [] ;
  • cond([]) == 1[6].

RModifier

Le logiciel R permet de créer des matrices vides de toutes dimensions. Par exemple :

> M <- matrix(, nrow = 3, ncol = 0) # matrice vide 3 × 0
> print(M)
    
[1,]
[2,]
[3,]

> sum(M)
[1] 0

> prod(M)
[1] 1

> N <- aperm(M, c(2, 1)) # transposée, matrice vide 0 × 3
> print(N)
     [,1] [,2] [,3]

> N %*% M # produit matriciel
<0 x 0 matrix>

> M %*% N
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
[3,]    0    0    0

> O <- matrix(, nrow = 0, ncol = 0) # matrice vide 0 × 0
> print(O)
<0 x 0 matrix>

> det(O) # déterminant
[1] 1
> A <- matrix(1:6, nrow=2) # matrice 2 × 3
> print(A)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> A %*% M
    
[1,]
[2,]

MaximaModifier

Le logiciel Maxima ne permet de créer que des matrices colonne vides ()n, 0 et la matrice carrée vide ()0, 0 :

(%i1) A:matrix()
(%o1) matrix()

(%i2) length(A)
(%o2) 0

(%i3) B:matrix([], [], [])
      ┌ ┐
      │ │
(%o3) │ │
      │ │
      └ ┘

(%i2) length(B)
(%o2) 3

(%i5) transpose(B)
(%o5) matrix()

(%i6) C:matrix([])
(%o6) matrix([])

(%i7) length(C)
(%o7) 1

Notez que matrix() est la matrice ()0, 0 ; Maxima n'est pas cohérent puisque charpoly(A, x), qui calcule le polynôme caractéristique d'une matrice, renvoie une erreur indiquant que A n'est pas carrée mais a pour dimension 1 × 0. L'expression matrix([]) donne la matrice 1 × 1 qui contient le vecteur vide et qui, pour Maxima, est différente de matrix(). La transposée d'une matrice ()n, 0 donne la matrice ()0, 0

BibliographieModifier

  • [de Boor 1990] (en) Carl de Boor, « An empty exercise », ACM SIGNUM Newsletter, vol. 25, no 4,‎ , p. 2-6 (DOI 10.1145/122272.122273, lire en ligne)
  • [Nett et Haddad 1993] C. N. Nett et W. M. Haddad, « A system-theoretic appropriate realization of the empty matrix concept », IEEE Transactions on Automatic Control, vol. 38, no 5,‎ , p. 771-775 (DOI 10.1109/9.277245, lire en ligne)

Notes et référencesModifier

  1. (en) Josef Stoer et Christoph Witzgall, Convexity and Optimization in Finite Dimensions I, Springer, coll. « Grundlehren der mathematischen Wissenschaften » (no 163), (ISBN 978-3-642-46218-4 et 978-3-642-46216-0, DOI 10.1007/978-3-642-46216-0), p. 3
  2. a et b de Boor 1990
  3. Voir Nicolas Bourbaki, « Algèbre linéaire », dans Algèbre, Springer, coll. « Éléments de mathématique » (no II), , 2e éd. (lire en ligne), A II.139, qui parle aussi de « matrice vide » dans le cas où I ou J est l'ensemble vide.
  4. a et b Nett et Haddad 1993, p. 771.
  5. Un tel vecteur est alors le 0-uplet d'éléments de K, et peut donc être identifié comme l'application vide vers K, notée ØK.
  6. a et b C'est par exemple le choix du logiciel Scilab des versions 5.3 à 6.0, voir « Matrice vide (Scilab 5.3.0) », sur help.scilab.org, (consulté le 4 juin 2018) et « Matrice vide (Scilab 6.0.1) », sur help.scilab.org, (consulté le 4 juin 2018).
  7. Loren, « Calculus with Empty Arrays », sur The Art of Matlab, (consulté le 4 juin 2018)
  8. « Empty matrices », sur octave.org (consulté le 6 juin 2018)
  9. « Matrice vide (Scilab 5.5.2) », sur help.scilab.org, (consulté le 4 juin 2018).
  10. « Matrice vide (Scilab 6.0.0) », sur help.scilab.org, (consulté le 4 juin 2018).
  11. Contrairement à ce que mentionne l'aide en ligne.