列空間
これまで学んできたように、$\mathbb{R}^n$ に属するベクトル $\boldsymbol{x}$ の行列 $A$ による線形変換 $A\boldsymbol{x}$ は、$A$ を構成する列ベクトルの線形結合として表せます。後述する行空間と区別するために、$A\boldsymbol{x}$ をあらためて 列空間 という名称で定義して、$\mathbb{C}(A)$ と表記することにします。
正方行列の列空間
$\boldsymbol{x}$ が $\mathbb{R}^3$ に属するとき、$3\times 3$ の正方行列 $A$ の列空間は
\[\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=x\begin{bmatrix}a_{11}\\a_{21}\\a_{31}\end{bmatrix}+y\begin{bmatrix}a_{12}\\a_{22}\\a_{32}\end{bmatrix}+z\begin{bmatrix}a_{13}\\a_{23}\\a_{33}\end{bmatrix}\tag{1}\]
のように 3 本のベクトルの線形結合で表せます。$A$ に含まれる独立な列ベクトル (基底ベクトル) の数、すなわち $A$ の階数 $\mathrm{rank}A$ によって変換の性質は異なります。
$\mathrm{rank}A=3$ $\mathbb{R}^3$ → $\mathbb{R}^3$ 全体
$\mathrm{rank}A=2$ $\mathbb{R}^3$ → $\mathbb{R}^3$ 内の平面
$\mathrm{rank}A=1$ $\mathbb{R}^3$ → $\mathbb{R}^3$ 内の直線
いずれにしても、$3\times 3$ 行列の列空間は $\mathbb{R}^3$ の部分空間であり、連立方程式 $A\boldsymbol{x}=\boldsymbol{b}$ は $\boldsymbol{b}$ が部分空間に含まれるときに解をもちます。
$A$ の階数が $3$ であれば必ず解をもちますが、階数が $3$ より小さいときには、$A\boldsymbol{x}=\boldsymbol{b}$ を満たすような $\boldsymbol{b}$ は稀であることがわかります (特定の平面や直線上に $\boldsymbol{b}$ が含まれていなければなりません)。
試しに階数 $2$ の正方行列と $3$ 次元ベクトル
\[A=\begin{bmatrix}1&3&0\\1&3&1\\2&6&0\end{bmatrix},\ \quad \boldsymbol{b}=\begin{bmatrix}2\\5\\1\end{bmatrix}\tag{2}\]
を定義して、$A\boldsymbol{x}=\boldsymbol{b}$ の解の存在を調べてみましょう。ガウス・ジョルダンの消去法を使います。拡大係数行列
\[\begin{bmatrix}1&3&0&2\\1&3&1&5\\2&6&0&1\end{bmatrix}\tag{3}\]
をつくって、$2$ 行目から $1$ 行目を引いて、$3$ 行目から $1$ 行目の $2$ 倍を引くと、
\[\begin{bmatrix}1&3&0&2\\0&0&1&3\\0&0&0&-3\end{bmatrix}\tag{4}\]
$3$ 行目は $0=-3$ という (矛盾した) 等式を表すので、この連立方程式は解をもたないことがわかります。
矩形行列の列空間
$3\times 2$ の矩形行列
\[A=\begin{bmatrix}1&1\\1&0\\5&3\end{bmatrix}\tag{5}\]
は $\mathbb{R}^2$ を $\mathbb{R}^3$ 内の平面に写します。
\[\begin{bmatrix}1&1\\1&0\\5&3\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=x\begin{bmatrix}1\\1\\5\end{bmatrix}+y\begin{bmatrix}1\\0\\3\end{bmatrix}\tag{6}\]
一般に、$m\times n$ の矩形行列は $\mathbb{R}^n$ を $\mathbb{R}^m$ 内の部分空間に写します ($m\times n$ の矩形行列の列空間は $\mathbb{R}^m$ の部分空間です)。
行空間
$A$ の転置行列 $A^T$ の列空間を 行空間 とよび、$\mathbb{C}(A^T)$ で表します。$A$ が $n\times n$ の正方行列であれば、列空間 $\mathbb{C}(A)$ と行空間 $\mathbb{C}(A^T)$ はともに $\mathbb{R}^n$ の部分空間ですが、$A$ が $m\times n$ の矩形行列であれば、列空間 $\mathbb{C}(A)$ は $\mathbb{R}^m$ の部分空間、行空間 $\mathbb{C}(A^T)$ は $\mathbb{R}^n$ の部分空間となります。たとえば $3\times 2$ の矩形行列
\[A=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix}\tag{7}\]
について、列空間は
\[\mathbb{C}(A)=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=x\begin{bmatrix}1\\2\\3\end{bmatrix}+y\begin{bmatrix}4\\5\\6\end{bmatrix}\tag{8}\]
と表せるので $\mathbb{R}^3$ の部分空間 (平面) となります。行空間は
\[\mathbb{C}(A^T)=\begin{bmatrix}1&2&3\\4&5&6\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=x\begin{bmatrix}1\\4\end{bmatrix}+y\begin{bmatrix}2\\5\end{bmatrix}+z\begin{bmatrix}3\\6\end{bmatrix}\tag{9}\]
と表せます。$3$ 本の列ベクトルのうち $2$ 本を基底に選んで
\[\mathbb{C}(A^T)=s\begin{bmatrix}1\\4\end{bmatrix}+t\begin{bmatrix}2\\5\end{bmatrix}\tag{10}\]
のように書き直すことができます。この式は $\mathbb{R}^2$ 全体を表しています ($\mathbb{R}^2$ 自身も $\mathbb{R}^2$ の部分空間です)。
scipy.linalg.orth()
scipy.linalg.orth(A) は A の列空間を張るための直交基底を生成します。たとえば階数 2 の行列を渡すと、2 つの基底ベクトルを並べた行列を返します:
# phthon_column_row_space # In[1] import numpy as np from scipy import linalg # rank2の行列 A = np.array([[2, 0, 0], [0, 3, 1], [0, 0, 0]]) # C(A)を張る基底を生成 CA = linalg.orth(A) print(CA) # [[0. 1.] # [1. 0.] # [0. 0.]]
A の転置行列を渡すと、行空間を張る基底を返します。
# In[2] # C(A^T)を張る基底を生成 CAT = linalg.orth(A.T) print(CAT) # [[ 0. 1. ] # [-0.9486833 0. ] # [-0.31622777 0. ]]
コメント
下記は誤植と思われますので、ご確認ください。
(2)式の下の文章で、Ax=bが解の存在 → Ax=bの解の存在
恐れ入ります m(_ _)m
訂正しておきました。