36.eig函数
假设A是一个n×n的矩阵,A的特征值问题就是找到下面方程组的解:
A·V=λ·V
其中,λ为标量,V为向量,如果把矩阵A的n个特征值放在矩阵P的对角线上,相应的特征向量按照与特征值对应的顺序排列,作为矩阵V的列,特征值问题可以改为:
A·V=V·D
如果V为非奇异的,该问题可以认为是一个特征值分解的问题。此时关系如下:
A=V·D·V-1
广义特征值问题是指方程A·x=λ·B·x的非平凡解,其中A、B都是n×n的矩阵,λ为标量。满足此方程的λ为广义特征值,对应的向量x为广义特征向量。
如果X是一个列向量为a的特征向量的矩阵,并且它的秩为n,那么特征向量线性无关。如果不是这样,则称矩阵为缺陷矩阵。如果X·X′=I,则特征向量正交,这对于对称矩阵是成立的。
在MATLAB中,利用eig函数可求矩阵特征值与特征向量。函数的语法格式为:
e=eig(A):返回一个列向量,其中包含方阵A的特征值。
[V,D]=eig(A):返回特征值的对角矩阵D和矩阵V,其列是对应的右特征向量,使得A∗V=V∗D。
[V,D,W]=eig(A):还返回满矩阵W,其列是对应的左特征向量,使得W'∗A=D∗W'。
特征值问题是用来确定方程Av=λv的解,其中,A是n×n矩阵,v是长度为n的列向量,λ是标量。满足方程的λ的值即特征值。满足方程的v的对应值即右特征向量。左特征向量w满足方程w'A=λw'。
e=eig(A,B):返回一个列向量,其中包含方阵A和B的广义特征值。
[V,D]=eig(A,B):返回广义特征值的对角矩阵D和满矩阵V,其列是对应的右特征向量,使得A∗V=B∗V∗D。
[V,D,W]=eig(A,B):还返回满矩阵W,其列是对应的左特征向量,使得W'∗A=D∗W'∗B。
广义特征值问题是用来确定方程Av=λBv的解,其中,A和B是n×n矩阵,v是长度为n的列向量,λ是标量。满足方程的λ值即广义特征值。对应的v值即广义右特征向量。左特征向量w满足方程w'A=λw'B。
[___]=eig(A,balanceOption):其中,balanceOption为'nobalance'表示禁用该算法中的初始均衡步骤。balanceOption的默认值是'balance',表示启用均衡步骤。eig函数可以返回先前语法中的任何输出参数。
[___]=eig(A,B,algorithm):其中,algorithm为'chol'表示使用B的Cholesky分解计算广义特征值。algorithm的默认值取决于A和B的属性,但通常是'qz',表示使用QZ算法。
如果A为Hermitian并且B为Hermitian正定矩阵,则algorithm的默认值为'chol'。
[___]=eig(____,eigvalOption):使用先前语法中的任何输入或输出以eigvalOption指定的形式返回特征值。将eigvalOption指定为'vector'可返回列向量中的特征值,指定为'matrix'可返回对角矩阵中的特征值。
【例1-39】求矩阵排序的特征值和特征向量。
默认情况下,eig并不总是返回已排序的特征值和特征向量。可以使用sort函数将特征值按升序排序,并重新排序相应的特征向量。
A的特征值位于D的对角线上。但是,特征值并未排序。使用diag(D)从D的对角线上提取特征值,然后按升序对得到的向量进行排序。sort的第二个输出返回索引的置换向量。
使用ind对D的对角线元素进行重新排序。由于D中的特征值对应于V的各列中的特征向量,因此还必须使用相同的索引对V的列进行重新排序。
(V,D)和(Vs,Ds)都会生成A的特征值分解。A∗V-V∗D和A∗Vs-Vs∗Ds的结果一致(基于舍入误差)。