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




  

相关话题

  许多人认为「学计算机吃青春饭」,为什么还那么多人学呢? 
  我是一个几乎没有计算机知识的人,怎样入门计算机? 
  在 linux 中,用 c 语言如何判断 yum 源是否配置好? 
  为什么操作系统不能屏蔽底层的架构(arm,x86,mips),为应用软件提供一个统一的运行环境呢? 
  很好奇,为什么软件要直接运行在CPU上? 
  有哪些计算机术语的翻译,让你第一次学的时候感到十分别扭? 
  为什么说 Gmail 达到了前端技术的最尖端? 
  为什么欧洲分子生物实验室的DNA存储选择了三进制? 
  为什么计算机科学中的神经网络模型得出来的结果被认为是科学的,而中医诊断却不被认为是科学的? 
  图中左边的电路在计算机内部为实现某个功能而常被使用,这个电路名字叫啥? 

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





© 2024-06-16 - tinynew.org. All Rights Reserved.
© 2024-06-16 - tinynew.org. 保留所有权利