仍是一期后续的公式推导及代码验证,让我们开始吧。
附录C
- 实用的矩阵等式
- 1. ( P − 1 + B T R − 1 B ) − 1 B T R − 1 = P B T ( B P B T + R ) − 1 ( P^{-1}+ B^TR^{-1}B )^{-1}B^TR^{-1} = PB^T( BPB^T + R)^{-1} (P−1+BTR−1B)−1BTR−1=PBT(BPBT+R)−1
- 2. ( A + B D − 1 C ) − 1 = A − 1 − A − 1 B ( D + C A − 1 B ) − 1 C A − 1 (A+BD^{-1}C)^{-1} =A^{-1}-A^{-1}B(D+CA^{-1}B)^{-1}CA^{-1} (A+BD−1C)−1=A−1−A−1B(D+CA−1B)−1CA−1
- 3. det ( A B ) = det ( A ) det ( B ) \det(AB)=\det(A)\det(B) det(AB)=det(A)det(B)
实用的矩阵等式
1. ( P − 1 + B T R − 1 B ) − 1 B T R − 1 = P B T ( B P B T + R ) − 1 ( P^{-1}+ B^TR^{-1}B )^{-1}B^TR^{-1} = PB^T( BPB^T + R)^{-1} (P−1+BTR−1B)−1BTR−1=PBT(BPBT+R)−1
证明与代码验证见前文《Storm of Formulae(1)》。
2. ( A + B D − 1 C ) − 1 = A − 1 − A − 1 B ( D + C A − 1 B ) − 1 C A − 1 (A+BD^{-1}C)^{-1} =A^{-1}-A^{-1}B(D+CA^{-1}B)^{-1}CA^{-1} (A+BD−1C)−1=A−1−A−1B(D+CA−1B)−1CA−1
证明与代码验证见前文《Storm of Formulae(1)》。
3. det ( A B ) = det ( A ) det ( B ) \det(AB)=\det(A)\det(B) det(AB)=det(A)det(B)
3.1 证明
若
A
A
A是可逆矩阵,则可由一系列行、列初等操作转为单位矩阵1。初等行、列操作可由左乘、右乘初等矩阵来完成。即有
E
1
E
2
⋯
E
m
A
E
m
+
1
E
m
+
2
⋯
E
n
=
I
E_{1}E_{2}\cdots E_{m}A E_{m+1}E_{m+2}\cdots E_{n}=I
E1E2⋯EmAEm+1Em+2⋯En=I
初等矩阵可逆,且逆矩阵仍为初等矩阵。左乘右乘逆矩阵,露出矩阵
A
A
A
A
=
E
1
′
E
2
′
⋯
E
n
′
A=E_{1}^{'}E_{2}^{'}\cdots E_{n}^{'}
A=E1′E2′⋯En′
从而
det
(
A
B
)
=
det
(
E
1
′
E
2
′
⋯
E
n
′
B
)
\det(AB)=\det(E_{1}^{'}E_{2}^{'}\cdots E_{n}^{'}B)
det(AB)=det(E1′E2′⋯En′B)
而
∀
初等矩阵
E
,
det
(
E
B
)
=
det
(
E
)
det
(
B
)
\forall 初等矩阵E,\det(EB)=\det(E)\det(B)
∀初等矩阵E,det(EB)=det(E)det(B),故从右至左使用
n
n
n次该性质得到
det
(
E
1
′
E
2
′
⋯
E
n
′
B
)
=
det
(
E
1
′
)
det
(
E
2
′
)
⋯
det
(
E
n
′
)
det
(
B
)
\det(E_{1}^{'}E_{2}^{'}\cdots E_{n}^{'}B)=\det(E_{1}^{'})\det(E_{2}^{'})\cdots \det(E_{n}^{'})\det(B)
det(E1′E2′⋯En′B)=det(E1′)det(E2′)⋯det(En′)det(B)
最后从左至右使用
n
−
1
n-1
n−1次该性质结合出
A
A
A,
det
(
E
1
′
)
det
(
E
2
′
)
⋯
det
(
E
n
′
)
det
(
B
)
=
det
(
E
1
′
E
2
′
⋯
E
n
′
)
det
(
B
)
=
det
(
A
)
det
(
B
)
\det(E_{1}^{'})\det(E_{2}^{'})\cdots \det(E_{n}^{'})\det(B)=\\ \det(E_{1}^{'}E_{2}^{'}\cdots E_{n}^{'})\det(B)=\det(A)\det(B)
det(E1′)det(E2′)⋯det(En′)det(B)=det(E1′E2′⋯En′)det(B)=det(A)det(B)
对于
A
A
A不为可逆矩阵的情形,此时
det
(
A
)
=
0
\det(A)=0
det(A)=0。故
det
(
A
T
)
=
det
(
A
)
=
0
\det(A^{T})=\det(A)=0
det(AT)=det(A)=0。因为
A
T
A^{T}
AT是奇异矩阵1,
∃
\exists
∃非零向量
x
x
x,
A
T
x
=
0
A^{T}x = 0
ATx=0,进而有
B
T
A
T
x
=
0
B^{T}A^{T}x=0
BTATx=0。所以
B
T
A
T
B^{T}A^{T}
BTAT为奇异矩阵,
det
(
A
B
)
=
det
(
(
A
B
)
T
)
=
det
(
B
T
A
T
)
=
0
。
\det(AB)=\det((AB)^{T})=\det(B^{T}A^{T})=0。
det(AB)=det((AB)T)=det(BTAT)=0。
3.2 代码验证
代码有三个部分:
- 生成随机的元素在 [ 0 , 1 ) [0,1) [0,1)内的 n n n维矩阵
- 调用np.linalg.det计算行列式
- 以浮点数的方式判断两个行列式相等
# 生成随机矩阵 A 和 B
n = 3 # 矩阵维度
A = np.random.rand(n, n)
B = np.random.rand(n, n)
# 计算 AB 的行列式
det_AB = np.linalg.det(np.dot(A, B))
# 计算 A 和 B 的行列式的乘积
det_A_times_det_B = np.linalg.det(A) * np.linalg.det(B)
# 验证两者是否相等(考虑浮点数误差)
tolerance = 1e-10
is_equal = np.abs(det_AB - det_A_times_det_B) < tolerance
3.3 闲话
难得在本意是为机器学习提供非正经数学基础知识普及的博文中推导了一大段。2 对于书中给出的意欲使用行列式定义的推导,光是写出公式都已经大汗淋漓,显然不是负责任的说辞。没有根据的揣度是,作者想给个理由搪塞过去刨根问底的读者吧。