如何求解R中具有b = 0的线性方程组(具有自由变量)

时间:2015-01-19 22:40:44

标签: r math linear-algebra

即。如何找到非平凡的解决方案。

示例:

> A = structure(c(1, -0.6, -0.4, -0.4, 0.9, -0.5, -0.6, -0.2, 0.8), .Dim = c(3L, 3L))
> A
     [,x1] [,x2] [,x3]
[1,]  1.0 -0.4 -0.6
[2,] -0.6  0.9 -0.2
[3,] -0.4 -0.5  0.8
> b0
     [,1]
[1,]    0
[2,]    0
[3,]    0
> solve(A,b0)
 [,1]
[1,]    0
[2,]    0
[3,]    0

答案应该是:

x = x3 *(0.94,0.85,1)

或者,如果您可以推荐其他可以解决此类系统的开源工具。


我从线性代数书中采用这个例子。矩阵简化为:

1 0 -0.94 0
0 1 -0.85 0
0 0  0    0

即。 x3是自由变量。 所以参数化解决方案是:

x = (x1,x2,x3) = (0.94 x3,0.85 x3, x3 ) = x3 * (0.94,0.85,1)

对不起我之前没有强调,我知道零矢量是一个简单的解决方案,我正在寻找非平凡的解决方案。 感谢。


你是对的我有一个错字(纠正):

> B = structure(c(1, -0.6, -0.4, -0.4, 0.9, -0.5, -0.6, -0.2, 0.8), .Dim = c(3L, 3L))
> B %*% c(.94,.85,1)
          [,1]
[1,] -1.110223e-16
[2,]  1.000000e-03
[3,] -1.000000e-03
> B %*% c(94,85,100)
  [,1]
[1,]  0.0
[2,]  0.1
[3,] -0.1
> det(B)
[1] 0 

1 个答案:

答案 0 :(得分:3)

对于任何3x3矩阵AA %*% c(0,0,0)c(0,0,0)的情况。所以零的返回值是正确的。这是一个解决方案。

还有其他解决方案吗?允许对A x = 0的重要解决方案的矩阵被称为"单数"。等式的解决方案称为"空间。"

零空间由与特征值0相关联的特征向量跨越。这些由eigen给出:

> eigen(B)
$values
[1] 1.350000e+00+1.32288e-01i 1.350000e+00-1.32288e-01i 1.171856e-16+0.00000e+00i

$vectors
                 [,1]             [,2]         [,3]
[1,] -0.4724556-0.25i -0.4724556+0.25i 0.5823201+0i
[2,]  0.7559289+0.00i  0.7559289+0.00i 0.5259665+0i
[3,] -0.2834734+0.25i -0.2834734-0.25i 0.6198891+0i

请注意,特征值按降序排列,最后一个特征值(接近)为零。所以eigen(B)$vectors[,3]就是解决方案:

> eigen(B)$vectors[,3]
[1] 0.5823201+0i 0.5259665+0i 0.6198891+0i

此值的任何倍数都位于B的空格区域内。

另一种找到此方法的方法是MASS::Null

> Null(t(B))
          [,1]
[1,] 0.5823201
[2,] 0.5259665
[3,] 0.6198891

矩阵被转置,因为你想要"对"零空间。请参阅?Null

注意:

> x <- Null(t(B))
> x/x[3]
          [,1]
[1,] 0.9393939
[2,] 0.8484848
[3,] 1.0000000