老饼讲解:一步一步上手学习
矩阵的对角化,一般是指通过对矩阵进行特征值分解,来找出一个可逆矩阵P,使得矩阵A对角化,即,所以矩阵的对角化,往往也称为矩阵特征值分解(eigenvalue decomposition)。
好了,下面让我们一起来详细看看如何将矩阵对角化,以及它的意义。
我们先来看看什么是矩阵的对角化,然后再来说说如何将矩阵对角化,开始!
矩阵的特征值分解只适用于方阵,它是指将方阵A,分解为如下形式:
其中,是一个对角矩阵
一般地,把 的各列称为A的特征向量,对角上的元素称为矩阵A的特征值。
示图如下:

当矩阵的特征值分解,写为如下形式时,就称为矩阵的对角化,如下:
其中,是一个对角矩阵,
所以,矩阵的对角化是指:对于方阵A,求一个可逆P,使得是一个对角矩阵。
需要注意的是,矩阵的对角化(特征值分解),都只相对方阵而言,且,并不是所有方阵都能对角化(特征值分解)。
好了,那怎么求出矩阵特征值分解中所用的和呢,事实上,由于矩阵的对角化和特征值分解是同一回事,所以我们就以矩阵对角化来说矩阵的特征分解好了,这样比较好表述一些,所以,现在需要求出的是矩阵对角化中的P,它一般可以通过特征值分解的方法来求得,下面就说说它是怎么搞的。
由于
不妨把P的每一列都记为,则对于P的每一列都有:
这也就是为什么把P的都一列都称为A的特征向量了,因为它满足上面的条件。
进一步则有:
即:
上式说明线性相关,因此:
而展开后是一个关于的n次多项式,即
求解多项式求得多个,将各个特征值代入,就可以解得对应的特征向量了,得到了特征向量,也就得到了P。
以 为例,将它对角化的实操过程如下:

1. 计算特征多项式
2. 求解特征值
由解得:
3. 求解特征向量
(1) 将代入 ,可得:
解得特征向量
(2) 将代入 ,可得:
解得特征向量
4. 组装与单位化P
将两个特征向量按列组装,可得到:
进一步将它按列单位化后得到:
5. 验证
可进一步验证:
可以看到,就是一个对角矩阵了。
在python中可以使用numpy的linalg.inv()函数来实现矩阵的对角化,具体代码示例如下:
'''
本代码展示在python中如何进行特征值分解
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
import numpy as np
A = np.array([[1.5,0.5],[0.5,1.5]]) # 准备进行对角化的矩阵A
d,P = np.linalg.eig(A) # 计算特征值和特征向量
D = np.linalg.inv(P) @ A @ P # 对角化A
print("\n原始矩阵A:\n",A) # 打印原始矩阵A
print("\n特征向量矩阵P:\n",P) # 打印特征向量矩阵P
print("\n对角化后的特征值D:\n",D) # 打印对角化后的特征值D代码运行结果如下:

可以看到,使用矩阵P对A进行对角化后,得到了对角矩阵D。
矩阵的特征值分解,就是指将方阵A分解为 的形式,它与矩阵的对角化是同一个问题。其中,的对角元素,就称为矩阵A的特征值,而P的每一列就称为A的特征向量。
评论