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

如何求解R中b=0的线性方程组(带自由变量),r,math,linear-algebra,R,Math,Linear Algebra,i、 e.如何找到非平凡的解决方案 例如: > 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 &

i、 e.如何找到非平凡的解决方案

例如:

> 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
i、 e.x3是自由变量。 所以参数化的解决方案是:

x = (x1,x2,x3) = (0.94 x3,0.85 x3, x3 ) = x3 * (0.94,0.85,1)
对不起,我之前没有强调,我知道零向量是平凡解,我在寻找非平凡解。 谢谢


你是对的,我有一个打字错误(更正):


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

还有其他解决办法吗?允许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 x/x[3]
[,1]
[1,] 0.9393939
[2,] 0.8484848
[3,] 1.0000000

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

还有其他解决办法吗?允许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 x/x[3]
[,1]
[1,] 0.9393939
[2,] 0.8484848
[3,] 1.0000000

非常感谢。。。我还不知道空空格之类的。。。他们在线性代数方面更进一步。。。但是现在你提到了,我们来看看。。。此外,我还知道特征值/向量,但不知道我可以这样使用它们。。我现在看到了解决它的模式。。。我得多读点书,多做些实验。。再次感谢您提供的详细答案。@user1019129这将使它看起来像上面的解决方案,第三个元素是
1
eigen
Null
长度为1的返回向量,但任何倍数都在Null空间中。因此在某种意义上,我可以使任何变量成为“自由变量”。。。f、 e.x/x[2]。。。根据当前变量重新调整其他变量的大小。非常感谢。。。我还不知道空空格之类的。。。他们在线性代数方面更进一步。。。但是现在你提到了,我们来看看。。。此外,我还知道特征值/向量,但不知道我可以这样使用它们。。我现在看到了解决它的模式。。。我得多读点书,多做些实验。。再次感谢您提供的详细答案。@user1019129这将使它看起来像上面的解决方案,第三个元素是
1
eigen
Null
长度为1的返回向量,但任何倍数都在Null空间中。因此在某种意义上,我可以使任何变量成为“自由变量”。。。f、 e.x/x[2]。。。根据当前变量重新调整其他变量的大小。