Source code for petrify.solver
def upper_tri(A):
"In-place converts A into upper-triangular form."
n = len(A)
for i in range(0, n):
max_cell = abs(A[i][i])
max_row = i
for k in range(i+1, n):
if abs(A[k][i]) > max_cell:
max_cell = abs(A[k][i])
max_row = k
for k in range(i, n+1):
tmp = A[max_row][k]
A[max_row][k] = A[i][k]
A[i][k] = tmp
for k in range(i+1, n):
c = -A[k][i]/A[i][i]
for j in range(i, n+1):
if i == j:
A[k][j] = 0
else:
A[k][j] += c * A[i][j]
return A
[docs]def solve_matrix(A):
"Solve a system of equations using gauss-jordan elimination."
A = upper_tri(A)
n = len(A)
# Solve given the upper triangular matrix
x = [0 for i in range(n)]
for i in range(n-1, -1, -1):
x[i] = A[i][n]/A[i][i]
for k in range(i-1, -1, -1):
A[k][n] -= A[k][i] * x[i]
return x