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。等式的左侧将接近于零。

Author: 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