MATLAB 特徵值和特徵向量

Ammar Ali 2021年11月29日
MATLAB 特徵值和特徵向量

本教程將討論使用 MATLAB 中的 eig() 函式查詢給定矩陣的特徵值和特徵向量。

在 MATLAB 中使用 eig() 函式查詢特徵值和特徵向量

Matlab 提供了一個內建函式 eig() 來查詢給定矩陣的特徵值和特徵向量。矩陣應該是方陣。否則,Matlab 會顯示錯誤;語法:E = eig(mat) 返回一個列向量,其中包含矩陣 mat 的特徵值。例如,讓我們建立一個隨機矩陣並使用 eig() 函式找到它的特徵值。請參閱下面的程式碼。

mat = [1 3; 4 2]
E = eig(mat)

輸出:

mat =

     1     3
     4     2


E =

    -2
     5

語法:[EV, DV] = eig(mat) 返回一個矩陣 EV,其列是給定矩陣 mat 的右特徵向量和特徵值的對角矩陣 DV。例如,讓我們找到上述矩陣的特徵值和特徵向量。請參閱下面的程式碼。

mat = [1 3; 4 2]
[EV,DV] = eig(mat)

輸出:

mat =

     1     3
     4     2


EV =

   -0.7071   -0.6000
    0.7071   -0.8000


DV =

    -2     0
     0     5

你還可以使用以下關係驗證結果:mat x EV - EV x DV = 0。等式左側的結果應該接近零但不完全為零,因為 eig() 執行分解使用浮點計算。如你所見,變數 DV 包含對角線條目處的排序特徵值。但是,在許多情況下,它們是未排序的。為了對這些值進行排序,我們可以使用 diag() 函式來提取對角線條目,並使用 sort() 函式,我們可以對這些值進行排序。例如,讓我們使用 magic() 函式建立另一個矩陣並找到它的排序值。請參閱下面的程式碼。

mat = magic(3)
[EV,DV] = eig(mat)
[SV, indi] = sort(diag(DV))

輸出:

mat =

     8     1     6
     3     5     7
     4     9     2


EV =

   -0.5774   -0.8131   -0.3416
   -0.5774    0.4714   -0.4714
   -0.5774    0.3416    0.8131


DV =

   15.0000         0         0
         0    4.8990         0
         0         0   -4.8990


SV =

   -4.8990
    4.8990
   15.0000


indi =

     3
     2
     1

矩陣 DV 中的特徵值是未排序的,但是 diag()sort() 函式對這些值進行了排序,現在儲存在變數 SV 中。sort() 函式還返回特徵值的索引。我們可以使用索引將排序後的特徵值放回到矩陣 DV 中。現在我們可以使用索引和 SV 向量找到已排序的 DV 和 EV 矩陣。請參閱下面的程式碼。

mat = magic(3);
[EV,DV] = eig(mat);
[SV, indi] = sort(diag(DV));
DVs = DV(indi,indi)
SVs = EV(:,indi)

輸出:

DVs =

   -4.8990         0         0
         0    4.8990         0
         0         0   15.0000


SVs =

   -0.3416   -0.8131   -0.5774
   -0.4714    0.4714   -0.5774
    0.8131    0.3416   -0.5774

盡你所能,對角矩陣 DVs 現在包含排序的特徵值。使用上述關係,你還可以確認結果:mat x SVs - SVs x DVs = 0。語法:[EV, DV, WV] = eig(mat) 返回右特徵向量 EV、特徵值 DV 和左特徵向量 WV。例如,讓我們找到上述矩陣 mat 的右特徵向量、特徵值和左特徵向量。請參閱下面的程式碼。

mat = magic(3)
[EV,DV,WV] = eig(mat)

輸出:

EV =

   -0.5774   -0.8131   -0.3416
   -0.5774    0.4714   -0.4714
   -0.5774    0.3416    0.8131


DV =

   15.0000         0         0
         0    4.8990         0
         0         0   -4.8990


WV =

   -0.5774   -0.7416   -0.0749
   -0.5774    0.6667   -0.6667
   -0.5774    0.0749    0.7416

我們還可以使用 eig() 函式來找到兩個矩陣的廣義特徵值和右特徵向量。語法:[EV,DV] = eig(mat1, mat2),返回對 (mat1, mat2) 的廣義特徵值和右特徵向量。例如,讓我們建立兩個矩陣並使用 eig() 函式找到它們的廣義特徵值和右特徵向量。請參閱下面的程式碼。

mat1 = magic(2)
mat2 = [1 2; 2 1]
[EV,DV] = eig(mat1,mat2)

輸出:

mat1 =

     1     3
     4     2


mat2 =

     1     2
     2     1


EV =

    1.0000   -0.5000
   -1.0000    1.0000


DV =

    2.0000         0
         0    1.6667

我們可以使用以下關係來驗證結果:mat1 x EV - mat2 x EV x DV = 0。等式的左側將接近於零。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相關文章 - MATLAB Vector