我想求解系统A.b = x,其中A是几乎 Python中的三对角矩阵:
A是这样的矩阵
a b 0 0 .... 0 0 b
b a b 0 .... 0 0 0
0 b a b .... 0 0 0
.
.
0 0 0 0 .... b a b
b 0 0 0 .... 0 b a
即具有非零对角的三对角线。
我可以使用numpy求解器来求解和集成我的系统:
numpy.linalg.solve
这可以工作,但是由于我的矩阵很大,而且非常慢,我不认为它利用了A数组的稀疏性和接近三对角性。
如果它是一个纯三对角线系统,我知道如何使用经典的前向和后向替换算法快速而有效地解决它,但是我对那些非零的对角感到困惑。我浏览了numpy和scipy,我唯一想到的就是尝试将NxN矩阵转换为带状系统,并尝试使用scipy中的solve_banded:
https://docs.scipy.org/doc/scipy/reference/linalg.html
我是否缺少明显的东西,是否有技巧可以通过内置的python numpy或scipy包功能有效地解决此系统?
此循环系统,可以在O(N log N)中求解。参见scipy.linalg.solve_circulant