前言:

    当你不能设计一个高效的大型稀疏矩阵求解算法时，请根据你解决问题的物理意义思考一下你需要解决的问题是否一定需要求解大型稀疏矩阵。比如，在仿真算法当中，如果采用有限单元法，很可能就需要求解一个大型的稀疏线性方程组，但是如果采用有限体积法，则可以避开求解这个大型稀疏线性方程组，如果有限体积法的精度满足仿真要求，那就不要采用有限单元法了，因为求解大型稀疏线性方程组很困难。对于其它问题，这个道理也是类似的。总之一句话，能不用大型稀疏矩阵求解的就不用【除非你能对其进行特殊处理，然后采用定制的算法快速求解】。

    为了寻求比较好的稀疏矩阵求解算法,自己特别花了一周多的时间泡图书馆以及上期刊查询相应文献,在这里对自己写算法的心得以及相应函数的使用,做一个简单的说明。 

1、当稀疏矩阵不是非常特殊时，因为其阶很大，一般就只能采用迭代求解，这个和非线性方程组求解非常相似。而迭代求解并不能保证每个方程一定能迭代到我们满意的结果，也因此，本程序写的算法不能保证一定能得到你满意的结果！

2、对于任意的稀疏矩阵方程组求解,在求解的效果上看,目前只有{SolveSparseCGNR<矩阵运算\SolveSparseCGNR>}、{SolveSparseCGNE<矩阵运算\SolveSparseCGNE>}这两个函数支持得比较好。当然,如果方程本身比较特殊,使用其它函数计算效果也不错。不过要注意,目前没有万能的求解通用的大型稀疏矩阵的算法,所以没有绝对好的函数算法.

3、如果矩阵维数比较大,建议将迭代次数这个参数调大。

PS:之前在测试一个10万阶的随机稀疏矩阵时,使用{SolveSparseCGNR<矩阵运算\SolveSparseCGNR>}函数必须将迭代次数调到几万才能求得满意的结果。

4、总之一句话,对于存储特殊的矩阵,比如三对角矩阵,则最好使用类似{SolveSparse3Diagonal<矩阵运算\SolveSparse3Diagonal>}这种采用直接求解算法的函数进行方程组求解。当然如果是5、7、……、2n+1对角矩阵,也可以使用{SolveSparseDiagonalLU<矩阵运算\SolveSparseDiagonalLU>}这种定制算法进行求解。如果还有其它特殊点,可以自己编写代码进行直接求解。实在不能直接求解时,再考虑使用其它迭代函数求解吧！

5、虽然变种的算法还有很多,自己也尝试去改变过一些算法,可惜自己能力有限,并不是每种算法我都去写到程序里。如果你确实有一些比较好的求解算法,不妨也可Email我,当然,如果属于内部资料,那就另当别论吧！

//By 2014/6/11
