#消元defKillYuan(A,i):try:
A[i]/= A[i][i]except:print("矩阵奇异")
A[i]/= A[i][i]for j inrange(i +1,len(A)):
A[j]-= A[j][i]* A[i]return A
#矩阵求解defMatrixSolve(A):
A = np.copy(A)
b = A[:,-1]
a = np.delete(A,-1,1)try:
np.linalg.solve(a,b)except:print("矩阵奇异")return np.linalg.solve(a,b)
高斯消去法
#高斯消元法defGaussianElimination(A):
A = np.copy(A)
m =len(A)
n =len(A[0])for i inrange(m):
A = KillYuan(A,i)return MatrixSolve(A),A
列主元高斯消去法
#列主元高斯消元法defMainYuanGaussianElimination(A):
A = np.copy(A)
m =len(A)
n =len(A[0])for i inrange(m):
maxYuan =0for j inrange(i,m):ifabs(A[j][i])> maxYuan:
maxYuan = j
A[[i,maxYuan],:]= A[[maxYuan,i],:]
A = KillYuan(A,i)return MatrixSolve(A),A
LU分解法
#LU分解法defLU(A):
n =len(A[0])
L = np.zeros([n, n])
U = np.zeros([n, n])for i inrange(n):
L[i][i]=1if i ==0:for j inrange(n):
U[i][j]= A[i][j]
L[j][i]= A[j][i]/ U[i][i]else:for j inrange(i, n):
temp =0for k inrange(i):
temp = temp + L[i][k]* U[k][j]
U[i][j]= A[i][j]- temp
for j inrange(i +1, n):
temp =0for k inrange(i):
temp = temp + L[j][k]* U[k][i]
L[j][i]=(A[j][i]- temp)/ U[i][i]return L,U
LU分解求矩阵的逆
下三角矩阵求逆
#下三角矩阵求逆defDownTriangle_Inv(L):
n =len(L)
Li = np.zeros([n,n])for i inrange(n):for j inrange(n):if i < j:
Li[i][j]=0if i == j:
Li[i][j]=1/ L[i][j]if i > j:
s =0for k inrange(j,i):
s += L[i][k]* Li[k][j]
Li[i][j]=-1/ L[i][i]* s
return Li
LU分解求逆
#LU分解法矩阵求逆defA_Inv(A):
L, U = LU(A)
Li = DownTriangle_Inv(L)
Ui = DownTriangle_Inv(U.T).T
return np.dot(Ui,Li)