反转三对角矩阵

时间:2016-08-17 19:43:29

标签: python performance sparse-matrix matrix-inverse

我有一个等式

组Ax =通过

其中A和B是三对角矩阵。我想计算一个矩阵

C = inv(A).B

有不同的x,s会给出不同的y,因此C的计算很方便。

有人可以告诉我一个更快的计算逆的方法。我使用的是Python 3.5,如果我们使用numpy中的任何方法,我更喜欢。如果不可能,我可以使用scipy或cython作为第二和第三选择。

我见过其他类似的问题,但它们并不完全符合我的问题。

谢谢

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到,最简单的一个是三对角矩阵算法,参见Wiki page。该算法在O(n)时间内工作,在Numpy中有一个简单的实现,如下Github link。 但是,您可能会认为自己实现一种已知算法,例如LU factorization

答案 1 :(得分:0)

scipy.linalg.solve_banded是LAPACK的包装器,它应该依次调用MKL。它似乎运行O(N)。有关显示语法的简单示例

  a = np.array([[1,2,0,0], [-1,2,1,0], [0,1,3,1], [0,0,1,2]])
  x = np.array([1,2,3,4])
  b = np.dot(a,x)
  ab = np.empty((3,4))
  ab[0,1:] = np.diag(a,1)
  ab[1,:] = np.diag(a,0)
  ab[2,:-1] = np.diag(a,-1) 
  y =  solve_banded((1,1),ab,b)
  print y