我创建了一个递归函数来根据余因子计算矩阵的行列式:
# 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 时结果是错误的,但我不确定。
如果你有什么想法,
谢谢
最佳答案
我认为您的问题可能在这里:
transposee.remove(transposee[index])
remove
删除第一次从列表
传递给它的值。您的测试矩阵有多个重复值,因此删除的值可能不是您想要删除以创建 mineur
数组的值。
您的算法适用于随机数组,因为在这种情况下不太可能发生此类重复。
要使您的程序正常运行,请将该行替换为
del transposee[index]
这将专门删除 index
处的值。
关于Python 递归行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092715/