Le mot « matrice » est entré en mathématiques par James Joseph Sylvester en 1850, et son algèbre a été bâtie par son ami Arthur Cayley dans « A Memoir on the Theory of Matrices », paru en 1858 au volume 148 des Philosophical Transactions. En LaTeX, une matrice se révèle n’être nullement une construction particulière. Dans amsmath, pmatrix n’est que \array{*10 c} — un array à dix colonnes centrées — entouré de parenthèses, avec 5pt retranchés de chaque côté. Cette seule ligne répond aux deux questions qui amènent ici le plus souvent : pourquoi une matrice manque de colonnes à la onzième, et comment changer l’écart entre colonnes. Cette page traite la famille pmatrix, bmatrix, vmatrix et smallmatrix, le compteur MaxMatrixCols, l’environnement array avec \arraycolsep et \arraystretch, les matrices augmentées, et les points \cdots, \vdots, \ddots.
amsmath définit exactement sept environnements de matrices
Ce sont matrix, pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix et smallmatrix. Écrivez \usepackage{amsmath} et ils sont disponibles. Tous s’emploient en mode mathématique, les entrées étant séparées sur une ligne par & (une esperluette), les lignes se terminant par \\ (deux barres obliques inverses). Le contenu s’écrit exactement de la même manière ; seule diffère la paire de délimiteurs qui l’entoure. La nomenclature est régulière elle aussi : la lettre initiale nomme le délimiteur — p pour parenthèse, b pour bracket (crochet), v pour vertical bar (barre verticale). Les Bmatrix et Vmatrix à majuscule donnent la paire « forte » : accolades et doubles barres. Le simple matrix n’ajoute rien du tout.
| Environnement | Délimiteur ajouté | Usage courant |
|---|---|---|
matrix | aucun | base lorsqu’on ajoutera soi-même un délimiteur |
pmatrix | parenthèses ( ) | les matrices et vecteurs colonnes les plus courants |
bmatrix | crochets [ ] | matrices dans la convention à crochets |
Bmatrix | accolades { } | quand on veut des accolades |
vmatrix | barres simples | | | déterminants |
Vmatrix | barres doubles ‖ ‖ | normes |
smallmatrix | aucun (compact) | petite matrice insérée dans le texte |
% preamble: \usepackage{amsmath}
\[
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
\quad
\begin{bmatrix} a & b \\ c & d \end{bmatrix}
\quad
\begin{vmatrix} a & b \\ c & d \end{vmatrix}
\]Le contenu de ces sept environnements est toujours centré ; on ne peut pas demander des colonnes alignées à droite ou à gauche. Pour choisir soi-même l’alignement, on emploie l’environnement array décrit plus bas, ou les variantes étoilées du package mathtools. mathtools définit matrix*, pmatrix*, bmatrix*, Bmatrix*, vmatrix*, Vmatrix* et smallmatrix*, chacun prenant un argument optionnel [r], [c] ou [l] qui aligne toutes les colonnes de cette façon (le défaut est c). Les formes étoilées viennent de mathtools, pas d’amsmath : il faut donc \usepackage{mathtools} — et comme mathtools charge amsmath lui-même, les deux lignes sont inutiles. Étirer les délimiteurs à la main avec \left/\right ou \big/\Big relève de la page distincte « Délimiteurs ».
La matrice manque de colonnes : MaxMatrixCols et la onzième
Le plafond par défaut est de 10 colonnes ; une onzième arrête la compilation sur ! Extra alignment tab has been changed to \cr. TeX poursuit : You have given more \span or & marks than there were in the preamble to the \halign or \valign now in progress. À la lecture, on voit qu’il ne s’agit pas d’une erreur « de matrice » mais de l’erreur d’alignement générique de \halign. Comme dit plus haut, l’intérieur de pmatrix est un \array{*\c@MaxMatrixCols c}, et la ligne 1077 d’amsmath.sty — \newcount\c@MaxMatrixCols \c@MaxMatrixCols=10 — fixe le plafond. Aucune vérification propre aux matrices ne s’exécute : la spécification de colonnes remise à array est simplement épuisée.
La solution consiste à relever le plafond avec \setcounter{MaxMatrixCols}{n}. Pour autoriser jusqu’à vingt colonnes : \setcounter{MaxMatrixCols}{20}. Une valeur plus élevée allonge d’autant la spécification de colonnes remise à array, donc TeX travaille davantage ; autour de 20, l’effet est nul en pratique sur un système actuel. Remettez 10 pour revenir à l’état initial. À noter : ce plafond ne concerne que les environnements de matrices d’amsmath, pas le array de la section suivante. De fait, \begin{array}{ccccccccccccccc} avec quinze colonnes a compilé sans la moindre erreur — dans array, on écrit simplement autant de colonnes qu’il en faut.
% without this line, an 11th column raises
% ! Extra alignment tab has been changed to \cr.
\setcounter{MaxMatrixCols}{20}
\[
\begin{pmatrix}
a_{1} & a_{2} & \cdots & a_{12}
\end{pmatrix}
\]L’environnement array : choisir soi-même alignement et filets
array est une grille générale qui reçoit une spécification de colonnes en argument obligatoire — une lettre par colonne : l pour aligné à gauche, c pour centré, r pour aligné à droite. Un | entre deux lettres trace un filet vertical à cet endroit ; {l|c|r} signifie donc trois colonnes : gauche, filet, centré, filet, droite. C’est le pendant en mode mathématique de tabular, l’environnement des tableaux de texte, et il ne s’emploie qu’en mode mathématique. Écrivez \begin{array} hors de \[ \] ou d’un environnement equation et LaTeX tente d’entrer en mode mathématique à votre place, en signalant ! Missing $ inserted. Les entrées se séparent par & et \\ comme dans tabular, mais chacune est composée comme des mathématiques, en style texte.
array n’ajoute aucun délimiteur propre : pour l’entourer de parenthèses comme une matrice, on écrit \left( … \right) (ou \left[ … \right]) à la main. On peut ici vérifier par la mesure le « 5pt retranchés de chaque côté » évoqué en ouverture. Avec le contenu a & b \\ c & d dans les deux cas, la boîte de \left(\begin{array}{cc} … \end{array}\right) fait 45,21304pt de large, celle de pmatrix 35,21304pt. L’écart vaut exactement 10pt — deux fois \arraycolsep, l’espace que array place à chaque bord de colonne et qui vaut 5pt par défaut. Les environnements de matrices d’amsmath l’annulent par un \hskip -\arraycolsep au début et à la fin. À l’inverse, modifier \arraycolsep modifie aussi l’écart entre colonnes d’une matrice : à la mesure, le réduire à 2pt a donné une pmatrix de 29,21304pt, l’élargir à 10pt une de 45,21304pt. Pour étirer uniformément toutes les lignes, on emploie \renewcommand{\arraystretch}{1.5} — à 1,5, la hauteur totale d’une matrice 2×2 est passée de 24pt à 36pt, exactement une fois et demie (la largeur est inchangée).
% array needs math mode; outside it LaTeX reports "! Missing $ inserted."
\[
\left(\begin{array}{rrr}
1 & -2 & 3 \\
0 & 5 & -1 \\
4 & 0 & 2
\end{array}\right)
\]La spécification de colonnes est ici {rrr} : toutes les colonnes sont donc alignées à droite, et les entrées négatives comme -2 et -1 s’alignent au bord droit, ce qui se lit proprement. pmatrix, toujours centré, en est incapable ; c’est en général la raison même de recourir à array.
Matrices augmentées : un filet vertical à mi-chemin
On place un | dans la spécification de colonnes d’un array et on entoure le tout de \left[ … \right]. Dans une matrice augmentée — celle qui représente un système d’équations linéaires — l’usage veut un filet vertical entre les colonnes de coefficients et la colonne des constantes. Les environnements amsmath comme bmatrix ne prennent pas de spécification de colonnes et ne peuvent donc pas le tracer ; c’est là que array fait ses preuves. Une spécification avec un | entre colonnes de coefficients et colonne de constantes (par exemple {cc|c}) suffit. Pour des parenthèses, passez à \left( … \right) ; pour des accolades, \left\{ … \right\}. Comme \left et \right étirent le délimiteur à la hauteur du contenu, la forme tient quand on ajoute des lignes (le mécanisme d’étirement lui-même relève de la page « Délimiteurs »). mathtools propose aussi des écritures plus commodes pour ce genre de matrice augmentée.
\[
\left[\begin{array}{cc|c}
1 & 2 & 5 \\
3 & 4 & 6
\end{array}\right]
\]Écrire une matrice n×n générale : \cdots, \vdots, \ddots
On place les points de suspension qui signifient « et ainsi de suite » comme une entrée de la matrice. Il en existe quatre, de directions différentes, choisies selon leur emplacement dans la grille. Toutes sont des commandes du mode mathématique et ne demandent aucun package.
\cdots— points horizontaux à mi-hauteur (⋯), pour une omission le long d’une ligne. Ils se placent à la hauteur de+et=, ce qui convient à une suite horizontale.\vdots— points verticaux (⋮), pour une omission le long d’une colonne.\ddots— points diagonaux descendant vers la droite (⋱), pour une omission le long de la diagonale principale.\ldots(et le\dotssensible au contexte) — points horizontaux sur la ligne de base (…), pour des suites de nombres ou d’indices. Dans une matrice,\cdotsconvient généralement mieux.
\[
A =
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]Voilà l’écriture canonique d’une matrice m×n générale. Dans les première, deuxième et dernière lignes, le \cdots de la troisième colonne comble l’intervalle entre a_{12} et a_{1n} ; à la troisième ligne, les \vdots donnent l’omission verticale de chaque colonne et le \ddots en position diagonale celle qui descend vers la droite — ensemble, ils disent que lignes et colonnes se poursuivent de même. Pour remplir une ligne entière de points, \hdotsfor{n} d’amsmath couvre les n colonnes indiquées d’une rangée de points horizontaux.
Une matrice dans une ligne de texte : smallmatrix tient en une ligne
Glisser une pmatrix dans un $ … $ au fil du texte gonfle la hauteur de ligne et perturbe l’interlignage alentour. Les chiffres l’expliquent : en corps 10, une matrice 2×2 placée dans \bigl( … \bigr) fait 14,5pt de haut et 9,5pt de profondeur, soit 24,0pt au total — exactement deux fois le \baselineskip de 12pt. L’environnement smallmatrix d’amsmath compose les entrées en petit et serré, et le même contenu dans les mêmes parenthèses donne 8,5pt de haut et 3,5pt de profondeur, soit 12,0pt au total : exactement une ligne. smallmatrix n’ajoute aucun délimiteur ; si vous en voulez un, entourez à la main, par exemple \bigl( … \bigr). (On peut aussi employer \left( \right), mais en ligne, les tailles fixes \bigl et \bigr perturbent moins l’interlignage.) Si mathtools est chargé, smallmatrix* est également disponible et permet de choisir l’alignement des colonnes.
% preamble: \usepackage{amsmath}
Consider the rotation matrix
$\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$
in the plane.