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。等式的左側將接近於零。