【发布时间】:2020-06-10 17:59:25
【问题描述】:
我想解决系统 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 包的内置功能有效地解决这个系统?
【问题讨论】:
标签: python numpy scipy linear-algebra