行列の階数(rank)#
\(m\times n\)行列\(A\)に対し、\(A\)が定義する線形写像
の像空間の次元のことを ランク(階数) といい、\(\rank A\)と表す。
(ただし\(\b{a}_1, \dots, \b{a}_n\)は\(A\)の列ベクトル)
さまざまなランクの定義#
\(m\times n\)行列\(A\)に対し、次の1~6の数は一致する
\(A\)が定義する線形写像の像空間\(\im A\)の次元\(\dim \im A = \dim \span \{ \b{a}_1, \dots, \b{a}_n \}\)(ただし\(\b{a}_1, \dots, \b{a}_n\)は\(A\)の列ベクトル)
\(A\)の列ベクトルの中から選び得る1次独立なベクトルの最大個数
\(A\)の行ベクトルの中から選び得る1次独立なベクトルの最大個数
\(A\)の行ベクトルが生成する\(\mathbb{R}^n\)の部分空間の次元
\(A\)の0でない小行列式の最大次数
\(A\)を行基本変形で階段行列に変形したときの\(0\)でない行の個数
1次独立なベクトルの最大個数#
例1
のランクを求めるとする。列ベクトルを
とする。
とすると、第2成分が0になるためには\(c_2 = 0\)である必要がある。
そして\(c_1 \boldsymbol{a}_1 = \boldsymbol{0}\)となるためには、\(c_1 = 0\)である必要がある。
よって\(c_1 = c_2 = 0\)であるため、\(\boldsymbol{a}_1, \boldsymbol{a}_2\)は1️次独立である。
\(\boldsymbol{a}_1 + \boldsymbol{a}_2 = \boldsymbol{a}_3\)であるため、
であるため、\(\rank A = \dim \span(\boldsymbol{a}_1, \boldsymbol{a}_2, \boldsymbol{a}_3) = 2\)
例2
列ベクトルを\(\begin{pmatrix} \boldsymbol{a}_1 & \boldsymbol{a}_2 & \boldsymbol{a}_3 \end{pmatrix}\)とする。
とすると、第4成分が\(0\)になるためには\(c_2=0\)となり、第3成分をみることにより\(c_1=0\)であり、第2成分を見ることにより\(c_3=0\)であることがわかるから、 \(\boldsymbol{a}_1, \boldsymbol{a}_2, \boldsymbol{a}_3\)は1次独立で、ランクは3となる
小行列式#
\(m\times n\)行列\(A\)があるとし、\(p\)を\(p\leq m, p \leq n\)を満たす正の整数とする。\(A\)の\(p\)個の行と列を任意に取り出して作った\(p\)次の正方行列の行列式を\(A\)の \(p\)次の小行列式 という。
たとえば、
に対して、\(2\)次の小行列式は
などである。
\(m\times n\)行列の\(p\)次の小行列式は全部で\(_mC_p \times _nC_p\)個存在する。
\(A\)の\(r\)次の小行列式の中に\(0\)でないものがあり、\(r+1\)次以上の小行列はすべて\(0\)であるときの\(r\)(0でない小行列式の最大次数)は\(A\)の階数に等しい。
階段行列#
\(m\times n\)行列の第\(i\)行について、第1列から順番に数えて初めて\(0\)でない成分が出てくる列を第\(d_i\)列とする。 ただし、第\(i\)行がすべて0のときは\(d_i = n+1\)と約束する。
のとき、これを階段行列 (step matrix) という。
図で書くと以下のような行列である
ただし、\(*\)は任意の数。
階段行列の0でない行の個数はその行列のランクに等しい。
階段行列の例
※単位行列も階段行列である
例:
第1行を\(-1\)倍して第3行に加えると
この階段行列の零でない行ベクトルの数は2なので、ランク(階数)は2
import numpy as np
A = np.array([
[3, 0, 3],
[0, 5, 0],
[3, 0, 3]
])
np.linalg.matrix_rank(A)
2
階数標準形#
行列\(A\)を行基本変形,列基本変形により
の形に変形できたとき、これを\(A\)の 階数標準形 あるいは単に 標準形 という。
定理 任意の\(m\times n\)行列\(A\)は基本変形を有限回繰り返して、標準形
に変形することができる。ここで\(r\)は\(A\)のランクに等しい。
# 例
import numpy as np
A = np.array([
[3, 0, 3],
[0, 5, 0],
[3, 0, 3]
])
np.linalg.matrix_rank(A)
2
# 1行目を-1倍して3行目に加える
A[2, :] += -1 * A[0, :]
A
array([[3, 0, 3],
[0, 5, 0],
[0, 0, 0]])
# 1列目を-1倍して3列目に加える
A[:, 2] += -1 * A[:, 0]
A
array([[3, 0, 0],
[0, 5, 0],
[0, 0, 0]])
# (1/3)倍、(1/5)倍して1にする
A[0, 0] = (1/A[0, 0]) * A[0, 0]
A[1, 1] = (1/A[1, 1]) * A[1, 1]
A
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 0]])
参考文献#
川久保勝夫(2010)『線形代数学 (新装版)』