我有一个等式
组Ax =通过
其中A和B是三对角矩阵。我想计算一个矩阵
C = inv(A).B
有不同的x,s会给出不同的y,因此C的计算很方便。
有人可以告诉我一个更快的计算逆的方法。我使用的是Python 3.5,如果我们使用numpy中的任何方法,我更喜欢。如果不可能,我可以使用scipy或cython作为第二和第三选择。
我见过其他类似的问题,但它们并不完全符合我的问题。
谢谢
答案 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