用C++中的Eigen包求解一个三对角矩阵



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

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

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

您能做的最好的事情就是自己实现Thomas算法。没有什么能比得上它的速度。该算法非常简单,无论是Eigen还是BLAS都无法击败您的手写代码。如果你必须求解一系列矩阵,这个过程可以很好地向量化。

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

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

相关内容

最新更新