logo

ラプラス展開 📂行列代数

ラプラス展開

定理

正方行列$A_{n \times n} = (a_{ij})$が与えられているとしよう。

  • $$ \det A = \sum_{j=1}^{n} a_{ij} C_{ij} = \sum\limits_{j=1}^{n}a_{ij}[\operatorname{adj}(A)]_{ji} $$
  • $$ \det A = \sum_{i=1}^{n} a_{ij} C_{ij} = \sum\limits_{i=1}^{n}a_{ij}[\operatorname{adj}(A)]_{ji} $$

  • 正方行列$A_{n \times n} = (a_{ij})$の$i$番目の行と$j$番目の列を取り除いた行列行列式$M_{ij}$を小行列式といい、これに対して$C_{ij} := (-1)^{i + j} M_{ij}$を余因子という。
  • 余因子を成分に持つ行列$C=[C_{ij}]$の転置余因子行列という。 $$ \operatorname{adj}(A) = C^{T} $$

説明

ラプラス展開余因子展開とも呼ばれる定理であり、その有用性は言い尽くせないほどだ。さしあたり行列式を定義だけで計算するよりはるかに簡単だ。特殊な条件が揃った行列の行列式を求めるときにはその利点がさらに倍増するので、このファクトだけは必ず知っておかなければならない。

ある行列が可逆行列かどうかを判断するときにすぐ使える例として、次のラプラス展開を見てみよう。

$$ \begin{align*} \displaystyle \det \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} =& 1 \cdot \begin{vmatrix} 5 & 6 \\ 8 & 9 \end{vmatrix} - 2 \cdot \begin{vmatrix} 4 & 6 \\ 7 & 9 \end{vmatrix} + 3 \cdot \begin{vmatrix} 4 & 5 \\ 7 & 8 \end{vmatrix} \\ =& 1 \cdot (-3) - 2 \cdot (-6) + 3 \cdot (-3) \\ =& 0 \end{align*} $$

したがって、$\displaystyle \det \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$には逆行列が存在しないことを容易に確認できる。

コード

次はJuliaでラプラス展開を実装して検証する内容のコードだ。事実上、数式をほとんどそのまま移した程度であり、実際には非常に非効率的に実装されている状態だ。これについては次のポストを参考にするとよい:

function laplace(A::AbstractMatrix)
    n = size(A, 1)
    @assert n == size(A, 2) "matrix $A is not square"

    if n |> isone
        aijCij = A
    else
        aijCij = [A[1,j] * (-(-1)^j) * laplace(A[2:end, setdiff(1:n, j)]) for j in 1:n]
    end
    return sum(aijCij)
end
B = [2 3; 4 6]
laplace(B)
C = [7 1; 9 3]
laplace(C)

M = rand(3,3)
laplace(M)

using LinearAlgebra
det(M)
abs(det(M) - laplace(M))