计算方法
单纯矩阵normal matrix指的是符号
A
T
A
=
A
A
T
A^TA=AA^T
ATA=AAT的矩阵,他们的特征值互异。此外,单纯矩阵还有个特点,他们的特征空间彼此正交。
对于单纯矩阵,存在以下的谱定理Spectral theorem:
单纯矩阵可以分解为以下矩阵相加的形式:
A = ∑ i = 1 n λ i v i v i H A=\sum_{i=1}^n\lambda_iv_iv_i^H A=i=1∑nλiviviH
公式中, v i v_i vi是特征值 λ i \lambda_i λi对应的单位特征向量。
把矩阵分解为这种形式就是谱分解Spectral Decompostion。所以谱分解挺容易的,求出特征值和特征向量就行了。
以下是一个矩阵谱分解的例子:
(
3
0
0
0
0
2
0
0
0
0
−
2
0
0
0
0
−
1
)
=
3
(
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
)
+
2
(
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
)
−
2
(
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
)
−
(
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
)
\begin{pmatrix}3 & 0 & 0 & 0\\ 0 & 2 & 0 & 0\\ 0 & 0 & -2 & 0\\ 0 & 0 & 0 & -1\\ \end{pmatrix}\\ = 3 \begin{pmatrix}1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{pmatrix}+2 \begin{pmatrix}0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{pmatrix} -2 \begin{pmatrix}0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0\\ \end{pmatrix} -\begin{pmatrix}0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 1\\ \end{pmatrix}
3000020000−20000−1
=3
1000000000000000
+2
0000010000000000
−2
0000000000100000
−
0000000000000001
文章来源:https://www.toymoban.com/news/detail-459123.html
代码实现
特征值可以用海森堡法求解,特征向量可以用齐次方程组求解的方法求得,最后注意单位化就行了。以下是python代码:文章来源地址https://www.toymoban.com/news/detail-459123.html
# 谱分解
def spectral_decomposition(self):
# 求特征值
from com.youngthing.mathalgorithm.linearalgebra.hessenberg import Matrix as M
eigen_values = M(self.__vectors).eigen_values()
spectral_matrices = []
for i, e in enumerate(eigen_values):
# 单纯矩阵的几何重数为1
eigen_vector = self.eigen_vector(e)[0]
vector_len = Matrix.vector_len(eigen_vector)
eigen_vector = matrix_utils.mul_num(eigen_vector, 1 / vector_len)
x = Matrix([eigen_vector])
spectral_matrices.append(x * x.transpose_matrix())
return eigen_values, spectral_matrices
到了这里,关于6.12 谱分解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!