矩陣的特征值與特征向量、稀疏矩陣


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