基于辅助因子,我做了一个递归函数来计算矩阵的行列式:
# determinant of a 2x2 matrix
def det2(matrix):
return matrix[0][0]*matrix[1][1]-matrix[1][0]*matrix[0][1]
# recursive part
def recursion(matrix,somme=None,prod=1):
if(somme==None):
somme=[]
if(len(matrix)==1):
somme.append(matrix[0][0])
elif(len(matrix)==2):
somme.append(det2(matrix)*prod)
else:
for index, elmt in enumerate(matrix[0]):
transposee = [list(a) for a in zip(*matrix[1:])]
transposee.remove(transposee[index])
mineur = [list(a) for a in zip(*transposee)]
somme = recursion(mineur,somme,prod*matrix[0][index]*(-1)**(index+2))
return somme
def main(matrix):
return sum(recursion(matrix))
没有什么复杂的,除了我不明白为什么它不起作用。在某些情况下,它确实给出了正确答案,但并非全部。 我怀疑当矩阵中有0时结果是错误的,但我不确定。
如果您有任何想法,
由于
答案 0 :(得分:3)
我认为你的问题可能就在这里:
transposee.remove(transposee[index])
remove
会从list
中删除传递给它的值的第一个。您的测试矩阵有几个重复的值,因此删除的那个可能不是您要删除以创建mineur
数组的那个。
您的算法适用于随机数组,因为在这种情况下不太可能发生这种重复。
要使您的程序正常工作,请用
替换该行del transposee[index]
将专门删除index
处的值。