MATLAB中eig函数用法

目录

语法

说明

示例

矩阵特征值

矩阵的特征值和特征向量

排序的特征值和特征向量

左特征向量

不可对角化(亏损)矩阵的特征值

广义特征值

病态矩阵使用 QZ 算法得出广义特征值

一个矩阵为奇异矩阵的广义特征值


        eig函数的功能是求取矩阵特征值和特征向量。

语法

e = eig(A)
[V,D] = eig(A)
[V,D,W] = eig(A)
e = eig(A,B)
[V,D] = eig(A,B)
[V,D,W] = eig(A,B)
[___] = eig(A,balanceOption)
[___] = eig(A,B,algorithm)
[___] = eig(___,outputForm)

说明

e = eig(A) 返回一个列向量,其中包含方阵 A 的特征值。

[V,D] = eig(A) 返回特征值的对角矩阵 D 和矩阵 V,其列是对应的右特征向量,使得 A*V = V*D

[V,D,W] = eig(A) 还返回满矩阵 W,其列是对应的左特征向量,使得 W'*A = D*W'。

        特征值问题是用来确定方程 Av = λv 的解,其中,A 是 n×n 矩阵,v 是长度 n 的列向量,λ 是标量。满足方程的 λ 的值即特征值。满足方程的 v 的对应值即右特征向量。左特征向量 w 满足方程 w’A = λw’。

e = eig(A,B) 返回一个列向量,其中包含方阵 A 和 B 的广义特征值。

[V,D] = eig(A,B) 返回广义特征值的对角矩阵 D 和满矩阵 V,其列是对应的右特征向量,使得 A*V = B*V*D。

[V,D,W] = eig(A,B) 还返回满矩阵 W,其列是对应的左特征向量,使得 W'*A = D*W'*B。

        广义特征值问题是用来确定方程 Av = λBv 的解,其中,A 和 B 是 n×n 矩阵,v 是长度 n 的列向量,λ 是标量。满足方程的 λ 的值即广义特征值。对应的 v 的值即广义右特征向量。左特征向量 w 满足方程 w’A = λw’B。

        [___] = eig(A,balanceOption)(其中,balanceOption 为 'nobalance')禁用该算法中的初始均衡步骤。balanceOption 的默认值是 'balance',表示启用均衡步骤。eig 函数可返回上述语法中的任何输出参数。

[___] = eig(A,B,algorithm)(其中,algorithm 为 'chol')使用 B 的 Cholesky 分解计算广义特征值。algorithm 的默认值取决于 A 和 B 的属性,但通常是 'qz',表示使用 QZ 算法。

        如果 A 为埃尔米特并且 B 为埃尔米特正定矩阵,则 algorithm 的默认值为 'chol'。

[___] = eig(___,outputForm) 支持上述语法中的任何输入或输出参数,并以 outputForm 指定的形式返回特征值。将 outputForm 指定为 'vector' 可返回列向量中的特征值,指定为 'matrix' 可返回对角矩阵中的特征值。

示例

矩阵特征值

        使用 gallery 创建一个对称正定矩阵。

A = gallery('lehmer',4)
A = 4×4

    1.0000    0.5000    0.3333    0.2500
    0.5000    1.0000    0.6667    0.5000
    0.3333    0.6667    1.0000    0.7500
    0.2500    0.5000    0.7500    1.0000

        计算 A 的特征值。结果为一个列向量。

e = eig(A)
e = 4×1

    0.2078
    0.4078
    0.8482
    2.5362

        或者,使用 outputForm 返回对角矩阵中的特征值。

D = eig(A,'matrix')
D = 4×4

    0.2078         0         0         0
         0    0.4078         0         0
         0         0    0.8482         0
         0         0         0    2.5362

矩阵的特征值和特征向量

        使用 gallery 创建循环矩阵。

A = gallery('circul',3)
A = 3×3

     1     2     3
     3     1     2
     2     3     1

        计算 A 的特征值和右特征向量。

[V,D] = eig(A)
V = 3×3 complex

  -0.5774 + 0.0000i   0.5774 + 0.0000i   0.5774 + 0.0000i
  -0.5774 + 0.0000i  -0.2887 - 0.5000i  -0.2887 + 0.5000i
  -0.5774 + 0.0000i  -0.2887 + 0.5000i  -0.2887 - 0.5000i

D = 3×3 complex

   6.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -1.5000 + 0.8660i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i  -1.5000 - 0.8660i

        验证结果是否满足 A*V = V*D。

A*V - V*D
ans = 3×3 complex
10-14 ×

  -0.2220 + 0.0000i  -0.0888 - 0.0111i  -0.0888 + 0.0111i
   0.0888 + 0.0000i   0.0000 + 0.0833i   0.0000 - 0.0833i
  -0.0444 + 0.0000i  -0.1110 + 0.0666i  -0.1110 - 0.0666i

        在理想情况下,特征值分解可满足此关系。由于 eig 使用浮点计算执行分解,那么 A*V 可最大程度接近 V*D。换言之,A*V - V*D 接近但不等于 0。

排序的特征值和特征向量

        默认情况下,eig 并不总是返回已排序的特征值和特征向量。可以使用 sort 函数将特征值按升序排序,并重新排序相应的特征向量。

        计算 5×5 幻方矩阵的特征值和特征向量。

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

[V,D] = eig(A)
V = 5×5

   -0.4472    0.0976   -0.6330    0.6780   -0.2619
   -0.4472    0.3525    0.5895    0.3223   -0.1732
   -0.4472    0.5501   -0.3915   -0.5501    0.3915
   -0.4472   -0.3223    0.1732   -0.3525   -0.5895
   -0.4472   -0.6780    0.2619   -0.0976    0.6330

D = 5×5

   65.0000         0         0         0         0
         0  -21.2768         0         0         0
         0         0  -13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   13.1263

        A 的特征值位于 D 的对角线上。但是,特征值并未排序。

        使用 diag(D) 从 D 的对角线上提取特征值,然后按升序对得到的向量进行排序。sort 的第二个输出返回索引的置换向量。

[d,ind] = sort(diag(D))
d = 5×1

  -21.2768
  -13.1263
   13.1263
   21.2768
   65.0000

ind = 5×1

     2
     3
     5
     4
     1

        使用 ind 对 D 的对角线元素进行重新排序。由于 D 中的特征值对应于 V 的各列中的特征向量,因此还必须使用相同的索引对 V 的列进行重新排序。

Ds = D(ind,ind)
Ds = 5×5

  -21.2768         0         0         0         0
         0  -13.1263         0         0         0
         0         0   13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   65.0000

Vs = V(:,ind)
Vs = 5×5

    0.0976   -0.6330   -0.2619    0.6780   -0.4472
    0.3525    0.5895   -0.1732    0.3223   -0.4472
    0.5501   -0.3915    0.3915   -0.5501   -0.4472
   -0.3223    0.1732   -0.5895   -0.3525   -0.4472
   -0.6780    0.2619    0.6330   -0.0976   -0.4472

        (V,D) 和 (Vs,Ds) 都会生成 A 的特征值分解。A*V-V*D 和 A*Vs-Vs*Ds 的结果一致(基于舍入误差)。

e1 = norm(A*V-V*D);
e2 = norm(A*Vs-Vs*Ds);
e = abs(e1 - e2)
e = 1.2622e-29

左特征向量

        创建一个 3×3 矩阵。

 A = [1 7 3; 2 9 12; 5 22 7];

        计算右特征向量 V、特征值 D 和左特征向量 W。

[V,D,W] = eig(A)
V = 3×3

   -0.2610   -0.9734    0.1891
   -0.5870    0.2281   -0.5816
   -0.7663   -0.0198    0.7912

D = 3×3

   25.5548         0         0
         0   -0.5789         0
         0         0   -7.9759

W = 3×3

   -0.1791   -0.9587   -0.1881
   -0.8127    0.0649   -0.7477
   -0.5545    0.2768    0.6368

        验证结果是否满足 W'*A = D*W'。

W'*A - D*W'
ans = 3×3
10-13 ×

   -0.0444   -0.1066   -0.0888
   -0.0011    0.0442    0.0333
         0    0.0266    0.0178

        在理想情况下,特征值分解可满足此关系。由于 eig 使用浮点计算执行分解,那么 W'*A 可最大程度接近 D*W'。换言之,W'*A - D*W' 接近但不等于 0。

不可对角化(亏损)矩阵的特征值

        创建一个 3×3 矩阵。

A = [3 1 0; 0 3 1; 0 0 3];

        计算 A 的特征值和右特征向量。

[V,D] = eig(A)
V = 3×3

    1.0000   -1.0000    1.0000
         0    0.0000   -0.0000
         0         0    0.0000

D = 3×3

     3     0     0
     0     3     0
     0     0     3

        A 包含重复特征值,且特征向量非独立。这意味着 A 不可对角化,因此为亏损矩阵。

        尽管 A 为亏损矩阵,仍验证 V 和 D 是否满足方程 A*V = V*D。

A*V - V*D
ans = 3×3
10-15 ×

         0    0.8882   -0.8882
         0         0    0.0000
         0         0         0

        在理想情况下,特征值分解可满足此关系。由于 eig 使用浮点计算执行分解,那么 A*V 可最大程度接近 V*D。换言之,A*V - V*D 接近但不等于 0。

广义特征值

        创建两个矩阵(A 和 B),然后求解对组 (A,B) 的特征值和右特征向量的广义特征值问题。

A = [1/sqrt(2) 0; 0 1];
B = [0 1; -1/sqrt(2) 0];
[V,D]=eig(A,B)
V = 2×2 complex

   1.0000 + 0.0000i   1.0000 + 0.0000i
   0.0000 - 0.7071i   0.0000 + 0.7071i

D = 2×2 complex

   0.0000 + 1.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 - 1.0000i

        验证结果是否满足 A*V = B*V*D。

A*V - B*V*D
ans = 2×2

     0     0
     0     0

残差 A*V - B*V*D 精确为零。

病态矩阵使用 QZ 算法得出广义特征值

        创建病态对称矩阵,其包含的值接近计算机精度。

format long e
A = diag([10^-16, 10^-15])
A = 2×2

     1.000000000000000e-16                         0
                         0     1.000000000000000e-15

        使用默认算法计算广义特征值和一组右特征向量。在这种情况下,默认算法为 'chol'。

[V1,D1] = eig(A,A)
V1 = 2×2

     1.000000000000000e+08                         0
                         0     3.162277660168380e+07

D1 = 2×2

     9.999999999999999e-01                         0
                         0     1.000000000000000e+00

现在,使用 'qz' 算法计算广义特征值和一组右特征向量。

[V2,D2] = eig(A,A,'qz')
V2 = 2×2

     1     0
     0     1

D2 = 2×2

     1     0
     0     1

        检查 'chol' 结果满足 A*V1 = A*V1*D1 的程度。

format short
A*V1 - A*V1*D1
ans = 2×2
10-23 ×

    0.1654         0
         0   -0.6617

        现在,检查 'qz' 结果满足 A*V2 = A*V2*D2 的程度。

A*V2 - A*V2*D2
ans = 2×2

     0     0
     0     0

        当两个矩阵均为对称矩阵时,eig 默认使用 'chol' 算法。在这种情况下,QZ 算法可返回更精确的结果。

一个矩阵为奇异矩阵的广义特征值

        创建一个 2×2 单位矩阵 A 和一个奇异矩阵 B。

A = eye(2);
B = [3 6; 4 8];

        如果尝试用命令 [V,D] = eig(B\A) 计算矩阵 B^−1A 的广义特征值,则 MATLAB® 会返回错误,因为 B\A 会生成 Inf 值。

        在这种情况下,应将上述两个矩阵传递给 eig 函数,计算广义特征值和右特征向量。

[V,D] = eig(A,B)
V = 2×2

   -0.7500   -1.0000
   -1.0000    0.5000

D = 2×2

    0.0909         0
         0       Inf

        最好是分开传递两个矩阵,并让 eig 选择求解该问题的最佳算法。在这种情况下,eig(A,B) 会返回一组特征向量和至少一个实数特征值,尽管 B 不可逆。

        验证第一个特征值和第一个特征向量是否满足 

eigval = D(1,1);
eigvec = V(:,1);
A*eigvec - eigval*B*eigvec
ans = 2×1
10-15 ×

    0.1110
    0.2220

        在理想情况下,特征值分解可满足此关系。由于分解是使用浮点计算完成的,那么 A*eigvec 可最大程度接近 eigval*B*eigvec,本例中确实如此。

提示

  • ​eig 函数可以计算实数对称稀疏矩阵的特征值。要计算稀疏矩阵的特征向量或计算非实数对称稀疏矩阵的特征值,请使用 eigs 函数。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/911580.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解单位根:如何通过单位根检验分析序列的平稳性

在时间序列分析中,平稳性是至关重要的概念。大多数时间序列模型(如 ARMA 模型)都假设序列是平稳的,即其统计特性(均值、方差、自相关性)不随时间变化。然而,许多实际数据并不满足这一条件&#…

书生大模型第三关Git 基础知识

关卡编号:L0G3000 任务一 破冰行动 fork仓库,注意这里不要勾选Copy branch Only!!!,因为后面课程中会使用到class分支: 克隆仓库: 移动分支: 创建自己的分支: 创建id.md文档,…

由中文乱码引来的一系列学习——Qt

前言 解决中文引起的乱码,并不难,网上一搜就有好几个方法任君选择,但是解决乱码的这些方法的原理是什么,我一直没太明白。 这次项目需要在Android环境下运行,而根据Qt跨平台的特性,我一般是在Windows环境…

python基础——05函数

一、函数 1.1 函数定义 函数定义:实现特定功能的代码块 函数的作用: 简化代码提高代码重用性便于维护和修改可提高代码的可拓展性 函数三要素:功能、参数、返回值 函数定义的语法格式: 函数分类: 从定义的角度—…

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器)

1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式(单次和连续) 4.ADC的扫描模式的转换模式(单次和连续) 5.采集校准 代码实验:

GaussDB的向量化处理技术

本文将深入探讨GaussDB中的向量化处理技术,涵盖其常见特性和实际应用。先详细介绍存储数据和即时数据(正在处理的数据)的按列组织格式,并阐述其优势。后通过分析SIMD(单指令多数据流)处理技术的一般原理&am…

JavaScript猜数游戏小游戏

1.由系统生成一个1-100的随机整数。 2.提示用户输入一个1-100的整数,并将用户输入的数转换为整数。 3.将用户输入的数与随机生成的数进行比较,如果相等提示猜对了;否则给出提示,帮询问用户是否继续游戏。 4.如果用户在提示框中…

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发:指异步代码在执行到一定程度后会被…

C++builder中的人工智能(12):了解ELU(Exponential Linear Unit)——人工神经网络中的激活函数

在这篇文章中,我们将解释什么是指数线性单元(ELU),以及如何利用ELU激活函数。通过学习这些知识,你将能够使用C软件创建C应用程序。 我们需要了解哪些关于激活函数的知识? 激活函数(phi()&#…

Spark中的宽窄依赖-宽窄巷子

1、什么是依赖关系? 2、什么是宽窄依赖? 窄依赖:Narrow Dependencies 定义:父RDD的一个分区的数据只给了子RDD的一个分区 【不用经过Shuffle】 特点:一对一或者多对一,不经过Shuffle,性能相对…

Scrapy入门

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 安装scrapy pip install scrapy2.5.0 1.新建 Scrapy项目 scrapy startproject mySpider # 项目名为mySpider 2.进入到spiders目录 cd mySpider/mySpider/spiders 3.创建爬虫 scrapy gensp…

C++ 继承:代码传承的魔法棒,开启奇幻编程之旅

文章目录 一.继承的概念及定义1.1继承的概念1.2继承类1.2.1继承方法 1.3继承模板 二.基类和派生类的转换三.继承中的作用域四.派生类的默认成员函数4.1默认成员函数的行为4.2实现一个无法被继承的类 五.继承与友元六.继承与静态成员七.多继承和菱形继承7.1多继承和菱形继承7.2虚…

Liunx:文件fd、重定向、管道

文件fd: 操作系统运行中一定存在着许多被打开的文件,这些文件需要被管理。一个进程会打开若干个文件。一个文件如果在操作系统中被打开,那么必须给该文件创建一个文件对象,包含被打开文件的各种属性。那么进程与文件的关系就变成…

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 💯OpenAI官方提示词分析案例一:制定教学计划案例二&…

干部谈话考察系统:革新传统,精准高效

在干部选拔任用和考核评价的过程中,谈话考察一直是关键环节之一。然而,传统的谈话考察方式却面临着诸多痛点,严重影响了干部考察工作的质量和效率。干部谈话考察系统的出现,为解决这些问题提供了有力的武器。 一、传统谈话考察的…

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头,但以;结束,长度不限 3、以#开头,不以;结束,也不包含;,长…

轨迹规划中优化预测:学习多个初始解的优化器

Abstract 在许多应用中,如机器人控制、自动驾驶和投资组合管理,需要在严格的运行时间限制下连续地解决相似的优化问题。在这种情况下,局部优化方法的性能对初始解的质量非常敏感:不良的初始化可能会导致收敛缓慢或得到次优解。为…

Xserver v1.4.2发布,支持自动重载 nginx 配置

Xserver——优雅、强大的 php 集成开发环境 本次更新为大家带来了更好的用户体验。 🎉 下载依赖组件时,显示进度条,展示下载进度。 🎉 保存站点信息和手动修改 vhost 配置文件之后,自动重载 nginx 配置 &#x1f41e…

idea 基础简单应用(java)

Java IDE(集成开发环境)的使用方法因不同的IDE而异,但通常都包含一些基本的操作和功能。以下以IntelliJ IDEA这一流行的Java IDE为例,介绍Java IDE的基本使用方法与指南: 一、下载与安装 请点击观看 idea免费安装步…

Notepad++ 更改字体大小和颜色

前言 在长时间编程或文本编辑过程中,合适的字体大小和颜色可以显著提高工作效率和减少眼睛疲劳。Notepad 提供了丰富的自定义选项,让你可以根据个人喜好调整编辑器的外观。 步骤详解 1. 更改字体大小 打开 Notepad 启动 Notepad 编辑器。 进入设置菜…