def partial_pivoting(a, b):
l = len(a)
for step in range(l):
max = abs(a[step][step])
q = step
for i in range(q, l):
if abs(max) < abs(a[i][q]):
q = i
max = a[i][q]
if max == 0:
return None
a[step], a[q] = a[q], a[step]
b[step], b[q] = b[q], b[step]
for i in range(step + 1, l):
width = len(a[0])
ratio = a[i][step] / a[step][step]
for w in range(step, width):
a[i][w] -= ratio * a[step][w]
b[i] -= ratio * b[step]
return a, b
def gauss_jordan_elimination(a, b):
a, b = partial_pivoting(a, b)
if a == None:
return None
for i in range(len(a)):
if a[i][i]==0:
return None
for j in range(i+1,len(a[0])):
for k in range(j,len(a)):
a[i][k]-=a[i][j]/a[j][j]*a[j][k]
b[i]-=a[i][j]/a[j][j]*b[j]
b[i]/=a[i][i]
return b
def rotate(M):
h=len(M)
w=len(M[0])
L= [ [None] * h for i in range(w)]
for i in range(h):
for j in range(w):
L[j][i]=M[h-i-1][j]
return L
def inverse(a):
b=[[None]*len(a) for i in range(len(a))]
for i in range(len(a)):
L=a
result=[0]*len(a)
result[i]=1
b[i]= gauss_jordan_elimination(L,result)
return rotate(b)
print(inverse([[2,-1,0],[1,0,-1],[1,0,1]]))def partial_pivoting(a, b):
l = len(a)
for step in range(l):
max = abs(a[step][step])
q = step
for i in range(q, l):
if abs(max) < abs(a[i][q]):
q = i
max = a[i][q]
if max == 0:
return None
a[step], a[q] = a[q], a[step]
b[step], b[q] = b[q], b[step]
for i in range(step + 1, l):
width = len(a[0])
ratio = a[i][step] / a[step][step]
for w in range(step, width):
a[i][w] -= ratio * a[step][w]
b[i] -= ratio * b[step]
return a, b
def gauss_jordan_elimination(a, b):
a, b = partial_pivoting(a, b)
if a == None:
return None
for i in range(len(a)):
if a[i][i]==0:
return None
for j in range(i+1,len(a[0])):
for k in range(j,len(a)):
a[i][k]-=a[i][j]/a[j][j]*a[j][k]
b[i]-=a[i][j]/a[j][j]*b[j]
b[i]/=a[i][i]
return b
def rotate(M):
h=len(M)
w=len(M[0])
L= [ [None] * h for i in range(w)]
for i in range(h):
for j in range(w):
L[j][i]=M[i][j]
return L
def inverse(a):
b=[[None]*len(a) for i in range(len(a))]
for i in range(len(a)):
if a[i][i]==0:
return None
L=a
result=[0]*len(a)
result[i]=1
b[i]= gauss_jordan_elimination(L,result)
return rotate(b)
print(inverse([[2,-1,0],[1,0,-1],[1,0,1]]))
가우스 조르단 소거법으로 역행렬구하려는데 왜 안되는거지
출력 ㅇㄷ