Function for calculate matrix determinant:
def determinant(matrix):
def minor(mat,i):
del mat[0]
y=[]
for x in mat:
del x[i]
y.append(x)
return y
if len(matrix)==1:
return matrix[0][0]
if len(matrix)==2:
return matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]
det=0
for i in range(len(matrix)):
m=matrix.copy()
det=det+((-1)**i)*m[0][i]*determinant(minor(m,i))
m5 = [[2,4,2],[3,1,1],[1,2,0]]
determinant(m5)
But, when function minor delete elements in her argument mat, whih is a COPY of argument matrix in matrix disappear elements too!
Solved only with this ugly construction:
def determinant(matrix):
m=matrix.copy()
if len(m)==1:
return m[0][0]
if len(m)==2:
return m[0][0]*m[1][1]-m[0][1]*m[1][0]
if len(m)>2:
det=0
for i in range(len(m)):
z=[]
for j in range(1,len(m),1):
x=[]
for k in range(len(m)):
if k!=i:
x.append(m[j][k])
z.append(x)
det=det+((-1)**i)*m[0][i]*determinant(z)
return det
list.copy()is a shallow copy. Usecopy.deepcopy()if you want a copy of the sublists as well:Output: