百科问答小站 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的稀疏矩阵与稀疏特征值求解书籍。力图简单也可以看以下文章:




  

相关话题

  重做系统后硬盘检测不到谁的责任? 
  在北美(加拿大,美国)IT程序员是青春饭么? 
  在 linux 中,用 c 语言如何判断 yum 源是否配置好? 
  突然产生一个想法,本人是学计算机的一个妹子,录视频会有人看吗? 
  搜索引擎给出完全相同的两个结果,但一个是广告链接,另一个才是正常结果,你会选择哪个呢? 
  笔记本散热排出的气主要是什么成分,有毒吗? 
  为什么小时候去计算机教室要穿鞋套? 
  如何去除立体声,或是有怎样买到不是立体声的耳机? 
  品胜是如何成为国内数码配件的龙头品牌的? 
  就代码能力和开发经验来说,姚期智是不是根本就不如稍微有三到四年开发经验的程序员? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利