一、理论知识
迹运算返回的矩阵对角元素的和:
T
r
(
A
)
=
∑
i
A
i
,
i
Tr(A)=\sum_{i}{A_{i,i}}
Tr(A)=i∑Ai,i
若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号,可以清楚地表示。例如,迹运算提供了另一种描述矩阵 Frobenius 范数的方式:
∣
∣
A
∣
∣
F
=
T
r
(
A
A
T
)
||A||_F=\sqrt{Tr(AA^T)}
∣∣A∣∣F=Tr(AAT)
Frobenius
范数,即矩阵元素绝对值的平方和再开平方。范数
用迹运算表示表达式,我们可以使用很多有用的等式来操纵表达式。例如,迹运算在转置运算下是不变的:
T
r
(
A
)
=
T
r
(
A
T
)
Tr(A) = Tr(A^T)
Tr(A)=Tr(AT)
多个矩阵乘积的迹,和将这些矩阵中最后一个挪到最前面之后乘积的迹是相同的。当然,我们需要考虑挪动之后矩阵乘积依然定义良好:
T
r
(
A
B
C
)
=
T
r
(
C
A
B
)
=
T
r
(
B
C
A
)
Tr(ABC) = Tr(CAB) = Tr(BCA)
Tr(ABC)=Tr(CAB)=Tr(BCA)
即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。例如,假设矩阵
A
∈
R
m
×
n
A ∈ R^{m×n}
A∈Rm×n,矩阵
B
∈
R
n
×
m
B ∈ R^{n×m}
B∈Rn×m,我们可以得到:
T
r
(
A
B
)
=
T
r
(
B
A
)
Tr(AB) = Tr(BA)
Tr(AB)=Tr(BA)
即使
A
B
∈
R
m
×
m
AB∈R^{m×m}
AB∈Rm×m和
B
A
∈
R
n
×
n
BA∈R^{n×n}
BA∈Rn×n。
另一个有用的事实是标量在迹运算后仍然是它自己:
a
=
T
r
(
a
)
a=Tr(a)
a=Tr(a)。
二、Matlab 实现
定义矩阵A:a = [1 2 3;4 5 6;7 8 9]
% 矩阵a
a =
1 2 3
4 5 6
7 8 9
输入:
% 求迹,主对角线之和
>>trace(a)
ans =
15
% Frobenius 范数
>> norm(a,'fro')
ans =
16.8819
% 上述公式实现
>> sqrt(trace(a*a'))
ans =
16.8819