这是一个非常复杂的问题。可能令题主遗憾的是,目前并没有哪一种方法能在一般情况下到达最优或复杂度最低。一般会根据求解规模,问题刚性选择适合的处理。
MATLAB或者一般基于BLAS库去求逆可以分成两种情况。
一种是问题为求矩阵广义逆 ,一种是求解方程组 。这两种情况是不一样的。目前,广义逆大部分程序实现为最小二乘意义的广义逆。
直接求逆时,广泛使用的方法是SVD分解:把矩阵分解形成 的形式,中间是对角阵。对角阵的逆就是求倒数。然后左右特征阵转置乘回来就是结果: 。这种方法对稠密高刚度矩阵效果好。高刚度矩阵求逆可以舍弃部分奇异值,很方便得到近似解。
直接求逆时,如果矩阵原本是稀疏矩阵,SVD分解会带来稀疏填充。这种情况会用双LANCZOS过程去三角化原矩阵: ,对做完的三对角阵进一步LDU分解: ,最后又是对角阵求逆,把三角阵分解的特征值与LANCZOS过程的左右矩阵转置相乘就得到结果: 。
作为方程系数矩阵求逆。这个花样更多了。主要是算子分裂类和克雷洛夫子空间类两大类算法。算子分裂类就是将系数矩阵分开,构造类似不动点迭代的格式。其中最经典的是G-S迭代,也是最稳的办法,只要有解就必然能解。选主元的雅可比迭代也不会中断。一般程序用改进过的GS,比如雅可比迭代,SSOR迭代。这一类迭代器虽然基础,但现在在大规模矩阵求解中任然刚做预处理子活跃。作为算子分裂类的代表,GS,雅可比,并行LU都在不同场合广泛使用。
算子分裂解法总体上适合稠密矩阵。对于矩阵填充度不到万分之一的情况,算子分裂法会造成计算过程中大量稀疏填充,储存爆炸。这个时候会用一类克雷洛夫子空间迭代器。这种求解器会依次构造逐渐变大的求解空间,在每个空间上求解原方程投影方程,达到机器精度后停止。这种迭代器也分两枝,一类叫广义极小残余(GMRES),一类叫双正交化方法(BICG)。区别在于不变子空间下投影方程的具体构造过程。另外值得一提的是共轭梯度法(CG)就属于这一类求解器。一般能接触到的稀疏矩阵求解器,如BICGSTAB,GCR,QMR,GMRES(m)各种各样的都属于这两类。
现在求逆研究的热点都聚焦在并行计算,算法开发是属于上世界七八九十年代的热潮。如果题主想关注相关内容,可以去LAPACK和PETSC官网手册学习,也可以翻一下SAAD的稀疏矩阵与稀疏特征值求解书籍。力图简单也可以看以下文章: