Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

行列式の性質

線形性・交代性・規格化

AAnn 次の正方行列 A=(a1,,an)A=(\boldsymbol{a}_1, \cdots, \boldsymbol{a}_n)とする。

行列式を以下の3つの性質をもつものとする定義に従えば、定義から以下の性質を持つ。

1つのベクトル(行や列)に対してcc倍すると行列式がcc倍になり、行列全体に対してcc倍すると行列式がcnc^n倍になることから、 多重線形性 という呼び方をする本もある(平岡和幸, & 堀玄. (2004). プログラミングのための線形代数. 株式会社 オーム社.)

ca1,a2,,an=ca1,a2,,ana1+a1,a2,,an=a1,a2,,an+a1,a2,,ancA=cnA\def\b#1{\boldsymbol{#1}} \begin{align} |c \b{a}_1, \b{a}_2, \cdots, \b{a}_n| &= c |\b{a}_1, \b{a}_2, \cdots, \b{a}_n|\\ |\b{a}_1 + \b{a}_1', \b{a}_2, \cdots, \b{a}_n| &= |\b{a}_1, \b{a}_2, \cdots, \b{a}_n| + |\b{a}_1', \b{a}_2, \cdots, \b{a}_n|\\ |c\b{A}| &= c^n |\b{A}| \end{align}

明示公式からの導出

ライプニッツの明示公式

A=σSnsgn(σ)a1σ(1)aiσ(i)anσ(n)|A| = \sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) a_{1 \sigma(1)} \cdots a_{i \sigma(i)} \cdots a_{n \sigma(n)}

に基づく説明

線形性

まず定数倍について

続いて和について

交代性

a11a1naj1ajnai1ainan1ann=a11a1nai1ainaj1ajnan1ann\left|\begin{array}{cccc} a_{11} & \cdots & \cdots & a_{1 n} \\ \vdots & & & \vdots \\ a_{j 1} & \cdots & \cdots & a_{j n} \\ \vdots & & & \vdots \\ a_{i 1} & \cdots & \cdots & a_{i n} \\ \vdots & & & \vdots \\ a_{n 1} & \cdots & \cdots & a_{n n} \end{array}\right| = - \left|\begin{array}{cccc} a_{11} & \cdots & \cdots & a_{1 n} \\ \vdots & & & \vdots \\ a_{i 1} & \cdots & \cdots & a_{i n} \\ \vdots & & & \vdots \\ a_{j 1} & \cdots & \cdots & a_{j n} \\ \vdots & & & \vdots \\ a_{n 1} & \cdots & \cdots & a_{n n} \end{array}\right|

という性質。

証明:

nn 文字の各置換 σ\sigma に対して σ\sigma に右から互換 (ij)(i \quad j) をかけた置換を τ\tau とおく。すなわち、 τ=σ(ij)\tau=\sigma(i \quad j)

このとき、

τ(i)=σ(j),τ(j)=σ(i),τ(k)=σ(k)(ki,j)\tau(i)=\sigma(j), \quad \tau(j)=\sigma(i), \quad \tau(k)=\sigma(k) \quad(k \neq i, j)

となる。符号は

sgn(τ)=sgn(σ(ij))=sgn(σ)sgn(ij)=sgn(σ)\operatorname{sgn}(\tau) = \operatorname{sgn}(\sigma(i \quad j)) = \operatorname{sgn}(\sigma) \cdot \operatorname{sgn}(i \quad j) = -\operatorname{sgn}(\sigma)

となる。

 左辺 =σSnsgn(σ)a1σ(1)ajσ(i)aiσ(j)anσ(n)=τSn(sgn(τ))a1τ(1)ajτ(j)aiτ(i)anτ(n)=τSnsgn(τ)a1τ(1)aiτ(i)ajτ(j)anτ(n)= 右辺 \begin{aligned} \text { 左辺 } & =\sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) a_{1 \sigma(1)} \cdots a_{j \sigma(i)} \cdots a_{i \sigma(j)} \cdots a_{n \sigma(n)} \\ & =\sum_{\tau \in S_n}(-\operatorname{sgn}(\tau)) a_{1 \tau(1)} \cdots a_{j \tau(j)} \cdots a_{i \tau(i)} \cdots a_{n \tau(n)} \\ & =-\sum_{\tau \in S_n} \operatorname{sgn}(\tau) a_{1 \tau(1)} \cdots a_{i \tau(i)} \cdots a_{j \tau(j)} \cdots a_{n \tau(n)} \\ & =\text { 右辺 } \end{aligned}

規格化

三角行列の行列式は対角成分の積になるという定理(後述)から、I=1|I|=1

行列式の積 = 積の行列式

証明

B=(b1,,bn)B=(\boldsymbol{b}_1, \cdots, \boldsymbol{b}_n)とおくと、線形性により、

AB=Ab1,,Abn=cb1,,bn|AB|=|A\boldsymbol{b}_1, \cdots, A\boldsymbol{b}_n|=c|\boldsymbol{b}_1, \cdots, \boldsymbol{b}_n|

B=IB=Iのとき、c=AI=Ac=|AI|=|A|

よって AB=cB=AB|AB| = c|B| = |A||B|

転置行列の行列式

転置不変性のため、列に成り立つことは行でも成り立つ。

逆行列の行列式

証明
AA1=AA1=I=1|A| |A^{-1}|=|A A^{-1}|=|I|=1
AA1=1A1=1A|A| |A^{-1}| = 1 \to |A^{-1}| = \frac{1}{|A|}

ゆえに A1=A1|A^{-1}|=|A|^{-1} が成り立つ

ゼロが多い行列の行列式

証明

A=(aij)A=(a_{ij})とおく。行列の(1,1)(1,1)成分以外の第1列の成分がすべてゼロのとき、a21=a31==an1=0a_{21} = a_{31} = \cdots = a_{n1} = 0になる。

σ(k)=1\sigma(k)=1となるk>1k>1があるため、それについてはakσ(k)=ak1=0a_{k\sigma(k)} = a_{k1} = 0となる。そのため

a1σ(1)a2σ(2)akσ(k)anσ(n)=0a_{1 \sigma(1)} a_{2 \sigma(2)} \cdots a_{k \sigma(k)} \cdots a_{n \sigma(n)}=0

となる。つまり、σ(1)>1\sigma(1) > 1となる項はすべて0になる。 そのため和はσ(1)=1\sigma(1)=1となる置換のみにわたって計算すればよい。

A=σSnσ(1)=1sgn(σ)a11a2σ(2)anσ(n)=a11σSnσ(1)=1sgn(σ)a2σ(2)anσ(n)=a11τSn1sgn(τ)a2τ(2)anτ(n)\begin{aligned} |A| & =\sum_{\substack{\sigma \in S_n \\ \sigma(1)=1}} \operatorname{sgn}(\sigma) a_{11} a_{2 \sigma(2)} \cdots a_{n \sigma(n)} \\ & =a_{11} \sum_{\substack{\sigma \in S_n \\ \sigma(1)=1}} \operatorname{sgn}(\sigma) a_{2 \sigma(2)} \cdots a_{n \sigma(n)} \\ & =a_{11} \sum_{\tau \in S_{n-1}} \operatorname{sgn}(\tau) a_{2 \tau(2)} \cdots a_{n \tau(n)} \end{aligned}

ここでSn1S_{n-1}は1を除くn1n-1個の文字{2,3,,n}\{2, 3, \cdots, n\}からなる置換の集合である。

三角行列の行列式

証明

前出の定理を繰り返し適用する。すなわち

A=a11a22a2n000ann=a11a22a33a3n000ann\begin{align} |A| &= a_{11}\left|\begin{array}{cccc} a_{22} & \cdots & \cdots & a_{2 n} \\ 0 & \ddots & & \\ \vdots & \ddots & \ddots & \vdots \\ 0 & \cdots & 0 & a_{n n} \end{array}\right| \\ &= a_{11} a_{22}\left|\begin{array}{cccc} a_{33} & \cdots & \cdots & a_{3 n} \\ 0 & \ddots & & \vdots \\ \vdots & \ddots & \ddots & \vdots \\ 0 & \cdots & 0 & a_{n n} \end{array}\right| \end{align}

これを続ければ

=a11a22ann= a_{11} a_{22} \cdots a_{nn}
証明

行列を転置しても行列式の値は変わらない

AT=A|A^T| = |A|

という性質を使い、下三角行列を転置して上三角行列にすることで

A=a11a22ann|A| = a_{11} a_{22} \cdots a_{nn}

となる

変形に関する性質

以下は行に関しても列に関しても成り立つ(転置不変性のため)

  1. 1 つの列を cc 倍すると, 行列式は cc 倍になる.

  2. 1 つの列の成分がすべて 0 である行列の行列式は 0 である.

  3. 1 つの列が 2 つの列べクトルの和である行列の行列式は, 他の列は同じでその列を各々の列べクトルとした行列の行列式の和になる.

  4. 2つの列を入れ換えると行列式は -1 倍になる.

  5. 行列の列の順序を置換 τ\tau によって変更すると行列式は sgn(τ)\operatorname{sgn}(\tau) 倍になる.

  6. 2 つの列が等しい行列の行列式は 0 である.

  7. 1つの列に任意の数をかけて他の列に加えても行列式の値は変わらない.

1つの列を cc 倍すると, 行列式は cc 倍になる

線形性によるもの。

証明
 左辺 =σSnsgn(σ)a1σ(1)(caiσ(i))anσ(n)=cσSnsgn(σ)a1σ(1)aiσ(i)anσ(n)= 右辺 \begin{aligned} \text { 左辺 } & =\sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) a_{1 \sigma(1)} \cdots\left(c a_{i \sigma(i)}\right) \cdots a_{n \sigma(n)} \\ & =c \sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) a_{1 \sigma(1)} \cdots a_{i \sigma(i)} \cdots a_{n \sigma(n)} \\ & =\text { 右辺 } \end{aligned}

2つの列が等しい行列の行列式は0

証明
A=a1aiajan|A| = |\begin{array}{ccccc} \boldsymbol{a}_1 & \cdots & \boldsymbol{a}_i & \cdots & \boldsymbol{a}_j & \cdots & \boldsymbol{a}_n \end{array}|

とする。

ai=aj\boldsymbol{a}_i = \boldsymbol{a}_jとして、これらをa\boldsymbol{a}_*で表すことにすると、2つの列を入れ替えると行列式の符号は変わるため、

a1aaan=a1aaan=0|\begin{array}{ccccc} \boldsymbol{a}_1 & \cdots & \boldsymbol{a}_* & \cdots & \boldsymbol{a}_* & \cdots & \boldsymbol{a}_n \end{array}| = -|\begin{array}{ccccc} \boldsymbol{a}_1 & \cdots & \boldsymbol{a}_* & \cdots & \boldsymbol{a}_* & \cdots & \boldsymbol{a}_n \end{array}| = 0

基本変形に対する不変性

1つの行(列)に任意の数をかけて他の行(列)に加えても行列式の値は変わらない

行列(a,b,c)(\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c})について、線形性と交代性により

a+kc,b,c=a,b,c+kc,b,c=0=a,b,c|\boldsymbol{a}+k \boldsymbol{c}, \boldsymbol{b}, \boldsymbol{c}| =|\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c}| + k \underbrace{ |\boldsymbol{c}, \boldsymbol{b}, \boldsymbol{c}| }_{ =0} =|\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c}|

c,b,c|\boldsymbol{c}, \boldsymbol{b}, \boldsymbol{c}|は同じ列が2つあるため、行列式は0になる

例:

1つの行(列)に任意の数をかけて他の行(列)に加えても行列式の値は変わらない

という定理により、ある行を定数倍して他の行に加える操作によって行列を変形して解くことができる。

123456789\left|\begin{array}{rrr} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{array}\right|

を求めたいとき、これは3次なのでサラスの方法でもよいが、変形して解いてもよい。

  • 第1行を4倍して第2行から引く

  • 第1行を7倍して第3行から引く

という操作を行って

1230360612\left|\begin{array}{ccc} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & -6 & -12 \end{array}\right|

として、第1列は(1,1)(1,1)要素以外が0になったことを利用して

1230360612=1×36612=3×(12)(6)2=3636=0\left|\begin{array}{ccc} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & -6 & -12 \end{array}\right| = 1 \times \left|\begin{array}{cc} -3 & -6 \\ -6 & -12 \end{array}\right| = -3 \times (-12) - (-6)^2 = 36 - 36 = 0

としてもよい。

2つの列を入れ換えると行列式は -1 倍になる

交代性より、あるいは明示公式から

ブロック行列の行列式

T=(ABCD)T = \left(\begin{array}{ll} A & B \\ C & D \end{array}\right)

とする。

AA が正則なとき, T=ADCA1B|T| = |A| |D-C A^{-1} B|

DD が正則なとき, T=DABD1C|T| = |D| |A-B D^{-1} C|

対角なブロック行列には以下が成立する

ABBA=A+BAB\left|\begin{array}{ll} A & B\\ B & A \end{array}\right| = | A + B | |A - B|

参考:行列式 |A B // B A| = |A-B||A+B| の証明 | ばたぱら

多重線形性

行列A=(a1,,an)A=(a_1, \cdots, a_n)について

Undefined control sequence: \DeclareMathOperator at position 27: …oldsymbol{#1}}
\̲D̲e̲c̲l̲a̲r̲e̲M̲a̲t̲h̲O̲p̲e̲r̲a̲t̲o̲r̲{\det}{\text{de…

\def\b#1{\boldsymbol{#1}}
\DeclareMathOperator{\det}{\text{det}}
\begin{align}
\det(c \b{a}_1, \b{a}_2, \cdots, \b{a}_n) &= c \det(\b{a}_1, \b{a}_2, \cdots, \b{a}_n)\\
\det(\b{a}_1 + \b{a}_1', \b{a}_2, \cdots, \b{a}_n) &= \det(\b{a}_1, \b{a}_2, \cdots, \b{a}_n) + \det(\b{a}_1', \b{a}_2, \cdots, \b{a}_n)\\
\det(c\b{A}) = c^n \det(\b{A})
\end{align}

のように任意の列への線形和が全体への線形和と等しいような法則性があること

import numpy as np
A = np.array([
    [1, 2],
    [1, 3]
])
print(f"det(A) = {np.linalg.det(A)}")

c = 5
print(f"det(cA) = {np.linalg.det(c * A):.1f}")
print(f"det(cA) - c^n det(A) = {np.linalg.det(c * A) - c**A.shape[0] * np.linalg.det(A):.1f}")
det(A) = 1.0
det(cA) = 25.0
det(cA) - c^n det(A) = -0.0
A[:, 0] *= c
A
array([[5, 2], [5, 3]])
np.linalg.det(A)
4.999999999999999

参考文献

  • 川久保勝夫(2010)『線形代数学 (新装版)』