求解大型稀疏矩阵线性方程组是一件很痛苦的事情,大型稀疏矩阵求逆是这个问题的特例。UMFPACK采用的是一种针对稀疏矩阵的LU分解方法,直接法,比较耗内存,提供了C/Fortran/MATLAB接口,如果内存够大,可以首先尝试一下,因为直接法较迭代法精度高一些。如果内存不够,一般首先进行预处理,然后选择一种迭代法进行求解,比方说基于Krylov子空间的方法。UMFPACK的Manual写得比较暧昧,下面记录一下其MATLAB接口的安装方式。虽然MATLAB这丫闭源,只叹人在江湖,身不由己 。。。不过这套SparseSuite倒是GPL的,要是真提供R接口就好了,和CSIE@UFL他家比较熟的童鞋,不妨建议一下 。。。
环境:Ubuntu 10.10 + MATLAB R2010b for UNIX
1. 从 http://www.cise.ufl.edu/research/sparse/
下好UMFPACK本身及其依赖包(均属于所谓的 SparseSuite),平行放置于一个目录。理论上这些就足够:
AMD
CAMD
CCOLAMD
CHOLMOD
COLAMD
UFconfig
UMFPACK
从 http://glaros.dtc.umn.edu/gkhome/metis/metis/download
下载metis-4.0,解压后同样放入上述目录。
2. 此时如果在MATLAB中进入UMFPACK/MATLAB目录执行 umfpack_make,会发现不能编译Mathworks他丫的MEX。提示:
Warning: You are using gcc version "4.4.4-14ubuntu5)". The version currently supported with MEX is "4.3.4".
看来Ububtu 10.10自带的gcc版本太高,我们按照
https://help.ubuntu.com/community/MATLAB
的MEX function一节的1 - 3步先安装一个gcc 4.3.4 。。。
3. root启动MATLAB,执行
getenv('PATH')
setenv('PATH',sprintf('/home/%s/.matlab/bin:%s',getenv('USER'),getenv('PATH')));
再次 getenv('PATH') 发现环境变量已经修改成功,进入UMFPACK/MATLAB目录,执行 umfpack_make 即可。
要确认是否已经编译成功,执行 umfpack_demo 即可运行一个求解demo,还有一些对比内建浮点性能之类的信息,比较无聊。
另外,直接法还有一个求解器PARDISO可以选择,但是好像授权很不友好,academical也只能试用30天,简直是让人发指 。。。没有做更多的尝试。


