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。等式的左侧将接近于零。
相关文章
MATLAB 检查变量类型
发布时间:2023/04/23 浏览次数:92 分类:MATLAB
-
在本教程中,我们将讨论如何使用 MATLAB 中的 class() 和 whos 函数检查给定变量的类型。