有效解决python中对角为非零的三对角线系统

问题描述 投票:0回答:1

我想求解系统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
1个回答
1
投票

此循环系统,可以在O(N log N)中求解。参见scipy.linalg.solve_circulant

© www.soinside.com 2019 - 2024. All rights reserved.