python高效三对角矩阵求逆

时间:2017-12-21 22:46:18

标签: python numpy matrix scipy matrix-inverse

我需要将对数复数三对角矩阵的大数(当前为1e6,可能优化为3e3)反转。矩阵M都非常相似。实际上M是两个参数M(a, b)的函数,我需要计算网格上的逆。

我目前正在做的是

import numpy as np
from numpy.linalg import inv

N = 40
mat_indices = range(0, N)

a = np.linspace(-5, 5, dtype=np.complex256, num=500)                      
b = np.linspace(-5, 5, dtype=np.complex256, num=500)                    
w += 5j * max((w[1] - w[0], eps[1] - eps[0]))                                   

M = np.zeros(a.shape + b.shape + (N, N), dtype=np.complex)           
for lay in layers:                                                              
    M[..., lay, lay] = fa(a[:, np.newaxis]) + fb(b[np.newaxis, :])
for lay in layers[:-1]:                                                         
    G_latt_inv[..., lay, lay+1] = fsub(a, b)                            
    G_latt_inv[..., lay+1, lay] = fsub(a, b)                                    

M_inv = inv(M)

显然这是一个可怕的解决方案,我既不使用对称也不使用矩阵的稀疏性。此外,迭代方法应该是有利的,因为我的矩阵都非常相似。

我知道有scipy.sparse,我可能会对solve使用b=Unity方法。但我仍然没有使用我的许多有利特性。

我不需要最佳解决方案,我更喜欢简单,因为我没有足够的时间来测试和验证我的结果。但目前效率太低了。

0 个答案:

没有答案