几种求逆矩阵的方法总结,以Matlab语言为例

0 引言
最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果,特别是阶数很高的方阵,一些库中的算法为了使计算速度提升,用了非常规方法。这里整理了3种常用的矩阵求逆方法,伴随矩阵法、LU分解法和高斯消元法,并用Matlab进行了实现,一些过程参考了NET博文:
1 简单描述+函数实现
伴随矩阵法
对于一个矩阵A,如果它的伴随矩阵存在,并且A的行列式不为零,那么A的逆矩阵等于它的伴随矩阵除以A的行列式。
设A是一个n阶矩阵,其伴随矩阵为A*。那么A的逆矩阵为 A − 1 A^{-1} A−1,根据公式:
A − 1 = A ∗ / ∣ A ∣ A^{-1} = A* / |A| A−1=A∗/∣A∣
其中,|A|表示A的行列式。
因此,如果你已经求得了矩阵A的伴随矩阵A*,并且知道A的行列式|A|不为零,那么你可以通过上述公式来求得A的逆矩阵A^(-1)。
% 伴随矩阵法求逆矩阵
function value = inv_Adjoint(matrixA,tol)
As = size(matrixA);
N = As(1);
if(nargin < 2)
tol = 1e-15;end
if( abs(det(matrixA)) < tol )
msg ='the matrix is not full rank';
error(msg);
end
bb = adjoint(matrixA); % 伴随矩阵法
d = det(matrixA); % 矩阵的行列式子
value = bb/d;
end
LU分解法;
LU分解是一种将矩阵分解为一个下三角矩阵和一个上三角矩阵的方法。这种分解方法可以有效地将矩阵求逆的计算量减少一半。具体步骤如下:
- 将原矩阵表示为A = LU,其中L是一个下三角矩阵,U是一个上三角矩阵。
- 解下三角矩阵方程LY = I,其中Y是一个列向量,I是单位矩阵。
- 解上三角矩阵方程UX = Y,其中X是一个列向量。
- 求解出的X就是原矩阵A的逆矩阵。
这种方法的好处是可以避免直接使用矩阵求逆的方法,提高计算精度。由于LU分解方法是通过矩阵的分解来求逆,因此可以在一定程度上避免了矩阵求逆时可能出现的数值不稳定性。
然而,需要注意的是,当原矩阵的行列式为0时,即矩阵不可逆时,LU分解方法无法计算逆矩阵。在这种情况下,我们需要采用其他方法来求解。
总结起来,对于矩阵求逆,LU分解是一种精度较高的方法。它通过将矩阵分解为下三角矩阵和上三角矩阵来进行计算,从而提高了计算精度,并且避免了一些数值不稳定性的问题。
% LU分解求逆
function value = inv_lu(matrixA,tol)
As = size(matrixA);
N = As(1);
value = zeros(N,N);
if(nargin < 2)
tol = 1e-15;end
if( abs(det(matrixA)) < tol )