矩阵求逆的几种方法

news2024/11/18 9:36:50

1. 定义

        对于矩阵的运算中定义了加减法、乘法(包含数乘)但未定义矩阵除法,可以简单认为矩阵的逆即为矩阵除法。矩阵求逆是线性代数中的一个重要概念,在很多应用领域都有广泛的应用。对于一个给定的方阵 ( A ),如果存在另一个方阵 ( B ) 使得 ( AB = BA = E ),其中 ( E ) 是单位矩阵,那么我们称 ( B ) 为 ( A ) 的逆矩阵,并记作( A^{-1} ) 。在实际中若要手工计算方阵的逆矩阵,这个矩阵超过3维就很困难了,一般实际情况都是使用MATLAB这类软件来计算方阵的逆,但在MATLAB这类软件中提供了多种方法,究竟应该选择哪种方法了?这就需要对相关的求逆矩阵原理做进一步了解。

2. 直接法

2.1. 伴随矩阵法矩阵逆

通过伴随方阵计算矩阵的逆,成功地将行列式引入到了矩阵运算里面,但这里面的计算复杂度极高,需要计算n^2+1个行列式,大多数情况仅用于2阶或者3阶矩阵求逆。虽然有通过伴随矩阵计算矩阵的逆计算复杂度过高,但可以快速判断一个方阵是否可逆,仅仅通过计算该方阵的行列式结果是否为零就能判断此方阵是否可逆。

2.1.1. 证明

A^{-1} = \frac{1}{\text{det}(A)} \cdot \text{adj}(A)

2.1.2. 算复杂度分析

        对于一个 𝑛×𝑛 的矩阵 𝐴,伴随矩阵法首先需要计算矩阵的每一个代数余子式。对于一个 𝑛×𝑛 的矩阵 𝐴,伴随矩阵法首先需要计算矩阵的每一个代数余子式。

        计算一个 n×n 矩阵的行列式的计算复杂度是 O(n!) 使用递归定义或 O(n3)O(n^3)O(n3) 使用高斯消元法等方法。

        伴随矩阵法(或称为伴随法)是一种理论上可以用于求解矩阵逆的经典方法,但在实际应用中,由于其计算复杂度较高,通常不作为计算逆矩阵的首选方法。尽管如此,伴随矩阵仍然有理论研究价值。

2.2. 高斯-约旦消元法

2.2.1. 证明

        对于A是一个n×n 的可逆方阵,首先构造一个新的矩阵[A | E],即将矩阵 A 和同维度的单位矩阵 E 拼接在一起,这里构造的新矩阵可以分块成A和与A同型的E,对于新矩阵乘以矩阵的逆,再根据分块矩阵乘法的性质:

A^{-1}[A | E] =[E | A^{-1}]

        这里将矩阵A变成单位矩阵,同时单位矩阵就变成了A的逆矩阵。

        计算步骤如下:

    • 前向消元:通过初等行变换将矩阵 𝐴的左下部分消为 0,使其变为上三角矩阵
    • 归一化:将主对角线上的元素归一化为 1
    • 后向消元:继续进行初等行变换,使得左侧矩阵成为单位矩阵

2.2.2. 计算复杂度分析

        高斯-约旦消元法的计算复杂度取决于矩阵的维度 𝑛和进行的初等行变换操作的次数。我们通过逐步分析每个阶段的操作来推导它的计算复杂度

2.3. 特征值分解法求逆矩阵

2.3.1. 证明

        对于一个 𝑛×𝑛 的可逆矩阵 𝐴,如果它可以特征值分解,那么可以将它写成如下形式:

A=P\Lambda P^{-1}

        其中:

  • P 是矩阵 𝐴 的特征向量组成的矩阵(每个特征向量为一列),
  • Λ 是矩阵 𝐴的特征值构成的对角矩阵,且对角线上是矩阵 𝐴的特征值。

        矩阵 𝐴的逆矩阵是:

A^{-1}=(P\Lambda P)^{-1}\\ A^{-1}=P^{-1}\Lambda ^{-1}P

        计算步骤:

    • 步骤1:计算矩阵的特征值和特征向量
    • 步骤2:求特征值的倒数,构造对角阵
    • 步骤3:计算逆矩阵

2.3.2. 计算复杂度分析

        使用特征值分解法求逆矩阵分为三个步骤,首先需要计算矩阵的特征值与特征向量,通常使用QR算法计算矩阵特征值与特征向量, 时间复杂度是O(n^3),这是因为在每次 QR 分解迭代中需要进行O(n^2)的计算,而 QR 算法通常需要迭代 O(n) ;其次对构造对角阵,相对较为容易仅仅需要计算每个矩阵的特征值的倒数即可,时间复杂度为O(n);最后通过矩阵乘法求逆,其中有两次矩阵乘法,对于矩阵乘法P^{-1}\Lambda ^{-1}由于是与对角阵相乘时间复杂度稍小为O(n^2),对于矩阵乘法
(P^{-1}\Lambda ^{-1})P为普通矩阵乘法时间复杂度为O(n^3),将这两部分加起来求最大值最终时间复杂度为O(n^3)。特征值分解法求逆矩阵将这三部分加起来为整体的时间复杂度:O(n^3)+O(n)+O(n^3)=O(n^3)

3. 迭代法

        迭代法求逆矩阵是通过反复迭代来逐步逼近矩阵的逆矩阵,而不是通过直接分解或高斯消元来求解。这种方法在求解大规模稀疏矩阵时尤其有用,因为迭代方法可以避免大规模矩阵的复杂直接运算,并通过迭代逐渐逼近精确解。

3.1. 牛顿-舒尔兹迭代法(Newton-Schulz Iteration)

        牛顿-舒尔兹迭代法是用于计算矩阵逆的迭代算法之一。它的基本思想是从一个初始猜测矩阵出发,通过不断的矩阵更新来逼近矩阵的逆。

        计算步骤:

  • 初始猜测矩阵 : 选择一个初始猜测矩阵X_0,使得 X_0是矩阵 A逆矩阵的初始近似值
  • 迭代 :X_{k+1}=X_k(2I-AX_k)
  • 停止迭代:继续迭代,直到

        计算复杂度分析: 每次迭代需要执行矩阵乘法O(n^2)次,总的复杂度取决于迭代次数。假设需要 k次迭代,则总复杂度为O(k \cdot n^2)。在稀疏矩阵的情况下,矩阵乘法的复杂度会进一步降低。

3.2. 幂迭代法

        幂迭代法是基于幂方法的一种迭代求逆矩阵的方法。它是通过逐次迭代的方法来逼近矩阵的逆,而不需要对矩阵进行直接分解。

        计算复杂度分析: 复杂度与牛顿-舒尔兹迭代法类似,每次迭代的复杂度为O(n^2),总复杂度依赖于迭代次数。

3.3. 最小残差法(MINRES)

        最小残差法是一种 Krylov 子空间方法,常用于求解大规模稀疏矩阵的线性方程组。当

是目标时,最小残差法通过逼近解来逐步逼近逆矩阵。

计算复杂度分析: 每次迭代的复杂度为A^{-1}

4. MATLAB求矩阵逆

4.1. 使用 inv 函数

A = [1, 2; 3, 4];
A_inv = inv(A);

4.2. 使用矩阵左除(\)或右除(/)运算符

A = [1, 2; 3, 4];
B = eye(2);  % 单位矩阵
A_inv = A \ B;

该方法在数值稳定性上比 inv 函数更好。

4.3. 使用 rref 函数

A = [1, 2; 3, 4];
augmentedMatrix = [A eye(size(A))];
rrefMatrix = rref(augmentedMatrix);
A_inv = rrefMatrix(:, 3:4);

4.4. 使用 lu 函数

A = [1, 2; 3, 4];
[L, U] = lu(A);
I = eye(size(A));
y = L \ I;  % 先解 Ly = I
A_inv = U \ y;  % 再解 Ux = y

5. 总结

方法

基本原理

优点

缺点

计算复杂度

MATLAB方法

伴随矩阵法

单通代数余子式与行列式来计算逆矩阵

通用理论,用于教学以及可逆性判定

计算复杂,数值不稳定

O(n^4)

高斯-约旦法

高斯消元法,分块矩阵乘法

直观适合手工计算

对大规模矩阵效率较低,数值稳定性一般

O(n^3)

rref

特征值分解

将矩阵 AAA 分解为
A= P \Lambda P^{-1}

,通过特征值的倒数构造A^{-1}

适合对角化矩阵,分析结构清晰。

仅适用于可对角化矩阵,计算复杂度高。

O(n^3)

lu

迭代

寻找近似值

适合大规模稀疏矩阵,尤其适用于并行计算。

需要好的初始值,否则收敛较慢或不收敛。

O(n^2)*k

手工实现

6. 参考资料

MATLAB官方参考文档:https://www.mathworks.com/help/matlab/ref/

inv:inv - 矩阵求逆 - MATLAB

rref: rref - Reduced row echelon form (Gauss-Jordan elimination) - MATLAB

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全志A133开发板安卓系统调试串口复用成普通串口方法-触觉智能EVB1309

本文介绍了在开发板/主板串口接口不够的情况下,可将调试串口改为普通串口使用,下面为大家分享修改方法。基于触觉智能EVB1309开发板演示,搭载全志A133芯片,具有高性能超低功耗优势,待机功耗低至15mW。 1、内核配置 源…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址:192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP,将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…

【HTTP 和 HTTPS详解】3

HTTP 状态代码 HTTP 状态代码是服务器发送给客户端的三位数字,用于指示客户端请求的结果。它们分为五类:信息性(100-199)、成功(200-299)、重定向(300-399)、客户端错误&#xff08…

【java笔记】 5 接口使用举例

// 导入Swing库中的消息对话框组件 import javax.swing.*; // 定义一个Circle类,该类实现了ShapeInterface接口 public class Circle implements ShapeInterface { // 定义一个私有变量radius来保存圆的半径 private double radius; // 默认构造函数,初…

第十一章 Java多线程--阻塞队列--PriorityBlockingQueue

目录 一、PriorityBlockingQueue基础概念 主要特点 常用方法 使用示例 二、PriorityBlockingQueue深入了解 1 PriorityBlockingQueue介绍 2 二叉堆结构介绍 3 PriorityBlockingQueue核心属性 4 PriorityBlockingQueue的写入操作 4.1 offer基本流程 4.2 offer扩容操作…

【伺服】Servo入坑学习记录①

前言 这是一个自我摸索的过程,如果有什么良好的、或严厉的批评和建议,恳请指教, 万分感谢经典控制理论中,有几个重要的概念和工具,用于分析和设计控制系统。以下是对 传递函数、伯德图、奈奎斯特图、稳定裕度 和 带宽 …

【Elasticsearch】-文本向量化

由于使用了QAnything 本地知识库应答平台 内部已集成Embedding 文本向量化服务,因此不在单独部署。 基于 transformers 如果需要单独部署,可以参看 BCEmbedding/README_zh.md at master netease-youdao/BCEmbedding GitHub 从启动脚本中可以看出&am…

脚手架是什么?详细版+通俗易懂版!!!!!!

脚手架(Scaffolding)在软件开发领域,特别是在前端开发和全栈开发环境中,是一个术语,用来描述一个辅助工具或框架,它旨在帮助开发者快速搭建项目的基础结构和开发环境。这些基础结构可能包括项目的目录结构、…

Android Input系统原理一

1. getevent 命令使用 getevent -h getevent -lrt-t 表示事件发生时间 -l label event types and names in plain text 表示把event事件类型名字打出来 -r 显示一下接受事件速率130|console:/ # getevent -lrt could n…

aloam框架laserMapping.cpp源码解读

一、详细源码解读 #include <math.h> #include <vector> #include <aloam_velodyne/common.h> #include <nav_msgs/Odometry.h> #include <nav_msgs/Path.h> #include <geometry_msgs/PoseStamped.h> #include <pcl_conversions/pcl_c…

动手学深度学习8.7. 通过时间反向传播-笔记练习(PyTorch)

本节课程地址&#xff1a;本节无视频 本节教材地址&#xff1a;8.7. 通过时间反向传播 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>bptt.ipynb 通过时间反向传播 到目前为止&…

[通义灵码] IDE 插件实现企业知识库问答

在2024杭州云栖大会上&#xff0c;随着通义大模型能力的全面提升&#xff0c;阿里云通义灵码迎来重磅升级&#xff0c;从一年前只能完成基础的辅助编程任务&#xff0c;进化到几句话就能完成需求理解、任务拆解、代码编写、修改BUG、测试等开发任务&#xff0c;最快几分钟可从0…

XSS | DOM 型 XSS 攻击

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;DOM 型 XSS —— 理论篇 DOM 全称 Document Object Model&#xff0c;使用 DOM 可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。 DOM 型 XSS 是一种特殊类型的反射型 XSS&…

系统实现悬浮窗-菜单-悬浮按钮功能

文章目录 需求&#xff1a;系统实现悬浮窗菜单功能或悬浮小球定制功能实际手机产品效果悬浮窗作用 一、实际应用场景二、应用上面实现功能思路Demo演示效果部分源码分析Service层View层View初始化view 添加到窗体悬浮球拖动重点代码&#xff1a; 三、系统上面实现功能思路系统服…

秒懂Linux之信号

目录 信号的基本概念 信号的处理方式 默认动作 自定义处理信号 忽略该信号 信号的产生方式 kill命令 键盘组合键 系统调用 软件条件 异常 信号产生的深层理解 core的功能 信号的阻塞 内核中的表示 sigset_t 信号集操作函数 sigprocmask sigpending …

do while循环

/while(条件) {满足条件执行的代码&#xff0c;循环体 } /* do 做 */ while (false) { Console.WriteLine(" while循环执行了"); } do { //循环体逻辑 Console.WriteLine("dowhile循环执行了"); } while (true); Console.ReadLine(); /* w…

数据库索引:最左匹配原则——提升数据库的查询性能

数据库索引&#xff1a;最左匹配原则——提升数据库的查询性能 1、核心要点2、实例3、建议 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库优化中&#xff0c;组合索引的使用深受最左匹配原则的影响。这一原则是提升查询效率的关键…

详细分析Nginx中的proxy_pass 末尾斜杠

目录 前言1. 基本知识2. Demo 前言 对于Nginx的讲解&#xff0c;更多推荐阅读&#xff1a; Nginx配置静态网页访问&#xff08;图文界面&#xff09;Nginx将https重定向为http进行访问的配置&#xff08;附Demo&#xff09;Nginx从入门到精通&#xff08;全&#xff09;详细分…

[Java EE] TCP 协议

Author&#xff1a;MTingle major:人工智能 Build your hopes like a tower! 文章目录 文章目录​​​​​​​ 一. TCP 协议 二. TCP 特性 1. 确认应答(ack) 2. 超时重传 3. 连接管理 三次握手 四次挥手 TCP状态 4 滑动窗口 5. 流量控制 6.拥塞控制 7. 延时应答 8.捎带应答 9…

前端性能初探

前端监控 提升稳定性&#xff0c;更快的发现异常&#xff0c;定位异常&#xff0c;解决异常&#xff0c;js错误&#xff0c;接口异常&#xff0c;资源异常&#xff0c;白屏等。 关注用户体验&#xff0c;建立性能规范&#xff0c;长期关注优化&#xff0c;页面性能&#xff0c…