Python递归行列式

时间:2015-06-27 19:31:11

标签: python recursion

基于辅助因子,我做了一个递归函数来计算矩阵的行列式:

# 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时结果是错误的,但我不确定。

如果您有任何想法,

由于

1 个答案:

答案 0 :(得分:3)

我认为你的问题可能就在这里:

transposee.remove(transposee[index])

remove会从list中删除传递给它的值的第一个。您的测试矩阵有几个重复的值,因此删除的那个可能不是您要删除以创建mineur数组的那个。

您的算法适用于随机数组,因为在这种情况下不太可能发生这种重复。

要使您的程序正常工作,请用

替换该行
del transposee[index]

将专门删除index处的值。