我是一位同事提出这个问题的,我对此有所回答。作为R的新手,以及只是在我的第一个线性代数课程的中途,数小时的搜索没有得出答案。这里的任何帮助将非常感谢!
我理解这个问题相当含糊而且不详细,但这正是它给我的方式。如果被问到,我会尝试添加任何细节。
这也是我在这里的第一个问题,所以如果我没有正确提出问题,我会道歉。随意批评我,我来这里学习。
答案 0 :(得分:0)
您可以使用rref(A)函数从pracma包定义行和空间。行空间将是cols,其中前导1和null / col空间将是列数减去行空间。所以代码rref(as.matrix(A))然后写一点来查找缩减矩阵中的枢轴列并计算列数。其余的是简单的算术。
答案 1 :(得分:0)
牢记矩阵的four subspaces:
在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
检查!