目前我有一个系统 Ax = b ,这样 A 是一个三对角矩阵。使用Eigen,我已经可以使用以下行解决这个系统:
x = A.colPivHouseholderQr()。solve(b);
然而,由于 A 是一个三对角矩阵,与MATLAB相比,这种方法的工作速度相当慢,因为该程序很可能计算所有值的解,而不是仅仅计算三个对角线。 Eigen可以更快地解决这个问题吗?这可能是一个相当愚蠢的问题,但我对C ++来说还是比较新的,而且我几天前才开始使用Eigen,所以现在还有很多东西需要考虑!提前谢谢。
答案 0 :(得分:2)
您可以做的最好的事情就是自己实施Thomas算法。没有什么比这更快的了。算法非常简单,Eigen和BLAS也不会打败你的手写代码。如果你必须解决一系列矩阵,那么程序可以很好地进行矢量化。
https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm
如果您想坚持使用标准库,BLAS DGTSV(双精度)或SGTSV(单精度)可能是最佳解决方案。