[摘自SMTH]稀疏矩阵求逆讨论

 发信人: lingruoxuan (lingruoxuan), 信区: Num_Analysis
标  题: [摘自SMTH]稀疏矩阵求逆讨论
发信站: 日月光华 (2004年08月11日21:05:20 星期三), 站内信件

来源:HTTP://BBS.SMTH.EDU.CN  NUMCOMP
水木清华之数值版
[合集] matlab中好像对稀疏矩阵求逆的处理没有特殊方法
>>难道还是高斯消去法?那大型的不是要求死啊
help GMRES
BICG
BICGSTAB
CGS
QMR
.......
>>高斯消去算个10来阶的小矩阵还成,算大了一定出问题!
>>求逆就是用解方程AX=I来求?
>>求逆的复杂度总是很大,能少用就少用
Ax=ei   (1=<i<=n)
把解得的xi按顺序拼成一个矩阵就完了。。
>>这样看来跟求一个方程的复杂度一样了啊。矩阵是正定对称稀疏矩阵,现在的情况
是不但要求,而且维数还非常的大。麻烦啊
>>对称正定的稀疏矩阵很好办啊,用LU分解就可以了。
如果维数实在太大,比如超过10^4量级,那就只能用
共轭梯度法之类的迭代法求解了。
>>你觉得LL’分解不会破坏矩阵的稀疏性么——如果矩阵不是带状的话?
而且数值稳定性也有问题。
>>会啊,会产生注入元,不过一般不是很多,
可以通过预测的方法事先得出注入元的位置,形成稀疏矩阵的时候
保留下这些空位。
>>这个好像不是很可行,能说得仔细点么?
>>这个如果用二维链表的存储方式倒是好办,Fortran 77里面就麻烦一些了,
不过也是可以实现的。主要是通过不完全模拟一次LU分解过程,计算出注
入元的位置。
我去年花了很长时间写了一个稀疏矩阵类库,可以说专门用于解线性方程
组相关问题的,就是用的这种方法,另外自己做了一个内存管理的模块,
整体效果非常好。不过我的领域稀疏矩阵的规模一般不是很大,一般不会
超过10000维。
维数再多就不知道效果怎么样了。
>>嗯。。对于一些注入元不是很多的矩阵这应该是个好办法。
但是对于有些矩阵,LU分解后可能就把整个矩阵充满了。~
这是比较郁闷的事情。。
>>求逆一般是不可取的,无需多说。但稀疏矩阵的直接解法还是不少的。基本上都是对
矩阵进行重新排序以期减少填充或运算量。
在matlab里面,有许多算法可以利用:
colamd, colmmd, colperm, spparms, symamd, symmmd, symrcm.
根据是否对称,采用LU分解或者chol分解。
这些算法在internet上搜一下,很多都有相应的C或fortran版本。
稀疏矩阵的存储最常见的是压缩列(行)存储,最近发现一种利用hash表来存储的,其
存取复杂度是O(1),很是不错。有幸趣的可以看看下面网页咯,作者提供了源程序。
http://www.informatik.hs-bremen.de/~brey/
>>对于带状的稀疏矩阵 <matrix computations>里面介绍了一些很巧妙的数据结构。
同时推荐一个网址,资源还是很丰富的。不知道前面是不是有人推荐过了。。
http://math.nist.gov/MatrixMarket/
>>事实上Hash表存储的效率也跟Hash算法有关,弄不好的话,不见得比直接按行或者列

>>我对这个了解并不深。
那个网页上的程序利用的是stl的hashtable和自己实现两种方法,效率还是可以的,并
且附有一个效率比较的程序。
另外,从hash表的初衷来看,应该是规模越大,效率越高才对。压缩列(行)存储的存
取效率才会随规模增大而降低。
hash表存储直接用于计算估计不会太好,毕竟现有的程序大多是用压缩列存储。但利用
它编程会很方便,就像matlab里面的稀疏矩阵一样。并且hash表和压缩列存储的相互转
换很容易,可以很方便地调用现有的稀疏矩阵软件包。
>> 维数再多还是用不完全LU分解预处理+CG or Gmres
我一个同学这么求过200W阶的矩阵
>>各种各样的预处理+GMRES是现在解决大规模稀疏矩阵的主力方法。。


--
>>天空依然阴霾,>>
    >>依然有鸽子在飞翔.>>
※ 来源:·日月光华 bbs.fudan.edu.cn·[FROM: 10.85.12.89]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值