使用拉普拉斯展开求N×N矩阵行列式的R函数报错:argument of length 0
解决拉普拉斯展开计算行列式函数的"argument of length 0"错误
问题原因
你的递归函数缺少终止条件。当递归到1×1矩阵时,执行sub_matrix <- M[-k, -j]会生成一个空矩阵(0×0维度),此时nrow(sub_matrix)返回NULL,后续1:n的调用就会抛出"argument of length 0"错误。
修复方案
在函数开头添加终止判断:当矩阵为1×1时,直接返回该矩阵的唯一元素,停止递归。
修复后的代码
determinant_laplace <- function(M, k = 1) { n <- nrow(M) # 终止条件:1x1矩阵直接返回元素值 if (n == 1) { return(M[1, 1]) } det_value <- 0 sign <- 1 for (j in 1:n) { sub_matrix <- M[-k, -j] sub_det <- determinant_laplace(sub_matrix, k = 1) det_value <- det_value + sign * M[k, j] * sub_det sign <- -sign } return(det_value) } # 测试示例 B <- matrix(1:9, nrow=3, ncol=3) B determinant_laplace(B) det(B)
验证结果
运行修复后的代码,determinant_laplace(B)会返回0,和R内置函数det(B)的结果一致,符合该3阶奇异矩阵的行列式特性。
内容的提问来源于stack exchange,提问作者Jean-Jacques Simonis
相关产品推荐
相关产品推荐

