ラプラス展開
定理
正方行列$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))
