Repository navigation
Expand file tree
/
Copy pathdeterminant.py
More file actions
58 lines (38 loc) · 1.65 KB
/
Copy pathdeterminant.py
File metadata and controls
58 lines (38 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""
Write a function that accepts a square matrix (N x N 2D array) and returns the determinant of the matrix.
How to take the determinant of a matrix -- it is simplest to start with the smallest cases:
A 1x1 matrix |a| has determinant a.
A 2x2 matrix [ [a, b], [c, d] ] or
|a b|
|c d|
has determinant: a*d - b*c.
The determinant of an n x n sized matrix is calculated by reducing the problem to the calculation of the determinants of n matrices ofn-1 x n-1 size.
For the 3x3 case, [ [a, b, c], [d, e, f], [g, h, i] ] or
|a b c|
|d e f|
|g h i|
the determinant is: a * det(a_minor) - b * det(b_minor) + c * det(c_minor) where det(a_minor) refers to taking the determinant of the 2x2 matrix created by crossing out the row and column in which the element a occurs:
|- - -|
|- e f|
|- h i|
Note the alternation of signs.
The determinant of larger matrices are calculated analogously, e.g. if M is a 4x4 matrix with first row [a, b, c, d], then:
det(M) = a * det(a_minor) - b * det(b_minor) + c * det(c_minor) - d * det(d_minor)
"""
def determinant(matrix):
n = len(matrix)
# Base case for a 1x1 matrix
if n == 1:
return matrix[0][0]
# Base case for a 2x2 matrix
if n == 2:
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
det = 0
for i in range(n):
# Create the minor matrix by removing the current row and column
minor = [row[:i] + row[i+1:] for row in matrix[1:]]
# Calculate the determinant recursively using the minor matrix
det += (-1) ** i * matrix[0][i] * determinant(minor)
return det
# Example usage
print(determinant([[1, 2], [3, 4]]))