特征向量与特征值
2537字,阅读需时9分钟
来自专栏
课程/专栏

一个n阶变换矩阵A施加到向量x,对向量x进行线性变换,若转换后的向量T(x)与向量x方向相同,即变换矩阵A没有影响到向量x的方向,向量x则称为变换矩阵A的特征向量。

例如变换矩阵A:

01.png

向量矩阵x:

02.png

变换矩阵A施加到向量矩阵x,对x进行线性变换:

03.png

向量矩阵x和向量矩阵Ax的向量几何表示如下图所示:

04.png

图像左侧是向量矩阵x的几何图形,图像右侧是向量矩阵Ax的几何图形。对比向量矩阵x变换前后图形,可以看出向量(1,-1)和向量(1,0)变换后,方向没有发生变化,仅是在同一方向上被伸缩,向量(1,-1)和向量(1,0)也称为变换矩阵A上的特征向量。

观察下图,下图将向量矩阵x和向量矩阵Ax内的向量连接起来,构成一个四边形,经观察发现,变换前后四边形的外轮廓形状没有改变,实际上这是特征向量(1,-1)和(1,0)决定了四边形的外轮廓,因此向量(1,-1)和(1,0)也称为特征向量。

05.png

向量(1,-1)变换后向量长度放大2倍,向量(1,0)变换后向量长度放大3倍。我们来看向量(1,-1)的变换过程:

06.png

变换矩阵A施加到特征向量x(1,-1),变换结果等同于使用一个纯量γ乘以该特征向量x。

即:

07.png

γ称为特征向量x对应的特征值,上面的公式说明特征向量x应用在矩阵A上的线性变换,可以由γ确定。

我们再来看向量(1,0)的变换过程:

08.png 

可以得出矩阵A的2个特征向量和特征值:

特征值γ = 2   特征向量(1,-1)

特征值γ = 3   特征向量(1,0)

可以把矩阵A的特征向量构成一个新的矩阵D,矩阵D也称为特征矩阵:

09.png

使用特征矩阵可以简化n阶矩阵A的幂运算,通过特征矩阵将矩阵A转换为对角矩阵,对角矩阵的n次运算,就是对角矩阵对角线上元素的n次运算。

 对角矩阵只在主对角线上含有非零元素,其它位置都是零。

10.png

矩阵C为对角矩阵,对角矩阵也可以用向量表示:

11.png 

如矩阵C用向量表示为:

12.png

对角矩阵的乘法运算非常高效,diag(v)与向量x相乘时,只需要将向量x中的每个元素x(i)放大v(i)倍即可。

如何讲矩阵A转换为对角矩阵呢?这就要用到矩阵A的特征矩阵D了,应用下面的推导公式可以讲矩阵A转换为对角矩阵,公式的推导过程可以查阅其它资料,这里就不详述了。

13.png

 

其中矩阵D是由矩阵A的特征向量构成的矩阵,矩阵C为矩阵A的对角矩阵,D(-1)是矩阵D的逆矩阵。矩阵A的对角矩阵为:

14.png

计算矩阵A的n次方公式如下:

15.png

C是矩阵A的对角矩阵,对角矩阵的幂运算非常简单,就是对角矩阵对角线上元素的n次运算。

例如:

16.png

附:Python绘图代码

import numpy as np
import matplotlib.pyplot as plt
 
# 设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']
# 设置正常显示负号
plt.rcParams['axes.unicode_minus']=False
 
#定义变换矩阵A
def A():
    return np.array([
        [3,1],
        [0,2]
    ])
 
# 定义待变换的向量组
# 矩阵X为变换的向量组
X = np.array([[1,-1],
             [1,0],
             [2,3]
])
 
# 绘制变换前向量组X
ax1 = plt.subplot(1,2,1)
ax1.set_title("向量矩阵X")
ax1.set_xlim(-2,2)
ax1.set_ylim(-2,2)
for item in X:
    ax1.quiver(-1,-1,item[0],item[1], angles='xy', scale_units='xy', color=np.random.rand(3,),scale=1,width=0.005)
 
# 绘制变换后向量Tx
Ax = np.matmul(A(),np.transpose(X))
print(Ax)
ax2 = plt.subplot(1,2,2)
ax2.set_title("向量矩阵Ax")
ax2.set_xlim(-6,6)
ax2.set_ylim(-6,6)
for item in np.transpose(Ax):
    ax2.quiver(-5,-2,item[0],item[1], angles='xy', scale_units='xy', color=np.random.rand(3,),scale=1,width=0.005)
 
plt.show()

 

附:计算矩阵A对角矩阵的Python代码

import numpy as np
#定义矩阵A
def A():
    return np.array([
        [3,1],
        [0,2]
    ])
 
#定义矩阵A的特征向量矩阵
def D():
    return np.array([
        [1,1],
        [-1,0]
    ])
 
# 计算矩阵D的逆矩阵
invD = np.linalg.inv(D())
print(invD)
# 计算矩阵invD与矩阵A的乘积
invDA = np.matmul(invD,A())
# 计算矩阵A的对角矩阵
invDAD = np.matmul(invDA,D())
print(invDAD)
我要评论
全部评论