有没有办法在R中找到矩阵的行/列空格?

时间:2016-04-04 15:21:05

标签: r linear-algebra

我是一位同事提出这个问题的,我对此有所回答。作为R的新手,以及只是在我的第一个线性代数课程的中途,数小时的搜索没有得出答案。这里的任何帮助将非常感谢!

我理解这个问题相当含糊而且不详细,但这正是它给我的方式。如果被问到,我会尝试添加任何细节。

这也是我在这里的第一个问题,所以如果我没有正确提出问题,我会道歉。随意批评我,我来这里学习。

2 个答案:

答案 0 :(得分:0)

您可以使用rref(A)函数从pracma包定义行和空间。行空间将是cols,其中前导1和null / col空间将是列数减去行空间。所以代码rref(as.matrix(A))然后写一点来查找缩减矩阵中的枢轴列并计算列数。其余的是简单的算术。

答案 1 :(得分:0)

牢记矩阵的four subspaces

enter image description here

在R4中使用3个向量创建矩阵,只有两个线性独立:

> v1 <- c(3,5,11,-1)
> v2 <- c(45,-2,5,23)
> v3 <- v1 -2*v2
> 
> (M <- cbind(v1,v2,v3))
     v1 v2  v3
[1,]  3 45 -87
[2,]  5 -2   9
[3,] 11  5   1
[4,] -1 23 -47

确定排名

> # RANK:
> nrow(rref(M)[apply(rref(M)[,-1], 1, function(x) !all(x==0)),])
[1] 2

COLUMN SPACE 生成基础,该基础位于R4中所有Mx=b的结果(b):

> (Col_sp <- t(rref(t(M))[apply(rref(t(M)), 1, function(x) !all(x==0)),]))
            v1         v2
[1,] 1.0000000  0.0000000
[2,] 0.0000000  1.0000000
[3,] 0.2034632  2.0779221
[4,] 0.4891775 -0.4935065

生成与R4中列空间正交的子空间(即左空空间或转置的空空间)或tr(M)x = 0中x的基础:

library(MASS)
> (Left_Null <- Null(M))
           [,1]         [,2]
[1,] -0.2369092 -0.399278229
[2,] -0.8051370  0.413649975
[3,]  0.4573183 -0.004747012
[4,]  0.2940891  0.818198057

这两个向量是否满足条件tr(M)x = 0

> round(t(M)%*%Left_Null,10)
   [,1] [,2]
v1    0    0
v2    0    0
v3    0    0

检查!

这两个子空间真的正交吗?

> round(t(Col_sp) %*% Left_Null, 10)
   [,1] [,2]
v1    0    0
v2    0    0

检查!

ROW SPACE 在R3或Mx = b的解决方案(x)中生活奠定基础:

> (Row_sp <- rref(M)[apply(rref(M), 1, function(x) !all(x==0)),])
     v1 v2 v3
[1,]  1  0  1
[2,]  0  1 -2

RIGHT NULL SPACE (列空间的空空间)或居住在R3中的Mx=0的解决方案生成基础:

> (Right_Null <- Null(t(M)))
           [,1]
[1,] -0.4082483
[2,]  0.8164966
[3,]  0.4082483

Mx=0完成了吗?

> round(M %*% Right_Null, 10)
     [,1]
[1,]    0
[2,]    0
[3,]    0
[4,]    0

检查!

最后两个子空间正交吗?

> round(Row_sp %*% Right_Null,10)
     [,1]
[1,]    0
[2,]    0

检查!