Matrice vide

En mathématiques, une matrice vide[1],[2] est définie comme une matrice dont l'une des dimensions ou est nulle ; il s'agit donc de matrices de dimension , ou de manière triviale .

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

Ces matrices sont utiles pour travailler avec l'espace nul ( é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éaire

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

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

avec

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

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

avec

Il existe donc une unique matrice de dimension représentant cette application linéaire, la matrice vide .

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

La matrice vide de dimension , notée , représente en particulier l'identité de l'espace nul. C'est donc une matrice inversible (régulière), donc carrée. Elle représente également l'application nulle, donc :

Dans l'anneau nul des matrices de dimension , l'unique élément est neutre à la fois pour le produit et pour la somme.

Propriétés des matrices vides

Dans ce qui suit, la notation « () » désigne une matrice vide quelconque.

  • l'image de toute matrice vide est réduite au vecteur nul :  ; le rang de toute matrice vide est donc nul :  ;
  • le noyau d'une matrice vide est l'espace tout entier : si est vide,  ;
  • la norme de toute matrice vide est nulle : ;
  • la transposée d'une matrice vide est encore vide ;
  • le produit dépend de la dimension de la matrice vide considérée : pour une matrice A de dimension et une matrice B de dimension , au moins un des entiers , et étant nul ; est une matrice de dimension et donc :
    • si , alors est une matrice de dimension donc une matrice vide : ,
    • si , alors est une matrice de dimensions , c'est également une matrice vide : ,
    • mais si et si et , alors la matrice est la matrice nulle de dimension
       ; 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 vers l'espace d'arrivée  ;

L'addition de matrices est une loi de composition interne, les matrices ont donc la même dimension. Ainsi, on ne peut écrire «  » ou bien «  » que si est elle-même une matrice vide identique, le résultat est donc également une matrice vide.

Pour la matrice vide de dimension  :

  • (matrice identité) donc :
    • la matrice est sa propre inverse : ,
    • la matrice à valeurs réelles est orthogonale ;
  • conditionnement :
    • certains retiennent la convention par calcul[2] (puisque la norme est nulle),
    • d'autres retiennent 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 :  ; 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 à la fois symétrique et antisymétrique, et de trace nulle.

Dans les langages de programmation

Matlab

Jusqu'à sa version 4, Matlab n'acceptait qu'une matrice vide notée []. À partir de sa version 5, il distingue les matrices vides (notée []), et [7]. On peut obtenir une matrice vide 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 prod(c) == 1 car ce sont les éléments neutres de la somme et du produit respectivement.

Seule la matrice vide 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].

Scilab

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].

R

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,]

Maxima

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

(%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  ; 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 . L'expression matrix([]) donne la matrice qui contient le vecteur vide et qui, pour Maxima, est différente de matrix(). La transposée d'une matrice donne la matrice .

Python

La bibliothèque numpy permet de créer une matrice vide (ci-dessous, la matrice se compose de zéro lignes et 5 colonnes) :

import numpy as np  
x = np.empty((0, 5))

La bibliothèque pytorch permet de créer un tenseur vide de zéro lignes et 5 colonnes :

import numpy as np  
import torch
x = np.empty((0, 5))
x = torch.empty(size=(0,5))
x = torch.zeros((0,5))

Bibliographie

  • [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] (en) 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érences

  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 , et peut donc être identifié comme l'application vide vers , notée .
  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 ) et « Matrice vide (Scilab 6.0.1) », sur help.scilab.org, (consulté le ).
  7. Loren, « Calculus with Empty Arrays », sur The Art of Matlab, (consulté le )
  8. « Empty matrices », sur octave.org (consulté le )
  9. « Matrice vide (Scilab 5.5.2) », sur help.scilab.org, (consulté le ).
  10. « Matrice vide (Scilab 6.0.0) », sur help.scilab.org, (consulté le ).
  11. Contrairement à ce que mentionne l'aide en ligne.