迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > MATLAB >

MATLAB 特征值和特征向量

作者:迹忆客 最近更新:2023/03/19 浏览次数:

本文将讨论使用 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。等式的左侧将接近于零。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MATLAB 中注释多行

发布时间:2023/04/23 浏览次数:111 分类:MATLAB

可以使用注释块方法或 MATLAB 编辑器在 MATLAB 中注释多行。

MATLAB 最大索引

发布时间:2023/04/23 浏览次数:192 分类:MATLAB

在本教程中,我们将讨论如何使用 MATLAB 中的 max() 函数从数组及其索引中查找最大值。

MATLAB 索引超出矩阵尺寸

发布时间:2023/04/23 浏览次数:103 分类:MATLAB

要解决索引超出矩阵索引的问题,请检查你要获取或替换数据的索引。

MATLAB 检查变量类型

发布时间:2023/04/23 浏览次数:92 分类:MATLAB

在本教程中,我们将讨论如何使用 MATLAB 中的 class() 和 whos 函数检查给定变量的类型。

MATLAB vs Octave

发布时间:2023/04/23 浏览次数:74 分类:MATLAB

我们可以说 Octave 是 MATLAB 的免费版本。

MATLAB MAT 文件

发布时间:2023/04/23 浏览次数:89 分类:MATLAB

可以使用 MAT 文件在 MATLAB 中存储和加载格式化的数据。

MATLAB asv 文件

发布时间:2023/04/23 浏览次数:180 分类:MATLAB

.asv 文件是 MATLAB 生成的自动保存文件,因此在计算机崩溃时你不会丢失数据。

MATLAB 三元运算符

发布时间:2023/04/23 浏览次数:130 分类:MATLAB

MATLAB 中没有三元运算符,因此你必须使用标准格式。

MATLAB & vs &&

发布时间:2023/04/23 浏览次数:134 分类:MATLAB

在 MATLAB 中,&是逻辑与运算符,&&也是表现出短路行为的逻辑运算符。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便