用C ++中的Eigen包解决三对角矩阵

时间:2016-04-06 06:00:09

标签: c++ matrix linear-algebra eigen

目前我有一个系统 Ax = b ,这样 A 是一个三对角矩阵。使用Eigen,我已经可以使用以下行解决这个系统:

x = A.colPivHouseholderQr()。solve(b);

然而,由于 A 是一个三对角矩阵,与MATLAB相比,这种方法的工作速度相当慢,因为该程序很可能计算所有值的解,而不是仅仅计算三个对角线。 Eigen可以更快地解决这个问题吗?这可能是一个相当愚蠢的问题,但我对C ++来说还是比较新的,而且我几天前才开始使用Eigen,所以现在还有很多东西需要考虑!提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以做的最好的事情就是自己实施Thomas算法。没有什么比这更快的了。算法非常简单,Eigen和BLAS也不会打败你的手写代码。如果你必须解决一系列矩阵,那么程序可以很好地进行矢量化。

https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm

如果您想坚持使用标准库,BLAS DGTSV(双精度)或SGTSV(单精度)可能是最佳解决方案。