You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用拉普拉斯展开求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:02:00