引子
最近毕设论文中需要求解如下的稀疏矩阵方程:Ax=b,
现在采用Eigen中的SparseLDLT进行求解,无奈速度有点慢。所以开始寻找其他的求解库,找到了UMFPACK。
UMFPACK就是求解类似于Ax=b这样问题的一个库,来自佛罗里达州立大学。可以直接到http://www.cise.ufl.edu/research/sparse/umfpack/去下载对应的包然后编译得到Windows下的lib,包含到自己的工程就可以了。今天下午看了看UMFPACK的guide ,稍微总结一下。
什么是UMFPACK
UMFPACK是专门求解类似于Ax=b这样的稀疏矩阵方程的一个库,一般情况下A 是稀疏非对称的矩阵。它是基于非对称的多波前算法( Unsymmetric-pattern MultiFrontal method )对稀疏矩阵方程进行求解的。UMFPACk可以对PAQ,PRAQ,PR-1AQ 这样的矩阵进行 LU分解(L 和 U 分别是下三角矩阵和上三角矩阵,P和Q是可置换矩阵,R是对角阵) 。这里有一个概念:reduce fill-in (减少注入元),稀疏矩阵的注入元是指执行算法后从初始的零值变为非零值的那些元素。
UMFPACK现在最新的版本是5.6。UMFPACK可以再matlab 中使用,也可以用到C程序中。接下来我们主要介绍如何在C程序中使用。
如何在C中使用UMFPACK
根据稀疏矩阵的非零元素个数以及是否实数,UMFPACK主要提供以下几个种类的函数供调用:
1.umfpack_di_*: 非零元素的个数为 int 型,元素为实数
2.umfpack_dl_*: 非零元素的个数为 SuiteSparse_long型,元素为实数
3.umfpack_zi_*: 非零元素的个数为 int 型,元素为复数
4.umfpack_zl_*: 非零元素的个数为 SuiteSparse_long型,元素为复数
根据不同的情况可调用不同的函数,接下来我们就来看看 上述函数中的 * 都代表什么。主要有以下5个函数,也是用来求解Ax=b