Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # citim n si matricea
- n = int(input())
- matrix = []
- for i in range(0, n):
- line = [float(x) for x in input().split()]
- matrix.append(line)
- # det va returna valoarea determinantului
- def det(n, matrix):
- if n == 2:
- # cazul cu rezolvare imediata, calculam direct determinantul cu formula
- return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
- # cand matricea este mai mare ded 2x2, vom cauta sa o dezvoltam dupa linie
- # cautam un element din matrice, incepand cu coltul din dreapta-jos care sa fie diferit de 0
- # in functie de care sa obtinem zerouri
- line = -1
- column = -1
- for i in range(n - 1, -1, -1):
- for j in range(n - 1, -1, -1):
- if matrix[i][j] != 0:
- line = i
- column = j
- break;
- if line != -1:
- break;
- # daca nu am gasit, inseamna ca matricea e nula, deci si determinantul este nul
- if line == -1 and column == -1:
- return 0
- # pentru fiecare coloana diferita de column
- # vrem sa facem zerouri in matrix[l][j]
- # si restul elementelor sa le actualizam conform teoremei
- for j in range(0, n):
- if j != column:
- coef = matrix[line][j] / matrix[line][column]
- for i in range(0, n):
- matrix[i][j] -= matrix[i][column] * coef
- # determinantul redus se inmulteste cu matrix[line][column] * (-1)^(line + column) = delta
- delta = matrix[line][column]
- if (line + column) % 2 == 1:
- delta *= -1
- # eliminam linia line si coloana column din matrice
- for i in range(line + 1, n):
- for j in range(0, n):
- matrix[i - 1][j] = matrix[i][j]
- for j in range(column + 1, n):
- for i in range(0, n):
- matrix[i][j - 1] = matrix[i][j]
- # reducem dimensiunea matricei
- n -= 1
- # calculam in continuare delta * determinantul redus
- return delta * det(n, matrix)
- print(round(det(n, matrix), 2))
Advertisement
Add Comment
Please, Sign In to add comment