行列と配列

行列やベクトル、表のように格子状に並んだ数式は、amsmath パッケージの 行列環境pmatrix など)か、より汎用的な **array 環境** で組みます。どちらも要素を & で横に、\\ で縦に並べるという同じ書き味ですが、括弧の付き方や桁揃えの自由度が異なります。このページでは、用途で使い分ける行列環境の一式、列の揃えや罫線を自分で指定する array、拡大係数行列(拡大行列)の作り方、そして行列の中で「以下同様」を示す点々(\cdots\vdots\ddots)を順に見ていきます。

amsmath の行列環境

行列を組む最も手軽な方法は、amsmath パッケージ が用意する一連の行列環境です。プリアンブルに \usepackage{amsmath} を書いておけば使えます。いずれも数式モードのなかで使い、要素を **&(アンパサンド)で横方向に区切り、\\(バックスラッシュ二つ)で行を改めます。環境ごとに違うのは、行列を囲む 括弧(区切り記号)** だけで、中身の書き方は共通です。

名前の付け方には規則があります。先頭の文字が括弧の種類を表し、p は parentheses(丸括弧)、b は brackets(角括弧)、v は vertical bar(縦線)の頭文字です。大文字始まりの BmatrixVmatrix は、それぞれ波括弧・二重縦線という「より強い」括弧に対応します。素の matrix は括弧を付けません。

環境付く括弧主な用途
matrixなし括弧を自分で付けたいときの土台
pmatrix丸括弧 ( )最も一般的な行列・列ベクトル
bmatrix角括弧 [ ]行列(角括弧を好む流儀)
Bmatrix波括弧 { }集合的なまとまりを示すとき
vmatrix縦線 | |行列式(determinant)
Vmatrix二重縦線 ‖ ‖ノルム(norm)
smallmatrixなし(小型)本文中に埋め込む小さな行列

次の例は、同じ 2×2 の中身を pmatrixbmatrixvmatrix で組んだものです。\\ の前後の空白や改行は出力に影響しないので、ソースは読みやすく整形してかまいません。

latex
\[
  \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}
\]

これは、独立した行の中央に三つの 2×2 行列が \quad の間隔をあけて並ぶ出力になります。一つ目は丸括弧で囲まれ、二つ目は角括弧、三つ目は左右に縦線が引かれた行列式の形です。要素は中央揃えで、abcd は変数として斜体に組まれます。

なお行列環境の要素は 常に中央揃え で、桁を揃える(右寄せ・左寄せにする)といった指定はできません。揃え方を自分で決めたいときは、後述の array 環境を使います。

列数の上限(MaxMatrixCols)

amsmath の行列環境は、既定では 最大 10 列 までしか組めません。これは MaxMatrixCols というカウンタの初期値が 10 に設定されているためです。11 列以上の行列を組もうとすると、列が足りない旨のエラーになります。

より多くの列が必要なときは、\setcounter{MaxMatrixCols}{n} でこの上限を引き上げます。たとえば 20 列まで許すなら次のように書きます。値を大きくすると LaTeX の処理は重くなりますが、現在の TeX 環境では 20 程度なら実用上ほとんど影響はありません。元に戻したいときは値を 10 に設定し直します。

latex
\setcounter{MaxMatrixCols}{20}
\[
  \begin{pmatrix}
    a_{1} & a_{2} & \cdots & a_{12}
  \end{pmatrix}
\]

この上限は amsmath の行列環境にだけ関わるもので、次に述べる array 環境には適用されません。array は列指定で必要なだけ列を書けます。

array 環境

array 環境は、桁揃えや罫線を 自分で指定できる 汎用の格子組みです。本文の表を組む tabular 環境の数式版で、数式モードのなかでしか使えません\[ \]equation 環境のなかに置きます)。要素は tabular と同じく &\\ で区切りますが、各要素は数式として(テキストスタイルで)組まれます。

array には 列指定(column specification) という必須の引数があります。{ccc} のように、列の数だけ揃え方を表す文字を並べます。l は左寄せ、c は中央揃え、r は右寄せ。文字の間に | を入れると、その位置に 縦罫線 が引かれます。たとえば {l|c|r} なら「左寄せ・縦線・中央・縦線・右寄せ」の 3 列です。

array 自体は括弧を付けません。行列として括弧で囲みたいときは、**\left( … \right)**(あるいは \left[ … \right] など)で手動で挟みます。\left\right は中身の高さに合わせて括弧を自動で伸縮させるので、行数の多い行列でも括弧がきれいに行全体を囲みます。これは amsmath の行列環境が内部で行っているのと同じことを、自分の手で行う書き方にあたります。

latex
\[
  \left(\begin{array}{rrr}
    1 & -2 & 3 \\
    0 & 5 & -1 \\
    4 & 0 & 2
  \end{array}\right)
\]

この例では、丸括弧で囲まれた 3×3 行列が出力されます。列指定が {rrr} なので各列は 右寄せ になり、-2-1 のような負号付きの数も桁が右にそろって読みやすく並びます。pmatrix が常に中央揃えなのに対し、array では揃え方を選べる点が要点です。

拡大係数行列(縦線入り)

連立一次方程式を表す 拡大係数行列(拡大行列) のように、行列の途中に縦線を入れたいことがあります。amsmath の bmatrix 等は列指定を取らないため縦線を入れられませんが、array の列指定 | を使えば実現できます。係数部分と定数項のあいだに | を置いた列指定(たとえば {cc|c})を与え、全体を \left[ … \right] で囲みます。

latex
\[
  \left[\begin{array}{cc|c}
    1 & 2 & 5 \\
    3 & 4 & 6
  \end{array}\right]
\]

これは、角括弧で囲まれた 2 行の行列で、2 列目と 3 列目のあいだに縦罫線が一本引かれた拡大係数行列を出力します。左側の 1 2 / 3 4 が係数行列、縦線の右側の 5 / 6 が定数項にあたります。\left[\right] が中身の高さに合わせて角括弧を伸ばすので、行数が増えても破綻しません。

同じことを丸括弧で行うなら \left( … \right) に、波括弧なら \left\{ … \right\} に変えるだけです(mathtools パッケージを使うと、こうした拡大行列をより簡潔に書く方法も用意されています)。

行列のなかの点々(…・⋮・⋱)

一般の n×n 行列を表すとき、「以下同様」を示す 点々(省略記号) が欠かせません。LaTeX には向きの違う 4 種類が用意されており、行列のどこで使うかで選び分けます。いずれも数式モードの命令です。

  • \cdots中央の高さ に並ぶ横の三点(⋯)。行内で要素を省略するときに使う。+= と同じ高さに来るので、横一列の省略に向く。
  • \vdots に並ぶ三点(⋮)。列方向の省略に使う。
  • \ddots斜め(右下がり) に並ぶ三点(⋱)。対角線方向の省略に使う。
  • \ldots(および文脈依存の \dots)— ベースライン(下寄り) に並ぶ横の三点(…)。数や添字の並びの省略に使う。行列のなかでは \cdots の方が見栄えがよいことが多い。

典型的な使い方は、横の省略に \cdots、縦の省略に \vdots、対角の省略に \ddots を、行列の要素として置くことです。次は一般の n×n 行列を pmatrix で書いた標準的な例です。

latex
\[
  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}
\]

これは丸括弧で囲まれた m×n 行列を出力します。1 行目と 2 行目・最終行では、第 3 列の \cdotsa_{12}a_{1n} のあいだを中央の高さの横三点で埋め、3 行目では各列の \vdots が縦三点、対角位置の \ddots が右下がりの斜め三点となって、「行も列も同様に続く」ことを示します。添字 a_{11} などは _ で下付きに組まれます。

一行まるごとを点線で埋めたいときは、amsmath の \hdotsfor{n} を使うと、指定した n 列ぶんを横の点線でまたいで埋められます。

本文中の小さな行列(smallmatrix)

pmatrix などをインライン数式(本文中の $ … $)に入れると、行の高さを大きく押し広げてしまい、前後の行間が乱れます。本文の流れのなかに小さな行列を埋め込みたいときは、amsmath の **smallmatrix 環境** を使います。要素が小さく詰めて組まれ、行の高さをほとんど崩しません。

smallmatrix 自体は括弧を付けないので、必要なら \bigl( … \bigr) のような括弧で手動で挟みます(\left( \right) でも囲めますが、インラインでは固定サイズの \bigl\bigr の方が行間を乱しにくいことがあります)。

latex
回転行列 $\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$ を考える。

これは本文の一行のなかに、丸括弧で囲まれた小さな 2×2 の回転行列が、行の高さをほとんど崩さずに収まる出力になります。\cos\sin は立体の関数名として組まれます。