许多数学对象可以分解成多个组成部分。特征分解就是使用最广的矩阵分解之一,即将矩阵分解成一组特征向量和特征值。本节讨论的矩阵都是方阵。
我们先介绍特征值、特征向量的概念。设A是一个n阶方阵,如果存在实数λ和n维的非零向量x,满足:
那么把数λ称为方阵A的特征值,向量x称为矩阵A对应特征值λ的特征向量。
假设矩阵A有n个线性无关的特征向量{v 1 ,v 2 ,…,v n },它们对应的特征值为{λ 1 ,λ 2 ,…,λ n },把这n个线性无关的特征向量组合成一个新方阵,每一列是一个特征向量。
用特征值构成一个n阶对角矩阵,对角线的元素都是特征值。
那么,A的特征分解可表示为:
注意,并不是所有方阵都能进行特征值分解,一个n阶方阵A能进行特征值分解的充分必要条件是它含有n个线性无关的特征向量。
这里我们介绍了给定一个方阵时,如何求该方阵的特征向量和特征值,以及如何用编程语言实现。具体请看如下示例:
import numpy as np a = np.array([[1,2],[3,4]]) # 示例矩阵 A1 = np.linalg.eigvals(a) # 得到特征值 A2,V1 = np.linalg.eig(a) # 其中A2也是特征值,B为特征向量 print(A1) print(A2) print(V1)
打印结果:
[-0.37228132 5.37228132] [-0.37228132 5.37228132] [[-0.82456484 -0.41597356] [ 0.56576746 -0.90937671]]
在numpy.linalg模块中:
·eigvals():计算矩阵的特征值。
·eig():返回包含特征值和对应特征向量的元组。