矩阵的特征值与特征向量、稀疏矩阵


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:当参与运算的数据对象不全是稀疏存储矩阵时,所得结果是完全储存形式。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM