行列の階数(rank)#

m×n行列Aに対し、Aが定義する線形写像

A:RnRm

の像空間の次元のことを ランク(階数) といい、rankAと表す。

rankA:=dimA=dimSpan{a1,,an}

(ただしa1,,anAの列ベクトル)

さまざまなランクの定義#

m×n行列Aに対し、次の1~6の数は一致する

  1. Aが定義する線形写像の像空間ImAの次元dimImA=dimSpan{a1,,an}(ただしa1,,anAの列ベクトル)

  2. Aの列ベクトルの中から選び得る1次独立なベクトルの最大個数

  3. Aの行ベクトルの中から選び得る1次独立なベクトルの最大個数

  4. Aの行ベクトルが生成するRnの部分空間の次元

  5. Aの0でない小行列式の最大次数

  6. Aを行基本変形で階段行列に変形したときの0でない行の個数

1次独立なベクトルの最大個数#

例1

A=(110022134)

のランクを求めるとする。列ベクトルを

A=(a1a2a3)

とする。

c1a1+c2a2=0

とすると、第2成分が0になるためにはc2=0である必要がある。

そしてc1a1=0となるためには、c1=0である必要がある。

よってc1=c2=0であるため、a1,a2は1️次独立である。

a1+a2=a3であるため、

Span(a1,a2,a3)=Span(a1,a2)

であるため、rankA=dimSpan(a1,a2,a3)=2

例2

(201511120010)

列ベクトルを(a1a2a3)とする。

c1a1+c2a2+c3a3=0

とすると、第4成分が0になるためにはc2=0となり、第3成分をみることによりc1=0であり、第2成分を見ることによりc3=0であることがわかるから、 a1,a2,a3は1次独立で、ランクは3となる

小行列式#

m×n行列Aがあるとし、ppm,pnを満たす正の整数とする。Ap個の行と列を任意に取り出して作ったp次の正方行列の行列式をAp次の小行列式 という。

たとえば、

A=[a11a12a13a14a21a22a23a24a31a32a33a34]

に対して、2次の小行列式は

|a11a12a21a22|,|a11a13a21a23|,|a11a14a31a34|

などである。

m×n行列のp次の小行列式は全部でmCp×nCp個存在する。

Ar次の小行列式の中に0でないものがあり、r+1次以上の小行列はすべて0であるときのr(0でない小行列式の最大次数)はAの階数に等しい。

階段行列#

m×n行列の第i行について、第1列から順番に数えて初めて0でない成分が出てくる列を第di列とする。 ただし、第i行がすべて0のときはdi=n+1と約束する。

d1<d2<<di<di+1==dn=n+1

のとき、これを階段行列 (step matrix) という。

図で書くと以下のような行列である

(000000)

ただし、は任意の数。

階段行列の0でない行の個数はその行列のランクに等しい。

階段行列の例

(070340012300000)
(100010001)

※単位行列も階段行列である

例:

(303050303)

第1行を1倍して第3行に加えると

(303050000)

この階段行列の零でない行ベクトルの数は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を行基本変形,列基本変形により

(IrOOO)

の形に変形できたとき、これをA階数標準形 あるいは単に 標準形 という。

定理 任意のm×n行列Aは基本変形を有限回繰り返して、標準形

(IrOr,nrOmr,rOmr,nr)

に変形することができる。ここでrAのランクに等しい。

# 例
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]])

参考文献#