题目
拉普拉斯展开式是一种计算行列式的方法,它通过选择矩阵的某一行或某一列,然后计算该行或该列的元素与它们对应的代数余子式的乘积之和。
其数学表达式为(按行展开):
d
e
t
(
A
)
=
∑
j
=
1
n
a
i
j
×
(
−
1
)
i
+
j
×
d
e
t
(
A
i
j
)
det(A) = \sum_{j=1}^{n} a_{ij} \times (-1)^{i+j} \times det(A_{ij})
det(A)=j=1∑naij×(−1)i+j×det(Aij)
其中,
A
A
A 为原矩阵,
a
i
j
a_{ij}
aij 为矩阵
A
A
A 的第
i
i
i 行第
j
j
j 列的元素,
A
i
j
A_{ij}
Aij 为将矩阵
A
A
A 的第
i
i
i 行和第
j
j
j 列去掉后得到的子矩阵。
标准代码如下
def determinant_4x4(matrix) :
if len(matrix) == 1:
return matrix[0][0]
det = 0
for c in range(len(matrix)):
minor = [row[:c] + row[c+1:] for row in matrix[1:]]
cofactor = ((-1)**c) * determinant_4x4(minor)
det += matrix[0][c] * cofactor
return det
本代码使用了递归的方法,通过不断将矩阵的行和列去掉,来计算行列式。
当然,也可以使用numpy库中的det方法来简化计算,但是numpy返回结果是浮点数,这里给出一种处理方式
def determinant_4x4(matrix) :
import numpy as np
return np.rint(np.linalg.det(matrix)).astype(matrix[0][0].__class__).tolist()
本代码利用rint函数进行舍入,并利用astype函数将结果转换为原矩阵的类型,最后通过tolist方法返回结果。