『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

階数・退化次数の定理

階数・退化次数の定理

次のような矩形行列 $A$ の階数 (rank) を考えます。
 \[A=\begin{bmatrix}0&1&1&5\\1&1&2&2\\2&2&4&4\end{bmatrix}\tag{1}\]
1 列目と 2 列目を加えると 3 列目になるので、3 列目を基底から除きます。
残りの列で行列式をつくると
 \[\begin{vmatrix}0 & 1 & 5\\ 1 & 1 & 2\\ 2 & 2 & 4\end{vmatrix}=0\tag{2}\]
となるので、この 3 つのベクトルも線形独立ではありません。1 列目と 2 列目が互いに平行でないのは明らかなので基底として採用します ($A$ の階数は $2$)。$\boldsymbol{a}$ と $\boldsymbol{b}$ が張る空間を $<\boldsymbol{a},\boldsymbol{b}>$ のように表すことにすると、$A$ の列空間は
 \[\mathbb{C}(A)=\left\langle\begin{bmatrix}0\\1\\2\end{bmatrix},
\begin{bmatrix}1\\1\\2\end{bmatrix}\right\rangle\tag{3}\]
となります。$\mathbb{C}(A)$ の次元は行列 $A$ の階数と同義です:
 \[\dim\mathbb{C}(A)=\mathrm{rank}A=2\]
次に $A$ の行空間を考えます。$A$ の 2 行目と 3 行目は平行なので、行空間は 1 行目と 2 行目のベクトルが張る空間です。
 \[\mathbb{C}(A^T)=\left\langle\begin{bmatrix}0\\1\\1\\5\end{bmatrix},\begin{bmatrix}1\\1\\2\\2\end{bmatrix}\right\rangle\tag{4}\]
$\mathbb{C}(A^T)$ の次元は $2$ であり、$\mathbb{C}(A)$ の次元と一致しています。証明は省略しますが、一般に列空間と行空間の次元が等しいことが知られています:
 \[\dim\mathbb{C}(A)=\dim\mathbb{C}(A^T)=\mathrm{rank}A\tag{5}\]
次は $A$ の核 (零空間) $\mathrm{Ker}A$ を求めてみます。
行列 $A$ を再掲します。
\[A=\begin{bmatrix}0&1&1&5\\1&1&2&2\\2&2&4&4\end{bmatrix}\tag{1}\]
基本変形を施して、もう少し簡単な形にします。
3 行目から 2 行目の 2 倍を引くと、3 行目は全部 $0$ になります。
 \[A=\begin{bmatrix}0&1&1&5\\1&1&2&2\\0&0&0&0\end{bmatrix}\tag{6}\]
次に 2 行目から 1 行目を引きます。
 \[A=\begin{bmatrix}0&1&1&5\\1&0&1&-3\\0&0&0&0\end{bmatrix}\tag{7}\]
$A\boldsymbol{x}=\boldsymbol{0}$ より、
 \[\begin{bmatrix}0&1&1&5\\1&0&1&-3\\0&0&0&0\end{bmatrix}\begin{bmatrix}x\\y\\z\\w\end{bmatrix}=\begin{bmatrix}0\\0\\0\end{bmatrix}\tag{8}\]
したがって、次の 2 式が得られます。
 \[\begin{align*}&y+z+5w=0\tag{9}\\[6pt]&x+z-3w=0\tag{10}\end{align*}\]
求める $\boldsymbol{x}$ は
 \[\boldsymbol{x}=\begin{bmatrix}-z+3w\\-z-5w\\z\\w\end{bmatrix}=z\begin{bmatrix}-1\\-1\\1\\0\end{bmatrix}+w\begin{bmatrix}3\\-5\\0\\1\end{bmatrix}\tag{11}\]
となります。すなわち、$A$ の核 (零空間) は
 \[\mathrm{Ker}A=\left\langle\begin{bmatrix}-1\\-1\\1\\0\end{bmatrix},\begin{bmatrix}3\\-5\\0\\1\end{bmatrix}\right\rangle\tag{12}\]
となります。核の次元は $2$ であり、$A$ の列数 $4$ から $A$ の階数 $2$ を引いた値となっています。一般に $m\times n$ の行列 $A$ について、
 \[\dim(\mathrm{Ker}A)+\mathrm{rank}A=n\tag{13}\]
が成り立つことが知られています。核の次元 $\dim(\mathrm{Ker}A)$ のことを退化次数 (nullity) とよぶことから、式 (13) は 階数・退化次数の定理 という名称が与えられています。$A$ の転置行列 $A^T$ の列数は $m$ となるので、階数・退化次数の定理により、
 \[\dim(\mathrm{Ker}A^T)+\mathrm{rank}A^T=m\tag{14}\]
が成り立ちます。式 (5) より、転置によって行列の階数は変わらないので ($\mathrm{rank}A^T=\mathrm{rank}A$)、(14) は
 \[\dim(\mathrm{Ker}A^T)+\mathrm{rank}A=m\tag{15}\]
のように書き直すことができます。(1) で定義された行列 $A$ の転置行列に 階数・退化次数の定理 を適用すると、
 \[\dim(\mathrm{Ker}A^T)+2=3\tag{16}\]
となるので、$A$ の左零空間の次元は $1$ となることがわかります。
 
(5), (13), (15) は部分空間の構造を示す重要な定理なので、以下にまとめておきます。
 \[\begin{align*}&\dim\mathbb{C}(A)=\mathrm{rank}A\tag{17}\\[6pt]&\dim\mathbb{C}(A^T)=\mathrm{rank}A\tag{18}\\[6pt]&\dim(\mathrm{Ker}A)+\mathrm{rank}A=n\tag{19}\\[6pt]&\dim(\mathrm{Ker}A^T)+\mathrm{rank}A=m\tag{20}\end{align*}\]
(1) で定義した行列 $A$ について、階数・退化次数の定理 を確認するコードを載せておきます。

# python_rank_nullity_theorem

# In[1]

import numpy as np
from scipy import linalg

# 3×4の行列を定義
A = np.array([[0, 1, 1, 5],
              [1, 1, 2, 2],
              [2, 2, 4, 4]])

# Aの階数
rank_A = np.linalg.matrix_rank(A)

# Aの核
Ker_A = linalg.null_space(A)

# Aの左零空間
Ker_AT = linalg.null_space(A.T)

# 核の次元(退化次数)
dim_Ker_A = Ker_A.shape[1]

# 左零空間の次元
dim_Ker_AT = Ker_AT.shape[1]

print("階数 : {}".format(rank_A))
print("核の次元 : {}".format(dim_Ker_A))
print("左零空間の次元 : {}".format(dim_Ker_AT))
print("階数 + 核の次元 : {}".format(rank_A+dim_Ker_A))
print("階数 + 左零空間の次元 : {}".format(rank_A+dim_Ker_AT))

# 階数 : 2
# 核の次元 : 2
# 左零空間の次元 : 1
# 階数 + 核の次元 : 4
# 階数 + 左零空間の次元 : 3

 

コメント

  1. あとりえこばと より:

    【お知らせ】式番号がずれていたので直しておきました。

  2. HNaito より:

    下記は誤植と思われるので、ご確認ください。
    式 (6) の上の文章で、3 行目は全部消えます → 3 行目は全部 0 になります
    式 (11) のベクトルの 2行目で、-x-5w → -z-5w
    式 (13) の下の文章で、式 (11) は → 式 (13) は

    • あとりえこばと より:

      確かに「消える」という表現は良くないですね。
      直しておきました。
      お手数をおかけして申し訳ございません。m(_ _)m