递归矩阵行列式函数?
Recursive Matrix determinant function?
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 矩阵。我如何编辑它才能找到任何大小方阵的行列式?
您可以使用列表理解来通过输入列表应用表达式,如下所示:
[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
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 矩阵。我如何编辑它才能找到任何大小方阵的行列式?
您可以使用列表理解来通过输入列表应用表达式,如下所示:
[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