Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from functools import reduce
- from operator import mul, sub
- ################################################################################
- def get_matrix(fname):
- with open(fname, "r") as f:
- return [tuple(map(float, l.split())) for l in f]
- def column(row):
- i = 0
- n = len(row)
- while not row[i] and i < n:
- i += 1
- return i if i < n else -1
- def sign(indexes):
- n = len(indexes)
- s = sum((0, 1)[x < y] for k, y in enumerate(indexes) for x in indexes[k+1:])
- return ((s + 1) % 2 - s % 2)
- def det(matrix):
- M = matrix[:]
- n = len(M)
- indexes = [0 for _ in range(n)]
- for i in range(n):
- k = column(M[i])
- for j in (x for x in range(n) if x != i):
- M[j] = tuple(map(sub, M[j], map(mul, M[i], [M[j][k] / M[i][k]] * n)))
- indexes[i] = k
- return reduce(mul, (M[i][indexes[i]] for i in range(n)), 1) * sign(indexes)
- def kramer(les):
- n = len(les)
- tmp = list(zip(*les))
- b = tmp[-1]
- del tmp[-1]
- delta = det(tmp)
- if not delta:
- raise RuntimeError("Решения нет")
- result = []
- for i in range(n):
- a = tmp[:]
- a[i] = b
- result.append(det(a) / delta)
- return result
- ################################################################################
- if "__main__" == __name__:
- kramer(get_matrix("input.txt"))
- ################################## End Of File #################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement