行列式の交代性と転置不変性

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【線型代数13】行列式の線型性・交代性・転置不変性

今回は行列式の基本性質 (線型性・交代性・転置不変性) について解説します。

行列式の線型性

ベクトル $\boldsymbol{u}, \boldsymbol{v}$ を
 \[\boldsymbol{u}=\begin{bmatrix}u_1\\u_2\end{bmatrix},\quad \boldsymbol{v}=\begin{bmatrix}v_1\\v_2\end{bmatrix}\]
と表し、$k$ を任意の実数として行列式 $\mathrm{det}(k\boldsymbol{u},\boldsymbol{v})$ を計算すると
 \[\begin{align*}\det(k\boldsymbol{u},\boldsymbol{v})&=\begin{vmatrix}ku_1 & v_1 \\ ku_2 & v_2 \end{vmatrix}\\[6pt]&=ku_1v_2-kv_1u_2\\[6pt]&=k(u_1v_2-u_2v_1)\\[6pt]&=k\det(\boldsymbol{u},\boldsymbol{v})\end{align*}\]
となって係数 $k$ を前に出すことができます。$\boldsymbol{v}$ に係数が掛かっている場合も同様に
 \[\det(\boldsymbol{u},k\boldsymbol{v})=k\det(\boldsymbol{u},\boldsymbol{v})\]
が成り立ちます。2 次元行列式は 2 つのベクトルで作られる平行四辺形の面積を表すので、どちらかの辺を $k$ 倍したら面積も $k$ 倍になることを意味しています。また、3 つのベクトル
 \[\boldsymbol{u}=\begin{bmatrix}u_1\\u_2\end{bmatrix},\quad \boldsymbol{v}=\begin{bmatrix}v_1\\v_2\end{bmatrix},\quad \boldsymbol{w}=\begin{bmatrix}w_1\\w_2\end{bmatrix}\]
について、$\det(\boldsymbol{u}+\boldsymbol{v},\boldsymbol{w})$ を計算すると、
 \[\begin{align*}\det(\boldsymbol{u}+\boldsymbol{v},\boldsymbol{w})&=\begin{vmatrix}u_1+v_1 & w_1 \\ u_2+v_2 & w_2\end{vmatrix}\\[6pt]&=(u_1+v_1)w_2-(u_2+v_2)w_1\\[6pt]&=(u_1w_2-u_2w_1)-(v_1w_2-v_2w_1)\\[6pt]&=\det(\boldsymbol{u},\boldsymbol{v})+\det(\boldsymbol{v},\boldsymbol{w})\end{align*}\]
となります。同様に
 \[\det(\boldsymbol{u},\boldsymbol{v}+\boldsymbol{w})=\det(\boldsymbol{u},\boldsymbol{v})+\det(\boldsymbol{u},\boldsymbol{w})\]
も成り立ちます。上に述べたような性質
 \[\begin{align*}&\det(k\boldsymbol{u},\boldsymbol{v})=k\det(\boldsymbol{u},\boldsymbol{v})\tag{1}\\[6pt]&\det(\boldsymbol{u},k\boldsymbol{v})=k\det(\boldsymbol{u},\boldsymbol{v})\tag{2}\\[6pt]&\det(\boldsymbol{u}+\boldsymbol{v},\boldsymbol{w})=\det(\boldsymbol{u},\boldsymbol{v})+\det(\boldsymbol{v},\boldsymbol{w})\tag{3}\\[6pt]&\det(\boldsymbol{u},\boldsymbol{v}+\boldsymbol{w})=\det(\boldsymbol{u},\boldsymbol{v})+\det(\boldsymbol{u},\boldsymbol{w})\tag{4}\end{align*}\]
のことをまとめて、行列式の線型性とよびます。もう少し一般化すると、次のような演算が成り立ちます。
 \[\begin{align*}\det(\boldsymbol{u},a\boldsymbol{v}+b\boldsymbol{w})&=\det(\boldsymbol{u},a\boldsymbol{v})+\det(\boldsymbol{u},b\boldsymbol{w})\\[6pt]&=a\det(\boldsymbol{u},\boldsymbol{v})+b\det(\boldsymbol{u},\boldsymbol{w})\end{align*}\]
すなわち、ベクトルの線形結合 $a\boldsymbol{v}+b\boldsymbol{w}$ が行列式の線形結合として現れています。
行列式の線型性は一般の $n$ 次元行列式についても、そのまま成り立ちます。たとえば、3 次元行列式 $\det(\boldsymbol{u},a\boldsymbol{v},b\boldsymbol{w})$ において、$\boldsymbol{u},\ \boldsymbol{v},\ \boldsymbol{w}$ のうちいずれかのベクトルを $k$ 倍すると行列式の値も $k$ 倍されます。また、いずれかのベクトルが $\boldsymbol{p}$ と $\boldsymbol{q}$ の和の形に書ける場合、行列式も 2 つの行列式の和に分解されます。例として、$\det(\boldsymbol{u},\boldsymbol{v}_1+\boldsymbol{v}_2,c\boldsymbol{w})$ を計算してみると、
 \[\begin{align*}\det(\boldsymbol{u},\boldsymbol{v}_1+\boldsymbol{v}_2,c\boldsymbol{w})&=c\det(\boldsymbol{u},\boldsymbol{v}_1+\boldsymbol{v}_2,\boldsymbol{w})\\[6pt]&=c\{\det(\boldsymbol{u},\boldsymbol{v}_1,\boldsymbol{w})+\det(\boldsymbol{u},\boldsymbol{v}_2,\boldsymbol{w})\}\end{align*}\]
となります。

行列式の交代性

2 本のベクトル $\boldsymbol{u}, \boldsymbol{v}$ を
 \[\boldsymbol{u}=\begin{bmatrix}u_1\\u_2\end{bmatrix},\quad \boldsymbol{v}=\begin{bmatrix}v_1\\v_2\end{bmatrix}\]
について行列式を
 \[\det(\boldsymbol{u},\boldsymbol{v})=\begin{vmatrix}u_1 & v_1 \\ u_2 & v_2 \end{vmatrix}\]
で定めるとき、$\boldsymbol{u}$ と $\boldsymbol{v}$ を入れ替えると符号が逆転します。
 \[\begin{align*}\det(\boldsymbol{v},\boldsymbol{u})&=\begin{vmatrix}v_1 & u_1 \\ v_2 & u_2 \end{vmatrix}\\[6pt]&=v_1u_2-v_2u_1\\[6pt]&=-(u_1v_2-u_2v_2)\\[6pt]&=-\det(\boldsymbol{u},\boldsymbol{v})\end{align*}\]
行列式の行を入れ替えても符号が逆転します。
 \[\begin{align*}\begin{vmatrix}u_2 & v_2 \\ u_1 & v_1 \end{vmatrix}&=u_2v_1-u_1v_2\\[6pt]&=-(u_1v_2-u_2v_1)\\[6pt]&=-\det(\boldsymbol{u},\boldsymbol{v})\end{align*}\]
一般の $n$ 次元の行列式においても、行または列を 1 回入れ替えると符号が逆転するという法則があります。これを行列式の交代性といいます。

面積の符号

行列式の交代性から明らかなように、行列式によって定義された面積は負の値になることがあります。
 
例として、ベクトル $\boldsymbol{u}=\begin{bmatrix}1\\4\end{bmatrix}$ と $\boldsymbol{v}=\begin{bmatrix}3\\1\end{bmatrix}$ を考えます。
 
matplotlib vector u, v plot
行列式 $\mathrm{det}(\boldsymbol{u},\boldsymbol{v})$ を計算してみると、
 \[\mathrm{det}(\boldsymbol{u},\boldsymbol{v})=\begin{vmatrix}1 & 3\\4 & 1\end{vmatrix}=1\cdot 1-3\cdot 4=-11\]
となります。行列式の交代性により、$\boldsymbol{u}$ と $\boldsymbol{v}$ を入れ替えると符号が逆転して
 \[\mathrm{det}(\boldsymbol{v},\boldsymbol{u})=11\]
となります。一般にベクトル $\boldsymbol{a}$ がベクトル $\boldsymbol{b}$ に時計回りに回転させて一致するとき、$\mathrm{det}(\boldsymbol{a},\boldsymbol{b})$ は負の値となり、$\mathrm{det}(\boldsymbol{b},\boldsymbol{a})$ は正の値となります ($\boldsymbol{b}$ は $\boldsymbol{a}$ に反時計回りに回転させて一致します)。

行列式の転置不変性

ベクトル $\boldsymbol{u}, \boldsymbol{v}$ を
 \[\boldsymbol{u}=\begin{bmatrix}u_1\\u_2\end{bmatrix},\quad \boldsymbol{v}=\begin{bmatrix}v_1\\v_2\end{bmatrix}\]
について行列式を
 \[\det(\boldsymbol{u},\boldsymbol{v})=\begin{vmatrix}u_1 & v_1 \\ u_2 & v_2 \end{vmatrix}\]
と定めましたが、行と列を入れ替えて、
 \[\begin{vmatrix}u_1 & u_2 \\ v_1 & v_2 \end{vmatrix}\]
のように書いても行列式の値は変わりません。一般に $n$ 次元の行列式において、成分を対角線上で折り返しても値は保持されます。この性質を行列式の転置不変性といいます。4 次元の行列式
 \[\begin{vmatrix}5 & 9 & 2 & 7\\1 & 3 & 9 & 5\\6 & 2 & 0 & 4\\2 & 6 & 3 & 3\end{vmatrix}\]
について転置不変性を確認してみましょう。手計算では大変なので、SciPy の scipy.linalg.det()関数を使って計算します。

# python_determinant_transpose

# In[1]

import numpy as np
from scipy.linalg import det

# 4×4配列を定義
x = np.array([[5, 9, 2, 7],
              [1, 3, 9, 5],
              [6, 2, 0, 4],
              [2, 6, 3, 3]])

# xの行列式を計算
print("det(x) : {:.2f}".format(det(x)))

# xを転置して行列式を計算
print("det(tx) : {:.2f}".format(det(x.T)))

# det(x) : -568.00
# det(tx) : -568.00

コメント

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

    【AI連載小説】科学とコードの交差点(66)
    「行列式の転置不変性をPythonで確認します」
     
    美純(ノートに数式を書きながら):「今日は行列の転置不変性について確認していこう」
    開誠:「行列の転置不変性って、転置した行列の行列式が元の行列の行列式と一致するってことだよな」
    明信:「そうだ。数学的には証明もあるけど、それをPythonで確認してみよう。」

    三人はPythonのコードを書きながら、行列のランダムな要素を持つ例を用いて転置不変性を確かめることに決定した。

    開誠:「では、NumPyを使ってランダムな3×3の行列を生成し、その行列式と転置行列の行列式を比較してみよう」

    import numpy as np
    
    # 3x3のランダム行列生成
    matrix = np.random.rand(3, 3)
    
    # 行列式の計算
    det_original = np.linalg.det(matrix)
    
    # 転置行列の行列式計算
    det_transposed = np.linalg.det(matrix.T)
    
    # 結果を表示
    print(f"元の行列:\n{matrix}\n行列式: {det_original}")
    print(f"転置行列:\n{matrix.T}\n行列式: {det_transposed}")
    
    # 転置不変性の確認
    if np.isclose(det_original, det_transposed):
        print("行列式の転置不変性が成り立っています。")
    else:
        print("行列式の転置不変性が成り立っていません。")

    馬締美純:「これで確認できるね」
    開誠:「Pythonを使って手軽に確認できるのは便利だ」
    明信:「行列の性質をプログラムで確かめるのはなかなか面白いな」