python高效三对角矩阵求逆

2024-04-20 05:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要反转大量的对称复三对角矩阵(目前是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。但是我仍然没有使用我的许多优点。在

我不需要一个最佳的解决方案,我宁愿简单,因为我没有太多的时间来测试和验证我的结果。但目前它的效率太低了。在


Tags: inimportnumpyforlayersnp矩阵eps