import numpy as np
import sys
def LU_deco_inverse(m):
dim = m.shape[0]
E = np.mat(np.eye(dim))
L = np.mat(np.eye(dim))
U = m.copy()
for i in range(dim):
if abs(m[i,i]) < 1e-8:
print("zero pivot encoUnted")
sys.exit()
# 上面L=m.copy()时用这个,然后我们将其改进先使其初始为单位阵
# L[:i,i] = 0
# L[i:dim,i] = U[i:dim,i] / U[i,i]
L[i+1:,i] = U[i+1:,i] / U[i,i]
# E[i+1:dim,i+1:dim] = E[i+1:dim,i+1:dim] - L[i+1:dim,i]*E[i,i+1:dim]
# 行变换应该是整个一行的变,而不是上面写的变部分,另E的变换一定要在U之前。
# 这里还将dim去掉因为意思就是从j+1到最后一个元素,可省略dim看起来没那么晕。
E[i+1:,:] = E[i+1:,:] - L[i+1:,i]*E[i,:]
U[i+1:,:] = U[i+1:,:] - L[i+1:,i]*U[i,:]
# U[i+1:dim,:i+1] = 0
# U[i+1:dim,i+1:dim] = U[i+1:dim,i+1:dim] - L[i+1:dim,i]*U[i,i+1:dim]
# 上