4つの基本部分空間(Four Fundamental Subspace)は、1993年にGilbert Strang氏の論文: “The fundamental theorem of linear algebra” で紹介された線形代数学の理論です。
Figure1は、行列\(A: \mathbb{R}^{m\times n}\)の基本部分空間の次元と直交性の関係を示します。
- 4つの基本部分空間とは何か
- 4つの基本部分空間はどんな関係にあるか
目次
4つの基本部分空間
線形代数学の基本定理は、基本部分空間のランク(rank)と次元(dimension)に関連します。
ランクは行列のピボット(pivot)の数、部分空間の次元は基底(basis)の数です。
4つの基本部分空間って何のことですか?
カラムスペース\(C(A)\)、ロースペース\(C(A^T)\)、ヌルスペース\(N(A)\)、レフトヌルスペース\(N(A^T)\)のことです。これらが何かを以下にまとめます。
\(A\)を\(m \times n\)行列とします。このとき、行列\(A\)によって以下4つの部分空間が定義されます。
- \(C(A)\): \(A\)のカラムスペース(columun space)。行列\(A\)のカラムベクトルで張られる部分空間。
- \(C(A^T)\): \(A\)のロースペース(row space)。 行列\(A\)のローベクトルで張られる部分空間。転置行列(\(A^T\)のカラムスペースとも言える。
- \(N(A)\): \(A\)のヌルスペース(null space)。\(A \boldsymbol{x}=\mathbf{0}\)となる基底ベクトルが張る部分空間。
- \(N(A^T)\): \(A\)のレフトヌルスペース(left-null space)。 \(A^T \boldsymbol{y}=\mathbf{0}\)となる基底ベクトルが張る部分空間。
4種類の部分空間(集合)があることは分かりました。でもまだ意味がよく分かっていません。
行列\(A = \begin{bmatrix}1&0&1\\
0&1&1\\
1&0&1\end{bmatrix}\)とおき、それぞれの部分空間について考えてみます。
カラムスペース
行列\(A\)のカラムベクトルと任意のスカラー(\(\alpha_1, \alpha_2, \alpha_3)\)の線形結合は
$$A\boldsymbol{x}=\alpha_1 \begin{bmatrix}1\\0\\1 \end{bmatrix}+\alpha_2 \begin{bmatrix}0\\1\\0\end{bmatrix}+\alpha_3 \begin{bmatrix}1\\1\\1 \end{bmatrix}$$
と表せます。
カラムスペースの基底は、ガウスジョルダン法を使った行列\(A\)の行階段形(row echelon form)への変換を通して発見できます。
行列\(A\)の行階段形\(R\)は\(\begin{bmatrix}\color{red}{1}&0&1\\0&\color{red}{1}&1\\0&0&0\end{bmatrix}\)です。
この場合、ピボットを持つカラムは\(column_1\)と\(column_2\)です。
このことから、行列\(A\)の\(\begin{bmatrix}1\\0\\1\end{bmatrix}\)と\(\begin{bmatrix}0\\1\\0\end{bmatrix}\)がカラムスペースの基底と分かります。
行列\(A\)の基底となるカラムベクトルの線形結合は、部分空間(スパン: span)を張ります。この空間が\(A\)のカラムスペース\(C(A)\)と呼ばれます。
Figure2は、スカラー\(\alpha_i\)の値を3000回ランダムに選択し、線形結合\(A\boldsymbol{x}\)をプロットした結果です。
Figure2は、2つの基底を使って2次元の平面を形成していることが確認できます。この平面がカラムスペースです。このときのカラムスペースの次元は\(r=2\)です。
もし行列\(A\)のランクが3だったら、カラムスペースは3次元になります。
MATLAB、Juliaでは、rref()
でランクを計算できます。Pythonはnp.linalg.matrix_rank()
でランクを計算できます。
ロースペース
行列\(A\)のローベクトルと任意のスカラー(\(\beta_1, \beta_2, \beta_3\))の線形結合は
$$A^T\boldsymbol{y}=\beta_1 \begin{bmatrix}1\\0\\1 \end{bmatrix}+\beta_2 \begin{bmatrix}0\\1\\1 \end{bmatrix}+\beta_3 \begin{bmatrix}1\\0\\1 \end{bmatrix}$$
と表せます。
ロースペースの基底も行列\(A\)の行階段形\(R\)から発見できます。
\(R\)を見ると、ピボットを持つローは\(row_1\)と\(row_2\)です。
このことから\(\begin{bmatrix}1\\0\\1\end{bmatrix}\)と\(\begin{bmatrix}0\\1\\1\end{bmatrix}\)がロースペースの基底と分かります。
行列\(A\)の基底となるローベクトルの線形結合も空間(スパン: span)を張ります。この空間が\(A\)のロースペース\(C(A^T)\)と呼ばれます。
ロースペースも可視化してみます。
ローベクトルの基底は2つ、ロースペースは平面であり、ロースペースの次元は\(r=2\)です。
なるほど!ランク2だからロースペースも平面になるんですね。
ヌルスペース
ヌルスペース\(N(A)\)は\(A\boldsymbol{x}=\mathbf{0}\)となる部分空間です。
$$\begin{eqnarray}A\boldsymbol{x}&=&\begin{bmatrix}1&0&1\\0&1&1\\1&0&1 \end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\
&=&\begin{bmatrix}0\\0\\0\end{bmatrix}\end{eqnarray}$$
を満たします。
ヌルスペースの基底はどのようにして発見するんですか?
これも行列\(A\)の行階段形\(R\)を使います。
行列\(A\)の行階段形\(R: \begin{bmatrix}1&0&1\\0&1&1\\0&0&\color{red}{0}\end{bmatrix}\)の\(column_3\)はピボットを持っていません。
行列\(A\)のロースペースの次元は\(r=2\)でした。行列\(A\)ヌルスペースの次元は\(n-r = 3-2 = 1\)です。
ヌルスペースの基底を探すために、まずは\(x_3\)を自由変数(free variable)として\(s\)とおきます。
このとき、\(A\boldsymbol{x}=\mathbf{0}\)になる\(\boldsymbol{x}\)は、
\(x_1=-s, x_2=-s, x_3 = s\)
とおけます。このことから
$$\boldsymbol{x}=s\begin{bmatrix}-1\\-1\\1\end{bmatrix}$$
となります。
\(\begin{bmatrix}-1\\-1\\1\end{bmatrix}\)がヌルスペース\(N(A)\)の基底になります。
Figure4は行列\(A\)のヌルスペースを示します。ヌルスペースのランクは1、したがってヌルスペースは直線になります。
理由は後述しますが、ヌルスペースとロースペースは直交します。
レフトヌルスペース
レフトヌルスペース\(N(A^T)\)は\(A^T\boldsymbol{y}=\mathbf{0}\)となる部分空間です。
ヌルスペース\(N(A)\)のときと同様の手法で、次元と基底を発見できます。
行列\(A\)のカラムスペースの次元は\(r=2\)です。行列\(A\)レフトヌルスペースの次元は\(m-r = 3-2 = 1\)です。
レフトヌルスペースの基底を探します。\(y_3\)を自由変数(free variable)として\(t\)とおくと、\(A^T \boldsymbol{y}=\mathbf{0}\)を満たすため
$$\boldsymbol{y}=t\begin{bmatrix}-1\\0\\1\end{bmatrix}$$
が得られます。
\(\begin{bmatrix}-1\\0\\1\end{bmatrix}\)がレフトヌルスペース\(N(A^T)\)の基底になります。
レフトヌルスペースはカラムスペースと直交します。これも理由は後ほど。
レフトヌルスペースの「レフト」って何か語源あるんですか?
\(A^T \boldsymbol{y}=\mathbf{0}\)は\(\boldsymbol{y^T}A=\mathbf{0^T}\)と置き換えることができ、行列\(A\)に対して\(y\)が左側からかかるからだそうです。
次元と直交性
続いて「部分空間の次元」「部分空間の直交性」についてまとめます。
部分空間の次元
次元に関して抑えておきたいポイントは以下4つです。
- カラムスペース\(C(A)\)とロースペース\(C(A^T)\)は同じ数の次元\(r\)を持つ
- 次元の数\(r\)は、行列\(A\)のランク
- ヌルスペース\(N(A)\)の次元は\(n-r\)
- レフトヌルスペース\(N(A^T)\)の次元は\(m-r\)
これは上述のトピック「4つの基本部分空間」をまとめただけの内容となります。
部分空間の直交性
部分空間の直交性に関しては、以下の関係を持ちます。
- ロースペース\(C(A^T)\)とヌルスペース\(N(A)\)は直交
- カラムスペース\(C(A)\)とレフトヌルスペース\(N(A^T)\)は直交
Figure6は行列\(A\)の各部分空間を可視化したものです。
どうしてそれぞれの部分空間が直交するんでしょうか?
式を使ってまとめてみます。
\(A\boldsymbol{x}=\mathbf{0}\)は
$$\begin{bmatrix}(row_1) \boldsymbol{x}\\
(row_2) \boldsymbol{x}\\
(row_3) \boldsymbol{x}\end{bmatrix}=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$
です。
これは、行列\(A\)からの全てのローベクトルが\(\boldsymbol{x}\)に対して直交していることを意味します。
\(\boldsymbol{x}\)はヌルスペース\(N(A)\)上にあります。
「ロースペース\(C(A^T)\)からの全てのベクトル」と「ヌルスペース\(N(A)\)からのあらゆるベクトル\(\boldsymbol{x}\)」は直交するため、ロースペース\(C(A^T)\)とヌルスペース\(N(A)\)は直交していると言えます。
カラムスペースとレフトヌルスペースについても同様です。
\(A^T\boldsymbol{y}=\mathbf{0}\)は、
$$\begin{bmatrix}(col_1) \boldsymbol{y}\\
(col_2) \boldsymbol{y}\\
(col_3) \boldsymbol{y}\end{bmatrix}
=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$
となり、カラムスペース\(C(A)\)とレフトヌルスペース\(N(A^T)\)は直交の関係にあります。
Pythonによる関係性の可視化
以下、可視化のために使用したコードです。
理解をサポートする動画
理解を深めるために本家のレクチャーを見るのが良いです。
個人的に、愛してやまない「3Blue1Brown」の動画もオススメです。
Youtubeってホントすごいですねー!
まとめ
この記事の内容をまとめます。
- 基本部分空間:カラムスペース、ロースペース、ヌルスペース、レフトヌルスペースの4つ
- 基本部分空間の次元
- カラムスペース\(C(A)\)とロースペース\(C(A^T)\)の次元\(r\)の数は同じ
- ヌルスペース\(N(A)\)の次元は\(n-r\)
- レフトヌルスペース\(N(A^T)\)の次元は\(m-r\)
- 基本部分空間の直交性
- ロースペース\(C(A^T)\)とヌルスペース\(N(A)\)は直交
- カラムスペース\(C(A)\)とレフトヌルスペース\(N(A^T)\)は直交
3次元以上は可視化できないため、どうしても線形代数は概念的な話になりますが、手を動かしてみると4つの部分空間の関係性を少しは理解できた気がします。
この記事は以上です。最後まで読んで頂きありがとうございました。
参考資料
(2) Gilbert Strang, Introduction to Linear Algebra, Fifth Edition (2016)
初見は、この図が何を意味しているか分かりませんでした。この記事では、線形代数で大事な概念となる「4つの基本部分空間」についてまとめます。