又是一个月了,这个月前面大多数的时间都在看网格变形的paper,后面这段时间又要搞Ogre,日子过得很混乱,完全没有什么时间来整理学过的东西。在这个月末的时候还是贴篇文章表示还在好好学习。
网格变形的论文看得理解了一点后就开始尝试实现,就开始到网上找稀疏矩阵库。一开始我使用的矩阵库是Eigen,风格跟matlab很像,但是没有实现稀疏矩阵运算的功能,虽然它预留了跟其他几个稀疏矩阵库的接口,但是我试过的umfpack和superlu都在if(!lu_of_A.succeeded())这一步计算失败。后来还找尝试了taucs库,但是同样遇到了一个悲剧的问题,编译成功的库可以在命令行下使用,但是放到vs2008里面却总是无法链接成功。花了几天的时间,最后还是决定自己封装下umfpack和Eigen的接口。
首先要了解稀疏矩阵的存储格式,稀疏矩阵的标准格式是以列为主序的,使用三个数组来存放它的数据,int *pAi,int * pAp,和 double *pAx,其中pAi存放存放每个非0元素的行号,pAp则存放每列开头非0元素在pAx里面的索引,pAx以列为主序存放非0元素,详细的信息可以从http://people.sc.fsu.edu/~jburkardt/pdf/hbsmc.pdf这里找到,第7页
直接贴源文件