相比于普通的高斯消去法,多了一个交换的函数和判断条件
mt = [[0,5,1,2],[2,1,-1,1],[4,-1,1,0]]
def trans(a,b): #交换矩阵某两行nxl
for i in range(len(a)):
temp = a[i]
a[i] = b[i]
b[i] = temp
m = len(mt)
n = len(mt[0])
for i in range(0,m):
if mt[i][i] == 0:
for l in range(i+1,m):
if mt[l][i] != 0:
trans(mt[i],mt[l])
break
for k in range(0,i):
l = mt[i][k]/mt[k][k]
for j in range(0,n):
mt[i][j] = mt[i][j] - mt[k][j] * l
print(mt)
res = [0] * m
res[m-1] = mt[m-1][n-1]/mt[m-1][n-2] #计算最后一个x的值
for i in range(m-2,-1,-1): #回代
temp = 0
for j in range(i+1,n-1):
c = mt[i][j]*res[j]
temp += c
res[i] = (mt[i][n-1] - temp)/mt[i][i]
print(res)