qbl*_*ble 7 c++ algorithm math linear-algebra equation-solving
您推荐哪种算法快速求解固定维密集线性系统(N = 9)(矩阵是对称的,正半定的)?
类型是32位和64位浮点.
这样的系统将被解决数百万次,因此算法在维度方面应该相当快(n = 9).
可以理解用于所提出的算法的稳健 C++实现的PS示例.
1)"解决了数百万次"是什么意思?相同的系数矩阵与一百万个不同的右手术语,或一百万个不同的矩阵?
百万个不同的矩阵.
2)正_semi_definite意味着矩阵可以是奇异的(机器精度).你想怎么处理这个案子?只是提出错误,或尝试返回一些明智的答案?
提出错误是可以的.
矩阵是对称的,正半定的,Cholesky分解严格优于LU分解.(大约是LU的两倍,无论矩阵的大小如何.来源:Trefethen和Bau的"数值线性代数")
它实际上也是小密集矩阵的标准(来源:我在计算数学方面做博士)迭代方法效率低于直接方法,除非系统变得足够大(快速经验法则意味着什么,但总是很好)拥有:在任何现代计算机上,任何小于100*100的矩阵绝对是一个需要直接方法而不是迭代方法的小矩阵
现在,我不建议你自己做.有大量优秀的图书馆已经过全面测试.但如果我不得不推荐你一个,那将是Eigen:
顺便说一句,在文档中,您可以在一个漂亮,简洁的表格中找到7种直接线性求解器的各种优缺点.看来在你的情况下,LDLT(Cholesky的变种)获胜
一般来说,最好使用现有的库,而不是自己动手的方法,因为在追求快速,稳定的数值实现时需要注意许多繁琐的细节.
这里有一些让你入门:
特征库(我个人喜好):http:
//eigen.tuxfamily.org/dox/QuickRefPage.html#QuickRef_Headers
犰狳:http: //arma.sourceforge.net/
搜索周围,你会发现很多其他人.