第3章 行列論の復習

本章と次章では学部初年次の入門的な線形代数学で学ぶ重要項目のうち関連するものを復習する。経済動学の学習に最低限必要な項目を取り上げているが,十分に網羅的になっている訳ではないので, 線形代数学の成書を1つ手元に置いておくのがよいと思う.

本章では行列の形態にまつわる名称や基本演算および初等変形を定義する。次章以降で明らかになるように,線形動的システムの係数行列に対して初等変形を施すことで, 同等な解を持ち分析が容易な動的システムを導出できる。安定性分析の基礎となる重要な

3.1 行列の形

システムの振る舞いをよりよく理解するためには抽象的な線形空間論まで踏み込む必要があるが,それは次回以降に譲って,ここでは表形式に数を並べたものとして行列 (matrix) を捉えよう。従って,行列とは次のような対象である。 \[ A = \begin{bmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n-1} & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n-1} & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ a_{m-1,1} & a_{m-1,2} & \cdots & a_{m-1,n-1} & a_{m-1,n}\\ a_{m,1} & a_{m,2} & \cdots & a_{m-1,n} & a_{m,n} \end{bmatrix} \]

ただし,\(a_{i,j}\in\mathbb{F}\)\(i=1,\dots,m\)\(j=1,\dots,n\)\(\mathbb{F}\)\(\mathbb{R}\) または \(\mathbb{C}\)。数 \(a_{i,j}\) を行列の成分または要素 (element,component,entry) と呼ぶ。混乱の恐れがない場合はコンマを外して \(a_{ij}\) と書くことが多い。成分を明らかにするための簡略表記として \(A=[a_{ij}]\) といった書き方をする場合がある。また,行列 \(A\)\((i,j)\) 成分 \(a_{ij}\)\(A_{ij}\) のように書くこともある.

\[ \begin{aligned} &\begin{bmatrix}a_{1,1} & a_{1,2} & \cdots & a_{1,n-1} & a_{1,n}\end{bmatrix}\\ &\begin{bmatrix}a_{2,1} & a_{2,2} & \cdots & a_{2,n-1} & a_{2,n}\end{bmatrix}\\ &\hspace{6em}\vdots\\ &\begin{bmatrix}a_{m,1} & a_{m,2} & \cdots & a_{m,n-1} & a_{m,n}\end{bmatrix} \end{aligned} \]

を行列の行 (row) という。一方,各 \[ \begin{bmatrix} a_{1,1}\\ a_{2,1}\\ \vdots\\ a_{m-1,1}\\ a_{m,1} \end{bmatrix}, \ \begin{bmatrix} a_{1,2}\\ a_{2,2}\\ \vdots\\ a_{m-1,2}\\ a_{m,2} \end{bmatrix}, \ \dots,\ \begin{bmatrix} a_{1,n}\\ a_{2,n}\\ \vdots\\ a_{m-1,n}\\ a_{m,n} \end{bmatrix} \]

を行列の列 (column) という。上の行列\(A\)\(m\)個の行と\(n\)個の列を持つので,\(m\times n\) 行列と呼ばれる。\(\mathbb{F}^{m\times n}\) を \(\mathbb{F}\) の値を成分にもつ \(m\times n\) 行列の全体の集合と定義する。

行列の形にまつわるいくつかの用語を確認しておこう。

正方行列 (square matrix)

\(m=n\) のとき,すなわち \(A\in\mathbb{F}^{n\times n}\) のとき,\(A\)\(n\) 次の正方行列 (square matrix of order \(n\)) であるいう。

ゼロ行列 (zero matrix,null matrix)

すべての成分がゼロである行列をゼロ行列という。サイズが \(m\times n\) であるゼロ行列を \(0_{m\times n}\) とか \(O_{m\times n}\) と書く。多くの場合にそうであるように,混乱の恐れがない場合には \(O\) とか \(0\) と書く。

対角成分 (diagonal elements)

正方行列 \(A\) の成分 \(\{a_{ij}\ |\ i,j=1,\dots,n\}\) のうち \(i=j\) なる部分 \(\{a_{11},\dots,a_{nn}\}\)対角成分 (diagonal element)という。対角成分の1つ上の成分 \(\{a_{12},a_{23},\dots,a_{n-1,n}\}\)優対角成分 (superdiagonal element),対角成分の1つ下の成分 \(\{a_{21},a_{32},\dots,a_{n,n-1}\}\)劣対角成分 (subdiagonal element) という。対角成分の和をトレース (trace) といい,\(\mathrm{trace}A\) と書く.

三角行列 (triangular matrix)

正方行列\(A=[a_{ij}]\)\(i>j\Rightarrow a_{ij}=0\) を満たすとき,\(A\)上三角行列 (upper triangular matrix) という。一方,\(A=[a_{ij}]\)\(i<j\Rightarrow a_{ij}=0\) を満たすとき,\(A\)下三角行列 (lower triangular matrix) であるという。上三角行列は対角成分より下にある成分がすべてゼロ,下三角行列は対角成分より上にある成分がすべてゼロである。

対角行列 (diagonal matrix)

対角成分を除いた成分がすべてゼロであるような正方行列を対角行列 (diagonal matrix)という。ときに,\(\mathrm{diag}\{a_{1},\dots,a_{n}\}\) のように書いて対角成分が左上から順に \(a_{1},\dots,a_{n}\) である対角行列を表すことがある。これは Matlab などで利用されている記法で,R でも類似の方法(diag(c(1, 2, 3)))で対角行列を定義できる。

単位行列 (identity matrix)

対角成分がすべて\(1\) である対角行列を単位行列という。\(n\)次の単位行列を \(I_{n}\) と書く。誤解の恐れがない場合は単に \(I\) と書く。R では diag(n)\(n\) 次単位行列を作る。

転置行列 (transpose matrix)

\(A=[a_{ij}]\in\mathbb{F}^{m\times n}\) の転置行列 \(A^{\top}\) とは,\((A^{\top})_{ij}=a_{ji}\), \(i=1,\dots,m\)\(j=1,\dots n\) を満たす\(m\times n\)行列のことをいう。R では t(A) で行列 A の転置行列を得る。

共役転置行列 (conjugate transpose)

\(A=[a_{ij}]\in\mathbb{F}^{m\times n}\) の共役転置行列 \(A^{*}\) とは,\((A^{*})_{ij}=\bar{a}_{ji}\), \(i=1,\dots,m\)\(j=1,\dots n\) を満たす\(m\times n\)行列のことである。実行列の共役転置行列は転置行列である。 R では Conj(t(A)) 関数で行列 A の転置行列を得る。

対称行列 (symmetric matrix)

\(A\in\mathbb{R}^{n\times n}\)対称行列 (symmetric matrix)であるとは,\(A^{\top}=A\) が成り立つことをいう。

エルミート行列 (Hermitian matrix)

\(A\in\mathbb{C}^{n\times n}\) がエルミート行列であるとは,\(A^{*}=A\) が成り立つことをいう。

列ベクトル・行ベクトル (column vector,row vector)

のちに見るように行列の集合には元どうしの加法とスカラー倍が定義され,それらは望ましい性質を満たす。ゼロ元・逆元と呼ばれる特別な元の存在も自明であるので,特定のサイズの行列全体の集合は,(のちに定義する) ベクトル空間の一例となっている。特に \[ \mathbb{F}^{n\times1},\quad\mathbb{F}^{1\times n} \] は我々が頻繁に用いる有限次元ベクトル空間の表現となっている。通常これらのうちいずれかを \(\mathbb{F}^{n}\) と記す. 一般の \(A\in\mathbb{F}^{n\times m}\)\(n\)次元列ベクトル (\(\mathbb{F}^{n\times1})\)\(m\) 個並べたものと捉えたり,\(m\)次元列ベクトル (\(\mathbb{F}^{1\times m})\)\(n\) 個並べたものと捉えたりすることがある.

ブロック行列 (block matrix)

行列をいくつかの部分行列に分解した上で分析する方が都合の良い場合がある。例えば, \[ A=\left[ \begin{array}{ccc|ccc} a_{1,1} & \cdots & a_{1,n} & a_{1,n+1} & \cdots & a_{1,n+q}\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ a_{m,1} & \cdots & a_{m,n} & a_{m,n+1} & \cdots & a_{m,n+q}\\ \hline a_{m+1,1} & \cdots & a_{m+1,n} & a_{m+1,n+1} & \cdots & a_{m+1,n+q}\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ a_{m+p,1} & \cdots & a_{m+p,n} & a_{m+p,n+1} & \cdots & a_{m+p,n+q} \end{array} \right] =: \left[ \begin{array}{c|c} A_{11} & A_{12}\\ \hline A_{21} & A_{22} \end{array} \right] \] のように,大きな行列 \(A\in\mathbb{F}^{(m+p)\times(n+q)}\) を4つの部分行列 \(A_{11}\in\mathbb{F}^{m\times n}\), \(A_{12}\in\mathbb{F}^{m\times q}\)\(A_{21}\in\mathbb{F}^{p\times n}\), \(A_{22}\in\mathbb{F}^{p\times q}\) に分解するなどである.16 \(A_{12}=0\)\(A_{21}=0\) であるとき,ブロック対角行列 (block diagonal matrix)であるといい,\(A_{21}=0\) であるときブロック上三角行列 (block upper triangular matrix)であるなどという。

3.2 行列の演算

スカラー倍

\(A\in\mathbb{F}^{m\times n}\) に対してスカラー倍 (scalar multiplication) あるいは定数倍と呼ばれる操作が次のように定義される: \(\alpha\in\mathbb{F}\) について, \[ \alpha A:=\begin{bmatrix}\alpha a_{1,1} & \alpha a_{1,2} & \cdots & \alpha a_{1,n-1} & \alpha a_{1,n}\\ \alpha a_{2,1} & \alpha a_{2,2} & \cdots & \alpha a_{2,n-1} & \alpha a_{2,n}\\ \vdots & \vdots & \ddots & \vdots & \vdots\\ \alpha a_{m-1,1} & \alpha a_{m-1,2} & \cdots & \alpha a_{m-1,n-1} & \alpha a_{m-1,n}\\ \alpha a_{m,1} & \alpha a_{m,2} & \cdots & \alpha a_{m-1,n} & \alpha a_{m,n} \end{bmatrix}\in\mathbb{F}^{m\times n}. \]

同数の行と列を持つ2つの行列に対して次のようにして和が定義できる。\(A=[a_{ij}]\in\mathbb{F}^{m\times n}\), \(B=[b_{ij}]\in\mathbb{F}^{m\times n}\) に対して, \[ A+B:=[a_{ij}+b_{ij}]\in\mathbb{F}^{m\times n}. \] すなわち,行列の和は成分ごとに和をとった行列である。定義から自明なことであるが,和は交換法則と結合法則を満たす。すなわち, 任意の \(A,B,C\in\mathbb{F}^{m\times n}\) について \[ \begin{aligned} A+B & =B+A\\ A+(B+C) & =(A+B)+C \end{aligned} \] が成り立つ。ゼロ行列 \(0\in\mathbb{F}^{m\times n}\) は任意の \(A\in\mathbb{F}^{m\times n}\)に対して \[ A+O_{m\times n}=A \] を満たす。

行列 \(A=[a_{ij}]\in\mathbb{F}^{m\times n}\)\(B=[b_{ij}]\in\mathbb{F}^{n\times p}\) の積 \(AB\in\mathbb{F}^{m\times p}\) を次のように定義する. \[ AB:=\left[\sum_{k=1}^{n}a_{ik}b_{kj}\right]. \] この定義は線形写像の合成という観点から見ればごく自然なものであることが分かる。解説は第5章で行う。

正方行列 \(A,B\in\mathbb{F}^{n\times n}\) に対して,\(AB\)\(BA\) の両方が定義される。しかし,それらは一般には一致しない。例えば, \[ \begin{aligned} \begin{bmatrix} 1 & 1\\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0\\ 1 & 1 \end{bmatrix} & \neq \begin{bmatrix} 1 & 0\\ 1 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1\\ 0 & 1 \end{bmatrix} \end{aligned} \] である。\(AB=BA\) が成り立つとき,\(A\)\(B\) は可換であるという。単位行列とゼロ行列は任意の行列と可換である. 任意の \(A\in\mathbb{F}^{n\times n}\) に対して \[ AI_{n}=I_{n}A=A \]\[ AO_{n\times n}=O_{n\times n}A=O_{n\times n} \] が成り立つ。

行列の積には次の性質がある。 \[ \begin{aligned} (AB)C & =A(BC)\\ A(B+C) & =AB+AC\\ (A+B)C & =AC+BC. \end{aligned} \] スカラー\(\alpha\)に対して, \[ (\alpha A)B=A(\alpha B)=\alpha(AB). \]

逆行列 (inverse matrix)

正方行列 \(A\in\mathbb{F}^{n\times n}\) に対して, \[ AB=BA=I_{n} \] なる \(B\in\mathbb{F}^{n\times n}\) が存在するとき \(A\)可逆 (invertible) あるいは正則 (regular) であるという。\(B\)\(A\)逆行列 (inverse matrix) といい \(A^{-1}\) と記す。

逆行列は存在すれば一意的に定まることを証明せよ.

逆行列は存在すれば正則であることを証明せよ。

\(A,B\in\mathbb{F}^{n\times n}\) がともに正則であるとき,\(AB\) は可逆であり,\((AB)^{-1}=B^{-1}A^{-1}\) が成り立つことを示せ。

直交行列 (diagonal matrix)

\(A\in\mathbb{R}^{n\times n}\) が直交行列であるとは,\(A^{\top}=A^{-1}\) が成り立つことをいう。

ユニタリ行列 (unitary matrix)

\(A\in\mathbb{C}^{n\times n}\) がユニタリ行列であるとは,\(A^{*}=A^{-1}\) が成り立つことをいう。

3.3 線形方程式

行列とベクトルの組 \[ \begin{aligned} A & =[a_{ij}]\in\mathbb{F}^{m\times n},\\ b & =[b_{j}]\in\mathbb{F}^{m\times1} \end{aligned} \] に対して, \[ Ax=b \] を満たす \(x\in\mathbb{F}^{n\times1}\) を求める問題を線形方程式 (linear equation)という。\(Ax\) は行列\(A\)と列ベクトル \(x\) の積である。これは次の連立1次方程式の行列表現に外ならない。 \[ \begin{cases} a_{11}x_{1}+\cdots+a_{1n}x_{n}=b_{1}\\ \qquad\vdots\\ a_{m1}x_{1}+\cdots+a_{mn}x_{n}=b_{m} \end{cases} \]

3.3.1 線形連立方程式の変形

要点を理解するために簡単な例を用いよう。連立方程式 \[\begin{equation} \begin{cases} x_{1}+x_{2}=1\\ x_{1}-x_{2}=2 \end{cases} \tag{3.1} \end{equation}\] を行列の形式で表現すると \[\begin{equation} \begin{bmatrix} 1 & 1\\ 1 & -1 \end{bmatrix} \begin{bmatrix} x_{1}\\x_{2} \end{bmatrix} = \begin{bmatrix} 1\\2 \end{bmatrix} \tag{3.2} \end{equation}\] と表すことができる。式(3.1)と全く同じ連立方程式で,順序だけを入れ替えたもの \[\begin{equation} \begin{cases} x_{1}-x_{2}=2\\ x_{1}+x_{2}=1 \end{cases} \tag{3.3} \end{equation}\] を行列表示すると, \[\begin{equation} \begin{bmatrix}1 & -1\\ 1 & 1 \end{bmatrix}\begin{bmatrix}x_{1}\\ x_{2} \end{bmatrix}=\begin{bmatrix}2\\ 1 \end{bmatrix} \tag{3.4} \end{equation}\] である。式(3.2)と式(3.4)は,全く同じ \((x_{1},x_{2})\) が解であるという意味で同値な方程式であるが,係数行列 \(A\) と定数項 \(b\) が異なっている。この他にも,式(3.1)の第1式を定数倍した \[\begin{equation} \begin{cases} 2x_{1}-2x_{2}=4\\ x_{1}+x_{2}=1 \end{cases} \tag{3.5} \end{equation}\] や,式(3.1) の第1式を第2式に足すことで得られる \[\begin{equation} \begin{cases} x_{1}-x_{2}=2\\ x_{1}+x_{2}+(x_{1}-x_{2})=1+2 \end{cases} \tag{3.6} \end{equation}\]

も同じ解をもつはずである。各自,式(3.5),式(3.6) の行列表現を確認してほしい。

あるいは次の方程式 \[ \begin{cases} x_{2}+x_{1}=1\\ -x_{2}+x_{1}=2 \end{cases} \] も全く同じ方程式を変形したものなので,その行列表示 \[\begin{equation} \begin{bmatrix}1 & 1\\ -1 & 1 \end{bmatrix}\begin{bmatrix}x_{2}\\ x_{1} \end{bmatrix}=\begin{bmatrix}1\\ 2 \end{bmatrix}\tag{3.7} \end{equation}\]

も,\(x_{1},x_{2}\) の順序は入れ替わるが同じ解を導く。従って,\((x_{1},x_{2})\) でなく \((x_{2},x_{1})\) の順で解を得たことさえ了解していれば,式(3.7)と式(3.4) は本質的に同じ線形方程式である.

見かけ上異なる複数の行列が連立方程式の解という観点から見れば全て同じものになるという事実は応用上大変重要である。連立方程式や動学方程式を分析する上では, もっとも有利な形式に変形してから分析すれば十分なのである。特に,あらかじめ都合のよい形式に変形されているものとして理論分析を行うこともあるので, 応用者は自らそのような形式に変形し,さらに復元できなければいけない。

連立方程式の求解に関していえば,同値な変形を繰り返して \[ \begin{cases} x_{1}=*\\ x_{2}=* \end{cases} \] 形式を導けばよい。行列表示すると \[ \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x_{1}\\ x_{2} \end{bmatrix}=\begin{bmatrix}*\\ * \end{bmatrix} \] を導けばよい。

3.3.2 行基本変形

連立方程式の変形を行列の言葉で表現してみよう。

行の交換

行列の行に対するもっとも基本的な操作は行の交換であろう。連立方程式は順序付けされてない方程式の組であり,これに無理やり順序付けたものが先ほどの行列表示に他ならないので, 行順序の変更に対して解は不変である。

\(2\times2\) 行列の行順序の変更は行列 \(\left[\begin{smallmatrix}0 & 1\\ 1 & 0 \end{smallmatrix}\right]\)を左から掛ける操作に対応する。 \[ \begin{aligned} \begin{bmatrix}0 & 1\\ 1 & 0 \end{bmatrix}\begin{bmatrix}1 & 1\\ 1 & -1 \end{bmatrix}\begin{bmatrix}x_{1}\\ x_{2} \end{bmatrix} & =\begin{bmatrix}1 & -1\\ 1 & 1 \end{bmatrix}\begin{bmatrix}x_{1}\\ x_{2} \end{bmatrix}\\ \begin{bmatrix}0 & 1\\ 1 & 0 \end{bmatrix}\begin{bmatrix}1\\ 2 \end{bmatrix} & =\begin{bmatrix}2\\ 1 \end{bmatrix}. \end{aligned} \] 次の関係が成り立つことに注目してほしい. \[ \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}^{-1} = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}. \] 従って,式(3.2) と式(3.4)は正則行列 \(\left[\begin{smallmatrix}0 & 1\\ 1 & 0 \end{smallmatrix}\right]\) を通して互いに変形し合う。

より一般の \(m\times n\) 行列についてどのようになるか考えてみよ。

A\(\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)行と第\(j\)行を入れ替えた結果が行列積 \(C_{ij}^{m}A\) で表せるような行列 \(C_{ij}^{m}\in\mathbb{F}^{m\times m}\) が存在する。 \(C_{ij}^{m}\) の要素をかきだしなさい。

行全体の非ゼロ定数倍

1つの行にゼロでない定数 \(u\) をかける操作も行列積を用いて表現できる。ここでも簡単な場合だけ見ておこう。 \[ \begin{bmatrix}1 & 0\\ 0 & u \end{bmatrix}\begin{bmatrix}1 & 1\\ 1 & -1 \end{bmatrix}=\begin{bmatrix}1 & 1\\ u & -u \end{bmatrix}. \]

次の関係が成り立つことに注目してほしい. \[ \begin{bmatrix}1 & 0\\ 0 & u \end{bmatrix}^{-1}=\begin{bmatrix}1 & 0\\ 0 & 1/u \end{bmatrix}. \]

\(A\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)行に一斉に非ゼロ定数 \(u\) をかけた結果が行列積 \(D_{i}^{m}(u)A\) で表せるような行列 \(D_{i}^{m}(u)\in\mathbb{F}^{m\times m}\) が存在する。\(D_{i}^{m}\) の要素をかきだしなさい。

行の定数倍を別の行に加える

1つの行に(ゼロであってもよい)定数 \(a\) をかける操作も行列積を用いて表現できる。簡単な場合だけ見ておこう。 \[ \begin{bmatrix}1 & a\\ 0 & 1 \end{bmatrix}\begin{bmatrix}1 & 1\\ 1 & -1 \end{bmatrix}=\begin{bmatrix}1+a & 1-a\\ 1 & -1 \end{bmatrix}. \] 次の関係が成り立つことに注目してほしい。 \[ \begin{bmatrix}1 & a\\ 0 & 1 \end{bmatrix}^{-1}=\begin{bmatrix}1 & -a\\ 0 & 1 \end{bmatrix}. \]

一般の場合は練習問題とする。

\(A\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)行の \(a\)倍を第\(j\)行に加えた結果が行列積 \(E_{ij}^{m}(a)A\) で表せるような行列 \(E_{ij}^{m}(a)\in\mathbb{F}^{m\times m}\) が存在する。\(E_{ij}^{m}(a)\) の要素をかきだしなさい。

3.3.3 列基本変形

行の変形と同様に,列の変形も定義できる。実は上で得られた行列を「右から」かける操作が列変形に対応している。各自確認しておいてほしい。

\(A\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)列と第\(j\)列を入れ替えた行列は \(AC_{ij}^{m}\) と一致する。

\(A\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)列に一斉に非ゼロ定数 \(u\) をかけた結果は \(AD_{i}^{m}(u)\) と一致する。

\(A\in\mathbb{F}^{m\times n}\) を任意の行列とする。行列の第\(i\)列の \(a\)倍を第\(j\)列に加えた結果は \(AE_{ij}^{m}(a)\) と一致する。

列の変形は式(3.7)で見た「解の並び替え」を一般化したものである。線形方程式 \[ Ax=b \]\[ AC_{ij}^{m}\left(C_{ij}^{m}\right)^{-1}x=b \] と同値であるから \(y=\left(C_{ij}^{m}\right)^{-1}x\) と置き換えれば \[ AC_{ij}^{m}y=b \] と同値である。この変換については座標変換と関連付けて今後より詳しく学ぶことになる。

3.3.4 初等変形

行列に行基本変形と列基本変形を繰り返して得られる操作を初等変形という。\(A\in\mathbb{F}^{m\times n}\)\(i=1,\dots,n_{r}\)\(j=1,\dots,n_{c}\) について \(P_{i}\) をいずれかの行基本変形,\(Q_{j}\) をいずれかの列基本変形とすると \[ P=P_{n_{r}}\cdots P_{1},\quad Q=Q_{1}\cdots Q_{n_{c}} \] を用いて初等変形 (の結果) を \[ PAQ \] と表すことができる。

\(P,Q\) が正則行列であることを示せ.

命題 3.1 任意の行列 \(A\in\mathbb{F}^{m\times n}\) に対して,適当に初等変形 \(P\)\(Q\) を選べば \[ PAQ=\left[\begin{array}{c|c} I_{d\times d} & O_{d\times(n-d)}\\ \hline O_{(m-d)\times d} & O_{(m-d)\times(n-d)} \end{array}\right] \] とできる。ここで,\(d\)\(P,Q\)の選び方によらず\(A\)のみから決まる定数である。

ランク

上の \(d\) を行列 \(A\)ランク (rank)といい,\(\mathrm{rank}A\) と書く。

一般に \(\mathrm{rank}A\le\min\{m,n\}\) である。この不等式が等号で成り立つとき,\(A\)フルランク (full rank) であるという。特に,\(\mathrm{rank}A=m\) のとき行フルランク (full column rank)\(\mathrm{rank}A=n\) のとき列フルランク (full row rank)という。

命題 3.2 行列 \(A\in\mathbb{F}^{n\times n}\) が正則であることと,フルランクであることは同値である。

証明. \(A\) がフルランクであると仮定する。すなわち

\[ PAQ=I \] なる初等変形 \(P\)\(Q\) がある。左から \(P^{-1}\),右から \(Q^{-1}\) をかけてやれば \[\begin{equation} A = P^{-1}Q^{-1} \tag{3.8} \end{equation}\]

が得られる。右辺は正則なので逆行列が存在する。すなわち \(A^{-1}=QP\).

\(A\) は正則であるがフルランクでないと仮定する。すなわち,\(d<n\) に対して \[ PAQ=\left[\begin{array}{c|c} I_{d\times d} & O_{d\times(n-d)}\\ \hline O_{(m-d)\times d} & O_{(m-d)\times(n-d)} \end{array}\right] \] となる。逆行列 \(A^{-1}\) が存在するので,\(PAQ\) に右から \(Q^{-1}A^{-1}\) をかければ \[ PAQ(Q^{-1}A^{-1})=P \] を得る。\(PAQ\) の形状により \(P\)\((d+1)\) 行目以下はすべてゼロにならなければならないが,このような行列を基本変形の積として表現することはできない. 従って,この等式は不合理である。よって\(A\)はフルランクでなければならない.

(3.8) を少し変形すると

\[ A=P^{-1}Q^{-1}=\tilde{P}^{-1} \]

なる行基本変形のみ(あるいは列基本変形のみ)からなる初等変形 \(\tilde{P}\) が存在することが分かる。\(A^{-1}=\tilde{P}\) であるから,\(A\) から \(I\) に至る行基本変形を \(I\) に施せば逆行列を得ることができる.

3.4 R コード

線形システムの分析において行列計算は中心的な役割を果たすので,繰り返しタイプして十分に手に馴染ませて欲しい。

3.4.1 行列の定義

定義したい行列の要素と同じ要素を持つアトミックベクタを定義してから,行列に変換するのがもっとも簡単である。

a <- 1:9
(A <- matrix(a, nrow = 3))
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

列方向に並んでいくことを確認してほしい。この振る舞いは,オプションで変更することができる。タイプする文字が増えてしまうが,次のように定義する方がコードから内容が直感的に分かりやすいかもしれない。

b <- c( 1.11, 3.12, 4.13,
       -3.21, 2.22, 5.23,
        0.31, 1.32, 8.33)
(B <- matrix(b, nrow = 3, byrow = TRUE))
##       [,1] [,2] [,3]
## [1,]  1.11 3.12 4.13
## [2,] -3.21 2.22 5.23
## [3,]  0.31 1.32 8.33

特別な行列

ゼロ行列
matrix(0, 3, 3)
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
対角行列
d <- c(1.11, 3.22, -1.33)
diag(d)
##      [,1] [,2]  [,3]
## [1,] 1.11 0.00  0.00
## [2,] 0.00 3.22  0.00
## [3,] 0.00 0.00 -1.33
単位行列
diag(1, 4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    0
## [2,]    0    1    0    0
## [3,]    0    0    1    0
## [4,]    0    0    0    1

3.4.2 要素の取得

行列の要素を取得するには,次のような構文を使う。

B[1, 2]
## [1] 3.12

ただし,このような要素の取得はできる限りなくす努力をするべきだ。

3.4.3 行列の演算・関数

スカラー倍

0.5 * A
##      [,1] [,2] [,3]
## [1,]  0.5  2.0  3.5
## [2,]  1.0  2.5  4.0
## [3,]  1.5  3.0  4.5

和・差

A + B
##       [,1] [,2]  [,3]
## [1,]  2.11 7.12 11.13
## [2,] -1.21 7.22 13.23
## [3,]  3.31 7.32 17.33

行列の積は A * B と計算できると期待するかもしれないが,この演算は成分ごとの積を計算する。行列積には特別な演算子 %*% を使わなければならない。

A %*% B
##        [,1]  [,2]   [,3]
## [1,]  -9.56 21.24  83.36
## [2,] -11.35 27.90 101.05
## [3,] -13.14 34.56 118.74

転置

転置行列は, t() で計算できる。

t(B)
##      [,1]  [,2] [,3]
## [1,] 1.11 -3.21 0.31
## [2,] 3.12  2.22 1.32
## [3,] 4.13  5.23 8.33

複素数を成分に持つ行列は,共役転置行列が必要だろう。次のように計算する。

C <- A + B * 1i
Conj(t(C))
##         [,1]    [,2]    [,3]
## [1,] 1-1.11i 2+3.21i 3-0.31i
## [2,] 4-3.12i 5-2.22i 6-1.32i
## [3,] 7-4.13i 8-5.23i 9-8.33i

逆行列

実用上利用するかどうかは別として,逆行列は次のように計算できる。

solve(B)
##             [,1]        [,2]        [,3]
## [1,]  0.14306178 -0.25353377  0.08825168
## [2,]  0.35010078  0.09833723 -0.23532052
## [3,] -0.06080218 -0.00614762  0.15405343

多くの場合,\(B^{-1} A\) を計算する次の形式で使うことになる。

solve(B, A)
##             [,1]       [,2]       [,3]
## [1,] -0.09925073 -0.1659117 -0.2325726
## [2,] -0.15918632  0.4801661  1.1195186
## [3,]  0.38906287  0.6503737  0.9116846

すなわち,やや冗長に書けば,solve(B) は次のコードと同一である。

solve(B, diag(3))
##             [,1]        [,2]        [,3]
## [1,]  0.14306178 -0.25353377  0.08825168
## [2,]  0.35010078  0.09833723 -0.23532052
## [3,] -0.06080218 -0.00614762  0.15405343

ランク

ランクの計算は四則演算からなる基本変形をほどこしてゼロでない行を数えればよい。簡単な計算だと思うかもしれないが,特定の数字が0であるかどうかを判定することは計算機には難しい。次の行列のランクはもちろんゼロである。

\[ M = \begin{bmatrix} 0.1 + 0.1 + 0.1 - 0.3 & 0 \\ 0 & 0\\ \end{bmatrix} \] しかし,数値計算で判定することは容易でない。

M = matrix(c(0.1 + 0.1 + 0.1 - 0.3, 0, 0, 0), nrow = 2)
qr(M)$rank
## [1] 1

  1. \(P:=Q\) という表現は,\(P\)\(Q\) で定義するという意味,\(P =:Q\)\(Q\)\(P\) で定義するという意味である.