davidbejenariu2

cod python

Jan 4th, 2021
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.99 KB | None | 0 0
  1. # citim n si matricea
  2. n = int(input())
  3. matrix = []
  4.  
  5. for i in range(0, n):
  6.     line = [float(x) for x in input().split()]
  7.     matrix.append(line)
  8.  
  9. # det va returna valoarea determinantului
  10. def det(n, matrix):
  11.     if n == 2:
  12.         # cazul cu rezolvare imediata, calculam direct determinantul cu formula
  13.         return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
  14.  
  15.     # cand matricea este mai mare ded 2x2, vom cauta sa o dezvoltam dupa linie
  16.     # cautam un element din matrice, incepand cu coltul din dreapta-jos care sa fie diferit de 0
  17.     # in functie de care sa obtinem zerouri
  18.     line = -1
  19.     column = -1
  20.  
  21.     for i in range(n - 1, -1, -1):
  22.         for j in range(n - 1, -1, -1):
  23.             if matrix[i][j] != 0:
  24.                 line = i
  25.                 column = j
  26.                 break;
  27.         if line != -1:
  28.             break;
  29.  
  30.     # daca nu am gasit, inseamna ca matricea e nula, deci si determinantul este nul
  31.     if line == -1 and column == -1:
  32.         return 0
  33.  
  34.     # pentru fiecare coloana diferita de column
  35.     # vrem sa facem zerouri in matrix[l][j]
  36.     # si restul elementelor sa le actualizam conform teoremei
  37.     for j in range(0, n):
  38.         if j != column:
  39.             coef = matrix[line][j] / matrix[line][column]
  40.             for i in range(0, n):
  41.                 matrix[i][j] -= matrix[i][column] * coef
  42.  
  43.     # determinantul redus se inmulteste cu matrix[line][column] * (-1)^(line + column) = delta
  44.     delta = matrix[line][column]
  45.  
  46.     if (line + column) % 2 == 1:
  47.         delta *= -1
  48.  
  49.     # eliminam linia line si coloana column din matrice
  50.     for i in range(line + 1, n):
  51.         for j in range(0, n):
  52.             matrix[i - 1][j] = matrix[i][j]
  53.  
  54.     for j in range(column + 1, n):
  55.         for i in range(0, n):
  56.             matrix[i][j - 1] = matrix[i][j]
  57.  
  58.     # reducem dimensiunea matricei
  59.     n -= 1
  60.  
  61.     # calculam in continuare delta * determinantul redus
  62.     return delta * det(n, matrix)
  63.  
  64. print(round(det(n, matrix), 2))
Advertisement
Add Comment
Please, Sign In to add comment