如何在 r 中修复:系统完全奇异


在 R 中您可能遇到的错误是:

 Lapack routine dgesv: system is exactly singular: U[2,2] = 0

当您尝试使用solve()函数,但您正在使用的矩阵是没有矩阵逆的奇异矩阵时,就会出现此错误。

本教程解释了如何在实践中解决此错误。

如何重现错误

假设我们在 R 中创建以下矩阵:

 #create singular matrix
mat <- matrix(c(1, 1, 1, 1), ncol= 2 , nrow= 2 )

#view matrix
mast

     [,1] [,2]
[1,] 1 1
[2,] 1 1

现在假设我们尝试使用solve()函数来计算矩阵的逆:

 #attempt to invert matrix
solve(mat)

Error in solve.default(mat): 
  Lapack routine dgesv: system is exactly singular: U[2,2] = 0

我们收到错误,因为我们创建的矩阵没有逆矩阵。

注意:查看 Wolfram MathWorld 的此页面,其中显示了 10 个没有逆矩阵的不同矩阵示例。

根据定义,如果行列式为零,则矩阵是奇异的。

您可以在尝试反转给定矩阵之前使用det()函数计算其行列式:

 #calculate determinant of matrix
det(mat)

[1] 0

我们的矩阵的行列式为零,这解释了为什么我们会遇到错误。

如何修复错误

纠正此错误的唯一方法是简单地创建一个非奇异矩阵。

例如,假设我们使用solve()函数来反转R中的以下矩阵:

 #create matrix that is not singular
mat <- matrix(c(1, 7, 4, 2), ncol= 2 , nrow= 2 )

#view matrix
mast

     [,1] [,2]
[1,] 1 4
[2,] 7 2

#calculate determinant of matrix
det(mat)

[1] -26

#invert matrix
solve(mat)

            [,1] [,2]
[1,] -0.07692308 0.15384615
[2,] 0.26923077 -0.03846154

当矩阵求逆时我们不会收到任何错误,因为矩阵不是奇异的。

其他资源

以下教程解释了如何修复 R 中的其他常见错误:

如何修复:条件长度 > 1 并且仅使用第一个元素
如何修复:二元运算符的非数字参数
如何解决:dim(X) 必须具有正长度
如何修复:选择未使用的参数时出错

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注