关于求解稀疏矩阵方程A*B=C
#1
中科流氓
发表于 08-18-2011 - 09:40
精准.石油.论坛 forum.petro-china.com
之前有人建议用pardiso,pardiso虽然可以直接解B,但是要求B,C都是采用全矩阵存储
B(n,n),C(n,n),而我希望是采用压缩存储。
也有人建议先转为求解A*x=b,解出B的第一列,保存非零元于一个链表中,再解第二列,
把求解出的非零元按照列优先插入链表中,,,,这样求解到后面几列时链表已经很大
,再遍历插到合适位置是非常占用时间的。
大家有没有遇到过这种A*B=C的稀疏矩阵方程,都是怎么处理的?
补充一下,A,B,C都是25000*25000, 其中A,C稀疏度为1.3%左右,B为19%左右
用一句话概况下我的问题:
A*B=C,都是稀疏矩阵,采用CSR压缩格式,如何求解B。
逐步求出B的每一列再进行转置是非常消耗时间的。
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#2
cced
发表于 08-18-2011 - 11:52
精准.石油.论坛 forum.petro-china.com
可以对矩阵采用压缩列存储格式,这样可以很方便的取出C的一列。这样每次求解完成一个B分量后可以很方便的保存结果。这个完全不用链表。
最终B一般来说是满矩阵,你那个19%的估计意义不大。因为比较大的矩阵都是迭代算法,结果是近似结果,很难保证结出的结果有很多零。如果你简单的将很小的数舍弃是很危险的,大大降低精度。
因为你总是对A进行求解,可以对A进行近似分解作为preconditioner,可以重复用25000遍,再套用一些简单solver,主要就是一些非常稀疏矩阵向量相乘。25000*25000的矩阵很小,求解很快。
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#3
中科流氓
发表于 08-18-2011 - 14:51
精准.石油.论坛 forum.petro-china.com
多谢您这么详细的回答,您几乎是考虑到了求解过程的每一步,您提出的压缩列存储格式对我启发很大,我目前solver采用的是Intel pardiso,我看看pardiso能不能采用压缩列存储格式,或者其他函数库可以这么做的。您提出的先对A做分解然后重复利用,也是很好的思路。
再次感谢您热心的回复
引用框(cced @ 08-18-2011 - 11:52)
可以对矩阵采用压缩列存储格式,这样可以很方便的取出C的一列。这样每次求解完成一个B分量后可以很方便的保存结果。这个完全不用链表。
最终B一般来说是满矩阵,你那个19%的估计意义不大。因为比较大的矩阵都是迭代算法,结果是近似结果,很难保证结出的结果有很多零。如果你简单的将很小的数舍弃是很危险的,大大降低精度。
因为你总是对A进行求解,可以对A进行近似分解作为preconditioner,可以重复用25000遍,再套用一些简单solver,主要就是一些非常稀疏矩阵向量相乘。25000*25000的矩阵很小,求解很快。
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#4
中科流氓
发表于 08-29-2011 - 10:58
精准.石油.论坛 forum.petro-china.com
谢谢
引用框(cced @ 08-18-2011 - 11:52)
可以对矩阵采用压缩列存储格式,这样可以很方便的取出C的一列。这样每次求解完成一个B分量后可以很方便的保存结果。这个完全不用链表。
最终B一般来说是满矩阵,你那个19%的估计意义不大。因为比较大的矩阵都是迭代算法,结果是近似结果,很难保证结出的结果有很多零。如果你简单的将很小的数舍弃是很危险的,大大降低精度。
因为你总是对A进行求解,可以对A进行近似分解作为preconditioner,可以重复用25000遍,再套用一些简单solver,主要就是一些非常稀疏矩阵向量相乘。25000*25000的矩阵很小,求解很快。
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#6
cced
发表于 08-31-2011 - 02:07
精准.石油.论坛 forum.petro-china.com
引用框(中科流氓 @ 08-28-2011 - 20:02)
网上看到有sparskit2,只是看到这方面的介绍,没有找到Linux下面安装文件
还有国产的gss,据说10w阶以下免费试用,不知靠谱不?
solver: GMRES or BiCTstab
preconditioner: sparselib++ 1.7
Not the best, but all free and reasonably good.
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#7
#8
#10
shaopizi
发表于 10-01-2011 - 01:56
精准.石油.论坛 forum.petro-china.com
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平
#11
中科流氓
发表于 01-04-2012 - 21:09
精准.石油.论坛 forum.petro-china.com
shaopizi, on 10-01-2011 - 01:56, said:
很抱歉直到今天才看到您的回帖。
我现在还在用pardiso求解,内存消耗非常巨大,不知道其他求解器怎么样,自己写的有时候很难达到所需要的精度。
----
来源: 精准石油论坛 - 推进信息共享,提升科技水平

登录
注册
帮助


多重回复