百科问答小站 logo
百科问答小站 font logo



计算机是如何计算逆矩阵的? 第1页

  

user avatar   xie-tian-ci-5 网友的相关建议: 
      

这是一个非常复杂的问题。可能令题主遗憾的是,目前并没有哪一种方法能在一般情况下到达最优或复杂度最低。一般会根据求解规模,问题刚性选择适合的处理。

MATLAB或者一般基于BLAS库去求逆可以分成两种情况。

一种是问题为求矩阵广义逆 ,一种是求解方程组 。这两种情况是不一样的。目前,广义逆大部分程序实现为最小二乘意义的广义逆。

直接求逆时,广泛使用的方法是SVD分解:把矩阵分解形成 的形式,中间是对角阵。对角阵的逆就是求倒数。然后左右特征阵转置乘回来就是结果: 。这种方法对稠密高刚度矩阵效果好。高刚度矩阵求逆可以舍弃部分奇异值,很方便得到近似解。

直接求逆时,如果矩阵原本是稀疏矩阵,SVD分解会带来稀疏填充。这种情况会用双LANCZOS过程去三角化原矩阵: ,对做完的三对角阵进一步LDU分解: ,最后又是对角阵求逆,把三角阵分解的特征值与LANCZOS过程的左右矩阵转置相乘就得到结果: 。

作为方程系数矩阵求逆。这个花样更多了。主要是算子分裂类和克雷洛夫子空间类两大类算法。算子分裂类就是将系数矩阵分开,构造类似不动点迭代的格式。其中最经典的是G-S迭代,也是最稳的办法,只要有解就必然能解。选主元的雅可比迭代也不会中断。一般程序用改进过的GS,比如雅可比迭代,SSOR迭代。这一类迭代器虽然基础,但现在在大规模矩阵求解中任然刚做预处理子活跃。作为算子分裂类的代表,GS,雅可比,并行LU都在不同场合广泛使用。

算子分裂解法总体上适合稠密矩阵。对于矩阵填充度不到万分之一的情况,算子分裂法会造成计算过程中大量稀疏填充,储存爆炸。这个时候会用一类克雷洛夫子空间迭代器。这种求解器会依次构造逐渐变大的求解空间,在每个空间上求解原方程投影方程,达到机器精度后停止。这种迭代器也分两枝,一类叫广义极小残余(GMRES),一类叫双正交化方法(BICG)。区别在于不变子空间下投影方程的具体构造过程。另外值得一提的是共轭梯度法(CG)就属于这一类求解器。一般能接触到的稀疏矩阵求解器,如BICGSTAB,GCR,QMR,GMRES(m)各种各样的都属于这两类。

现在求逆研究的热点都聚焦在并行计算,算法开发是属于上世界七八九十年代的热潮。如果题主想关注相关内容,可以去LAPACK和PETSC官网手册学习,也可以翻一下SAAD的稀疏矩阵与稀疏特征值求解书籍。力图简单也可以看以下文章:




  

相关话题

  如何看待网传字节跳动或分拆 TikTok 为美国公司,面对「海外封杀」这会是一种有效的措施吗? 
  数字信号在物理层传输时,本质上是数字信号还是模拟信号,为什么? 
  数据期待用机械硬盘长期冷保存( 最好 20 年以上),定期通电即可,还是需要读取甚至覆写? 
  最数学的计算机科学方向有哪些? 
  人工智能是当前最好的计算机专业吗? 
  如何反驳「Powershell 比 Linux shell(bash..)好得多」这种说法? 
  电脑外接 USB,当需要拔出 USB 设备时,直接物理性拔出与「安全退出硬件并弹出媒体」有何差别? 
  精通 C++ 是种怎样的体验? 
  ”返回在函数内malloc的内存是安全的,但是容易造成问题,最好的做法是返回传入的指针。“怎么理解? 
  float类型的设计是否存在问题? 

前一个讨论
材料硕士转生物医药方向读博还是进fab做pie?
下一个讨论
机器学习里面的流形都是怎么用的?





© 2025-05-16 - tinynew.org. All Rights Reserved.
© 2025-05-16 - tinynew.org. 保留所有权利