矩阵求逆的几种方法

1. 定义

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

2. 直接法

2.1. 伴随矩阵法矩阵逆

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

2.1.1. 证明

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变成单位矩阵,同时单位矩阵就变成了A的逆矩阵。

计算步骤如下:

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

2.2.2. 计算复杂度分析

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

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

2.3.1. 证明

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

其中:

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

矩阵 𝐴的逆矩阵是:

计算步骤:

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

2.3.2. 计算复杂度分析

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

3. 迭代法

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

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

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

计算步骤:

  • 初始猜测矩阵 : 选择一个初始猜测矩阵,使得 是矩阵 A逆矩阵的初始近似值
  • 迭代 :
  • 停止迭代:继续迭代,直到

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

3.2. 幂迭代法

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

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

3.3. 最小残差法(MINRES)

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

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

计算复杂度分析: 每次迭代的复杂度为

4. MATLAB求矩阵逆

4.1. 使用 inv 函数

Matlab 复制代码
A = [1, 2; 3, 4];
A_inv = inv(A);

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

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

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

4.3. 使用 rref 函数

Matlab 复制代码
A = [1, 2; 3, 4];
augmentedMatrix = [A eye(size(A))];
rrefMatrix = rref(augmentedMatrix);
A_inv = rrefMatrix(:, 3:4);

4.4. 使用 lu 函数

Matlab 复制代码
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方法 |
| 伴随矩阵法 | 单通代数余子式与行列式来计算逆矩阵 | 通用理论,用于教学以及可逆性判定 | 计算复杂,数值不稳定 | | 无 |
| 高斯-约旦法 | 高斯消元法,分块矩阵乘法 | 直观适合手工计算 | 对大规模矩阵效率较低,数值稳定性一般 | | rref |
| 特征值分解 | 将矩阵 AAA 分解为 ,通过特征值的倒数构造。 | 适合对角化矩阵,分析结构清晰。 | 仅适用于可对角化矩阵,计算复杂度高。 | | lu |
| 迭代 | 寻找近似值 | 适合大规模稀疏矩阵,尤其适用于并行计算。 | 需要好的初始值,否则收敛较慢或不收敛。 | | 手工实现 |

6. 参考资料

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

inv:inv - 矩阵求逆 - MATLAB

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

相关推荐
Hiweir ·4 分钟前
word2vector训练代码详解
python·深度学习·机器学习·自然语言处理·word2vec
B站计算机毕业设计超人4 分钟前
计算机毕业设计Hadoop+PySpark深圳共享单车预测系统 PyHive 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
数据仓库·hive·hadoop·爬虫·机器学习·spark·数据可视化
新缸中之脑9 分钟前
神经网络修剪实战
人工智能·深度学习·神经网络
奕直张不大10 分钟前
循环神经网络笔记
人工智能·笔记·rnn
在下小孙12 分钟前
——快速排序
c++·算法·排序算法
请揣满RMB19 分钟前
贪心算法介绍
c++·算法·ios·贪心算法
广东航连科技20 分钟前
RFID手持机——物联网时代的核心工具
大数据·运维·网络·数据库·人工智能·物联网·交通物流
凌峰的博客26 分钟前
大语言模型水印
人工智能·语言模型·自然语言处理
凭君语未可26 分钟前
详解前驱图与PV操作
java·网络·算法
KuaiKKyo31 分钟前
c++9月23日
开发语言·c++·算法