迹
迹,英文为trace,是一个从矩阵到数域的映射。对于一个
n
×
n
n\times n
n×n的方阵来说,存在
n
n
n个迹函数,分别称为1阶迹,2阶迹……n阶迹。k阶迹的定义是矩阵的所有k阶主子式的和。这个定义难以用数学公式来表示,k阶迹的符号是
t
r
[
k
]
(
A
)
tr^{[k]}(A)
tr[k](A)我就以求一个四阶矩阵的2阶迹为例子来说明下吧。
A
=
(
1
5
9
13
2
6
10
14
3
7
11
15
4
8
12
16
)
t
r
[
2
]
(
A
)
=
∣
1
5
2
6
∣
+
∣
1
9
3
11
∣
+
∣
1
13
4
16
∣
+
∣
6
10
7
11
∣
+
∣
6
14
8
16
∣
+
∣
11
15
12
16
∣
=
80
A=\begin{pmatrix}1 & 5 & 9 & 13\\ 2 & 6 & 10 & 14\\ 3 & 7 & 11 & 15\\ 4 & 8 & 12 & 16\\ \end{pmatrix}\\ tr^{[2]}(A)\\= \begin{vmatrix}1 & 5\\ 2 & 6\\ \end{vmatrix}+ \begin{vmatrix}1 & 9\\ 3 & 11\\ \end{vmatrix}+ \begin{vmatrix}1 & 13\\ 4 & 16\\ \end{vmatrix}+\\ \begin{vmatrix}6 & 10\\ 7 & 11\\ \end{vmatrix}+ \begin{vmatrix}6 & 14\\ 8 & 16\\ \end{vmatrix}+ \begin{vmatrix}11 & 15\\ 12 & 16\\ \end{vmatrix}\\ =80
A=
12345678910111213141516
tr[2](A)=
1256
+
13911
+
141316
+
671011
+
681416
+
11121516
=80
求迹特别麻烦,需要用到二项组合树算法或递归算法。
特别注意:0阶迹被特别定义为1,就像0的阶乘定义为1一样。
特征多项式系数
特征多项式的系数,假设次数为
k
k
k,那么系数就是
(
−
1
)
n
−
k
t
r
[
n
−
k
]
(
A
)
(-1)^{n-k}tr^{[n-k]}(A)
(−1)n−ktr[n−k](A),所以特征多项式就是:
Δ
A
(
λ
)
=
∑
k
=
0
n
(
−
1
)
n
−
k
t
r
[
n
−
k
]
(
A
)
λ
k
\Delta_A(\lambda)=\sum^n_{k=0}(-1)^{n-k}tr^{[n-k]}(A)\lambda^{k}
ΔA(λ)=k=0∑n(−1)n−ktr[n−k](A)λk
比如上述的矩阵的特征多项式就是:
A
=
(
1
5
9
13
2
6
10
14
3
7
11
15
4
8
12
16
)
t
r
[
0
]
(
A
)
=
1
t
r
[
1
]
(
A
)
=
34
t
r
[
2
]
(
A
)
=
80
t
r
[
3
]
(
A
)
=
0
t
r
[
4
]
(
A
)
=
0
Δ
A
(
λ
)
=
λ
4
−
34
λ
3
+
80
λ
2
A= \begin{pmatrix}1 & 5 & 9 & 13\\ 2 & 6 & 10 & 14\\ 3 & 7 & 11 & 15\\ 4 & 8 & 12 & 16\\ \end{pmatrix}\\ tr^{ [0] } (A)= 1\\ tr^{ [1] } (A)= 34\\ tr^{ [2] } (A)= 80\\ tr^{ [3] } (A)= 0\\ tr^{ [4] } (A)= 0\\ \Delta_A(\lambda)=\lambda^4-34\lambda^3+80\lambda^2
A=
12345678910111213141516
tr[0](A)=1tr[1](A)=34tr[2](A)=80tr[3](A)=0tr[4](A)=0ΔA(λ)=λ4−34λ3+80λ2文章来源:https://www.toymoban.com/news/detail-472069.html
python实现
我贴的只是局部代码,完整代码在GIT上。文章来源地址https://www.toymoban.com/news/detail-472069.html
def trace(self, k):
if k == 0:
return 1
result = 0
# 求k阶主子式,需要用到所有的组合
n = len(self.__lines)
indices = [i for i in range(n)]
import com.youngthing.mathalgorithm.combinatorics.binomial_combination_tree as bct
combinations = bct.combinations(indices, k)
for combination in combinations:
# 组成一个新矩阵
# 比如1 3 5代表原矩阵的1,3,5行与1,3,5列
sub_matrix = self.main_sub_matrix(combination)
result += sub_matrix.determinant()
return result
def main_sub_matrix(self, combination):
k = len(combination)
array = [[0 for _ in range(k)] for _ in range(k)]
# i 列
for i in range(k):
# i 行
for j in range(k):
array[i][j]= self.__lines[combination[i]][combination[j]]
return Matrix(array)
def characteristic_polynomial(self):
n = len(self.__lines)
from com.youngthing.mathalgorithm.interpolation.horner_polynominal import HornerPolynomial
polynomial= [0 for _ in range(n+1)]
for i in range(n+1):
trace = self.trace(i)
print("tr^{",f"[{i}]","}",f"({i})=",trace)
polynomial[i] = (-1) ** i * trace
return HornerPolynomial(polynomial)
到了这里,关于6.2 用迹求特征多项式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!