递归矩阵行列式函数?

时间:2015-03-23 00:09:35

标签: python loops python-3.x for-loop recursion

def determinant(M):
    """
    Finds the determinant of matrix M.
    """
    if dimension(M)[0]!=dimension(M)[1]:
        print("This matrix is not a square matrix and therefore cannot have a determinant!")
        return
    elif dimension(M)[0]==dimension(M)[1]:
        if dimension(M)==(2,2):
            return (M[0][0]*M[1][1])-(M[0][1]*M[1][0])
        else:
            return (M[0][0]*determinant(reduce_matrix(M,1,1))) - (M[0][1]*determinant(reduce_matrix(M,1,2))) + (M[0][2]*determinant(reduce_matrix(M,1,3)))

编辑:这里的代码能够找到3x3矩阵的行列式,但只能找到3x3矩阵。如何编辑它以找到任何大小的方阵的行列式?

1 个答案:

答案 0 :(得分:1)

您可以使用列表推导按输入列表应用表达式,如下所示:

[n ** 2 for n in [1, 2, 3]] == [1, 4, 9]

我假设你想累积结果,在这种情况下你可以使用sum函数。

sum([1, 2, 3]) == 6

通过同时应用这两个表达式,结果如下:

sum([((-1) ** i) * (M[0][i] * determinant(reduce_matrix(M, 1, i + 1))) for i in range(0, dimension(M)[1])])

请注意range排除了最后一个元素。

还要谨慎操作员优先:

-1 ** 2 != (-1) ** 2