线性代数——矩阵的特征值和特征向量

概念和几何意义

  • 设A是n阶矩阵,如果数λ和n维非零列向量x使关系式
    A x = λ x Ax=\lambda x Ax=λx
    成立,那么,这样的数λ称为矩阵A的特征值,非零向量x称为A的对应于特征值λ的特征向量
  • 从线性变换y = Ax的角度来看:若A为正交矩阵,则y与x的长度相同;若x为A的对应于特征值λ的特征向量,则y与x的方向相同,长度是x的λ倍。
  • 上式可写成
    ( A − λ E ) x = 0 , (A-\lambda E)x=0, (AλE)x=0,
    根据克拉默法则,它有非零解的充分必要条件是
    ∣ A − λ E ∣ = 0. \left | A-\lambda E\right |=0. AλE=0.
    上式是以λ为未知数的一元n次方程,称为矩阵A的特征方程。其左端∣A−λE∣是λ的n次多项式,记作f(λ),称为矩阵A的特征多项式

算法和性质

  • 特征值求法: A的特征值就是特征方程的解。特征方程在复数范围内恒有解,其个数为方程的次数(重根按重数计算),因此,n阶矩阵A在复数范围内有n个特征值。
  • 特征向量求法: 把求得的特征值λi代入(A−λE)x=0,可求得A的对应于特征值λi的特征向量xi,kxi(k≠0)是A的对应于特征值λi的全部特征向量。
  • 零矩阵的特征值为0。
  • 设n阶矩阵A的特征值为λ1,λ2,…,λn,则
    (1)λ12+…+λn = a11+a22+…+ann = tr(A)
    (2)λ1λ2…λn = |A|
  • 若λ是A的特征值,则λk是Ak的特征值(若A可逆, 1 λ \frac{1}{\lambda} λ1是A-1的特征值);φ(λ)是φ(A)的特征值。
  • 【例】设3阶矩阵A的特征值为1,-1,2,求A*+3A-2E的特征值。
    解:因A的特征值全不为0,知A可逆,故A*=|A|A-1,而|A|=λ1λ2λ3=-2,所以A*+3A-2E=-2A-1+3A-2E=φ(A),则φ(λ)=- 2 λ \frac{2}{λ} λ2+3λ-2,从而可得特征值为φ(1)=-1,φ(-1)=-3,φ(2)=3.
  • 设λ1,λ2,…,λm是方阵A的m个特征值,p1,p2,…,pm依次是与之对应的特征向量,如果λ1,λ2,…,λm各不相等,则p1,p2,…,pm线性无关。

Numpy求特征值和特征向量

import numpy as np

A = np.mat('1 0;0 1')
eigvalue, eigvector = np.linalg.eig(A)  # 返回包含特征值和对应的特征向量的元组
print(eigvalue)
print(eigvector)

print(np.linalg.eigvals(A))  # 计算矩阵的特征值
[1. 1.]
[[1. 0.]
 [0. 1.]]
[1. 1.]

Numpy求解矩阵方程(求解线性方程组Ax=b)

import numpy as np

A = np.mat('1 0;0 1')
b1 = np.mat([[2], [1]])    # mat必须用列向量
b2 = np.array([2, 1])    # 数组可以用行向量
x1 = np.linalg.solve(A, b1)
x2 = np.linalg.solve(A, b2)
print(x1)
print(x2)
[[2.]
 [1.]]
[2. 1.]
LAPACK是一种线性代数库,用于解决各种数值线性代数问题,包括矩阵特征值特征向量的求解。下面我们来介绍一下LAPACK库中求解矩阵特征值特征向量的函数。 1. DSYEV函数 DSYEV函数用于求解实对称矩阵特征值特征向量。该函数的原型如下: ``` void dsyev(char jobz, char uplo, int n, double* a, int lda, double* w, double* work, int lwork, int* info); ``` 参数说明: - jobz:指定计算特征值还是特征向量,取值为'N'(只计算特征值)或'V'(同时计算特征值特征向量)。 - uplo:指定矩阵的上三角部分还是下三角部分存储在数组a中,取值为'U'(上三角部分)或'L'(下三角部分)。 - n:矩阵的维数。 - a:存储矩阵的一维数组。 - lda:指定a数组中每个列向量的存储长度(通常为n)。 - w:存储特征值的一维数组。 - work:工作空间数组。 - lwork:指定work数组的长度(通常为3n)。 - info:返回求解结果,取值为0表示成功,其他值表示出错。 2. ZGEEV函数 ZGEEV函数用于求解复矩阵特征值特征向量。该函数的原型如下: ``` void zgeev(char jobvl, char jobvr, int n, std::complex<double>* a, int lda, std::complex<double>* w, std::complex<double>* vl, int ldvl, std::complex<double>* vr, int ldvr, std::complex<double>* work, int lwork, double* rwork, int* info); ``` 参数说明: - jobvl:指定是否计算左特征向量,取值为'N'(不计算)或'V'(计算)。 - jobvr:指定是否计算右特征向量,取值为'N'或'V'。 - n:矩阵的维数。 - a:存储矩阵的一维数组。 - lda:指定a数组中每个列向量的存储长度(通常为n)。 - w:存储特征值的一维数组。 - vl:存储左特征向量的一维数组。 - ldvl:指定vl数组中每个列向量的存储长度(通常为n)。 - vr:存储右特征向量的一维数组。 - ldvr:指定vr数组中每个列向量的存储长度(通常为n)。 - work:工作空间数组。 - lwork:指定work数组的长度(通常为2n)。 - rwork:实数数组,长度为2n(用于存储中间计算结果)。 - info:返回求解结果,取值为0表示成功,其他值表示出错。 以上就是LAPACK库中求解矩阵特征值特征向量的函数介绍。需要注意的是,在调用这些函数之前,需要先将矩阵按列存储方式存储在一维数组中,并传入一些参数,如矩阵的维数、存储方式等。具体的参数可以参考LAPACK库的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值