2.4矩阵的特征值与特征向量
矩阵特征值的数学定义
求矩阵的特征值与特征向量
特征值的几何意义
1.矩阵特征值的数学定义
设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。
2.求矩阵的特征值与特征向量
在MATLAB中,计算矩阵的特征值和特征向量的函数是eig,常用的调用格式
有两种:
E=eig(A):求矩阵A的全部特征值,构成向量E。
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X
各列是相应的特征向量。
>> A=[1,1,0;1,0,5;1,10,2]
A = 1 1 0
1 0 5
1 10 2
X = //特征向量矩阵x
0.0722 0.9751 0.0886
0.5234 -0.0750 -0.6356
0.8490 -0.2089 0.7669
D = //对角阵
8.2493 0 0
0 0.9231 0
0 0 -6.1723
0.9231对应的特征向量为x的第二列。
验证:A乘以特征向量等于特征值乘于特征向量
>> A*X(:,1) //X矩阵的第一列
ans = 0.5956
4.3174
7.0040
>> D(1)*X(:,1)
ans = 0.5956
4.3174
7.0040
例1 设
又设𝝀𝒊为R的特征值,𝝀𝒋为S的特征值,𝒙𝐢 = 𝜶𝟏,𝜶𝟐,𝜶𝟑 ′是R对应于𝝀𝒊的特征 向量,𝒚𝐣 = 𝜷𝟏,𝜷𝟐 ′是S对应于𝝀𝒋的特征向量,试验证:
(1)𝝀𝒊、𝝀𝒋为A的特征值。
(2)𝐩𝐢 = 𝜶𝟏,𝜶𝟐,𝜶𝟑,𝟎,𝟎 ′是A对应于𝝀𝒊的特征向量,𝒒𝐣 = 𝟎,𝟎,𝟎,𝜷𝟏,𝜷𝟐 ′是 A对应于𝝀𝒋的特征向量。
R=[-1,2,0;2,-4,1;1,1,-6];
S=[1,2;2,3];
A=[R,zeros(3,2);zeros(2,3),S];
[X1,d1]=eig(R)
[X2,d2]=eig(S)
[X3,d3]=eig(A)
A矩阵的特征值由R矩阵的特征值和S矩阵的特征值组成,关于A矩阵每个特征 值的特征向量,前三个特征向量的前三个元素是R的特征向量,后两个特征向 量的后两个元素是S的特征向量,运算结果与结论相符。
3.特征值的几何意义
y1、y2是x1、x2经过矩阵A变换以后的结 果,A相当于一个变换矩阵。把λ1、λ2 当作伸缩因子,y1、y2是x1、x2经过λ1、 λ2伸缩以后的结果,如图所示。黑色部 分代表向量x1和x2,红色部分代表对x1 和x2进行拉伸的结果。
更进一步,连续取单位向量x,让它大小保持为1,那么Ax就将四分之一圆弧进行拉伸,变成四分之一椭圆。
MATLAB提供了一个eigshow命令,可以演示向量x和Ax之间的关系。用鼠标拖动绿色的 单位向量x绕原点转动,图中同步出现蓝色的Ax向量。Ax的大小在变化,方向也在变化,而且Ax的方向与x不一定相同。在变化过程中,x与Ax共线的位置称为特征方向。 在特征方向上有Ax等于λx。
例2 已知大写字母M的各个结点坐标如表所示(第一行代表横坐标,第二行代表纵坐标)。
(1)绘制M的图形。
(2)设用A对M的结点坐标进行变换,并绘制变换后的图形。
x=[0,0.5,0.5,3,5.5,5.5,6,6,3,0;0,0,6,0,6,0,0,8,1,8];
A=[1,0.5;0,1];
y=A*x;
subplot(2,2,1); %选择1号子图,详见专题四
fill(x(1,:),x(2,:),'r'); %绘制M的图形,并用红色(red)填充
subplot(2,2,2); %选择2号子图
fill(y(1,:),y(2,:),'r'); %绘制变换后的M图形,并用红色填充
定义变换矩阵A,再利用A对x进行变换,得到y矩阵,最后分别绘制变换前后的图形,M原来是正体,变换后改为斜体。
启示:在构建字库时,不必单独创建斜体字库,而只需对正体字库进行适当的线性变换即可,这样可以大大节省存储空间。
2.5稀疏矩阵——0元素的个数远远多于非0元素的个数的矩阵
矩阵的存储方式
稀疏存储方式的产生
稀疏矩阵的应用实例
1.矩阵的存储方式
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号。
注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
A矩阵的稀疏存储方式:
(1,1),1
(3,1),2
(2,2),5
(3,4),7
当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。
2.稀疏存储方式的产生
(1)完全存储方式与稀疏存储方式之间的转化
A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
>> A=sparse(eye(5))
A = (1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
>> B=full(A)
B = 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> whos //查询存储空间
Name Size Bytes Class Attributes
A 5x5 128 double sparse
B 5x5 200 double
(2)直接建立稀疏存储矩阵
sparse函数的其他调用格式:
sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标。
>> A=sparse([1,2,2],[2,1,4],[4,5,-7])
A = (2,1) 5
(1,2) 4
(2,4) -7
>> B=full(A)
B = 0 4 0 0
5 0 0 -7
使用spconvert函数直接建立稀疏存储矩阵,其调用格式为:B=spconvert(A),其中,A为一个m×3或m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
A(i,1)表示第i个非零元素所在的行。 A的第一列为行
A(i,2)表示 第i个非零元素所在的列。 A的第二列为列
A(i,3)表示第i个非零元素值的实部。 A的第三列元素为非0元素的值
A(i,4)表示第i个非零元素值的虚部。
若矩阵的全部元素都是实数,则无须第4列。
>> A=[2,2,1;2,1,-1;2,4,3] //3个非0元素
A = 2 2 1
2 1 -1
2 4 3
>> B=spconvert(A)
B = (2,1) -1
(2,2) 1
(2,4) 3
(3)带状稀疏矩阵的稀疏存储
稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。
带状稀疏矩阵就是一种十分典型的具有规则结构的稀疏矩阵,它是指所有非零元素集中在对角线上的矩阵。
[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
>> A =[11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A = 11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
>> [B,d]=spdiags(A)
B = 0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
利用带状稀疏矩阵非零对角线元素组成的矩阵B,以及对角线位置组成的向量d,命令执行后产生一个稀疏存储矩阵A。
>> A=spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
总 结:用spdiags函数产生带状稀疏矩阵的稀疏存储A:A=spdiags(B,d,m,n)
其中,m、n为原带状矩阵的行数与列数。B为r×p矩阵,这里r=min(m,n),p为 原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零 对角线。取值方法是:若非零对角线上元素个数等于r,则取全部元素;若非零 对角线上元素个数小于r,则应该用零补足到r个元素。补零的原则是:若m<n (行数<列数),则d<0时(主对角线以下)在前面补0,d>0时(主对角线以上) 在后面补0;当m≥n(行数≥列数),则d<0时在后面补0;d>0时在前面补0。
(4)单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏存储单位矩阵。
>> speye(3)
ans =
(1,1) 1
(2,2) 1
(3,3) 1
3.稀疏矩阵应用举例
求下列三对角线性方程组的解。
>> kf1=[1;1;2;1;0];
>> k0=[2;4;6;6;1]; //主对角线
>> k1=[0;3;1;4;2]; //主对角线以上第一条
>> B=[kf1,k0,k1];
>> d=[-1;0;1]; //非0角线位置组成的向量d
>> A=spdiags(B,d,5,5);
>> f=[0;3;2;1;5]; //建立方程右边的常数向量
>> x=A\f //左除求方程的解
x =
-0.1667
0.1111
2.7222
-3.6111
8.6111
TIP:当参与运算的数据对象不全是稀疏存储矩阵时,所得结果是完全储存形式。