from fractions import Fraction
def gauss(_arr):
arr = [[Fraction(x) for x in r] + [{i: Fraction(1)}] for i, r in enumerate(_arr)]
n, m = len(arr), len(arr[0])
h, k = 0, 0
while h < n and k < m:
idx = next((i for i in range(h, n) if arr[i][k] != 0), None)
if idx is None:
k += 1
else:
arr[idx], arr[h] = arr[h], arr[idx]
for i in range(h + 1, n):
f = Fraction(arr[i][k], arr[h][k])
arr[i][k] = Fraction(0)
for j in range(k + 1, m - 1):
arr[i][j] -= arr[h][j] * f
for key, value in arr[h][m - 1].items():
arr[i][m - 1][key] = arr[i][m - 1].get(key, 0) - value * f
h += 1
k += 1
return arr
A = [[1, -2, 5],[3,2,-7], [-1, 1, 0]]
B = [11,-2,-4]
def get_inverse(_arr):
arr = gauss(_arr)
n = len(arr)
sol = [None] * n
sol[-1] = {key: value / arr[-1][-2] for key, value in arr[-1][-1].items()}
for i in range(n - 2, -1, -1):
d = dict(arr[i][-1])
for j in range(i + 1, n):
for key, value in sol[j].items():
d[key] = d.get(key, 0) - sol[j].get(key, 0) * arr[i][j]
for key in d:
d[key] /= arr[i][i]
sol[i] = d
return sol
def solve(A, B):
n = len(A)
inv = get_inverse(A)
return [sum(B[k] * v for k, v in inv[i].items()) for i in range(n)]
print(solve(A, B))
# def solve(a):
# n, m = len(a), len(a[0])
# arr = gauss(a)
# print(arr)
# sol = [None] * n
# sol[-1] = arr[-1][-1] / arr[-1][-2]
# for i in range(n - 2, -1, -1):
# sol[i] = (arr[i][-1] - sum(arr[i][j] * sol[j] for j in range(i + 1, n))) / arr[i][i]
# return sol
To embed this program on your website, copy the following code and paste it into your website's HTML: