牛客题解 | 使用拉普拉斯展开式的 4x4 矩阵的行列式

题目

题目链接

拉普拉斯展开式是一种计算行列式的方法,它通过选择矩阵的某一行或某一列,然后计算该行或该列的元素与它们对应的代数余子式的乘积之和。

其数学表达式为(按行展开):
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=1naij×(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方法返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值