固定维(N = 9),对称,正半定的密集线性系统的快速解

qbl*_*ble 7 c++ algorithm math linear-algebra equation-solving

您推荐哪种算法快速求解固定维密集线性系统(N = 9)(矩阵是对称的,正半定的)?

  • 高斯消除
  • LU分解
  • Cholesky分解
  • 等等?

类型是32位和64位浮点.

这样的系统将被解决数百万次,因此算法在维度方面应该相当快(n = 9).

可以理解用于所提出的算法的稳健 C++实现的PS示例.

1)"解决了数百万次"是什么意思?相同的系数矩阵与一百万个不同的右手术语,或一百万个不同的矩阵?

百万个不同的矩阵.

2)正_semi_definite意味着矩阵可以是奇异的(机器精度).你想怎么处理这个案子?只是提出错误,或尝试返回一些明智的答案?

提出错误是可以的.

Fez*_*vez 7

矩阵是对称的,正半定的,Cholesky分解严格优于LU分解.(大约是LU的两倍,无论矩阵的大小如何.来源:Trefethen和Bau的"数值线性代数")

它实际上也是小密集矩阵的标准(来源:我在计算数学方面做博士)迭代方法效率低于直接方法,除非系统变得足够大(快速经验法则意味着什么,但总是很好)拥有:在任何现代计算机上,任何小于100*100的矩阵绝对是一个需要直接方法而不是迭代方法的小矩阵

现在,我不建议你自己做.有大量优秀的图书馆已经过全面测试.但如果我不得不推荐你一个,那将是Eigen:

  • 无需安装(仅限标头库,因此没有要链接的库,只有#include <>)
  • 强大而高效(他们在主页上有很多基准,结果很好)
  • 易于使用且记录完备

顺便说一句,在文档中,您可以在一个漂亮,简洁的表格中找到7种直接线性求解器的各种优缺点.看来在你的情况下,LDLT(Cholesky的变种)获胜


arr*_*sea 6

一般来说,最好使用现有的库,而不是自己动手的方法,因为在追求快速,稳定的数值实现时需要注意许多繁琐的细节.

这里有一些让你入门:

特征库(我个人喜好):http:
//eigen.tuxfamily.org/dox/QuickRefPage.html#QuickRef_Headers

犰狳:http: //arma.sourceforge.net/

搜索周围,你会发现很多其他人.