我正在尝试使用R语言计算Matrix S的正确NullSpace,但是编码程序只返回NULL,我该怎么办?
r1<-c(1,0,0,0)
r2<-c(-1,1,0,0)
r3<-c(0,-1,1,0)
r4<-c(0,-1,0,1)
r5<-c(0,0,-1,0)
r6<-c(0,0,0,-1)
S<-cbind(r1,r2,r3,r4,r5,r6)
m<-ncol(S)
n<-nrow(S)
K<-null(t(S))= Null
# [IN Octave] K=null(S');
K =
0.308572 0.487972
0.308572 0.487972
0.576882 -0.023245
-0.268311 0.511217
0.576882 -0.023245
-0.268311 0.51121
1)Null请注意,MASS附带R,因此您无需安装它。内部Null
使用QR分解。
library(MASS)
Null(t(S))
赠送:
[,1] [,2]
[1,] 0.4218763 0.3941493
[2,] 0.4218763 0.3941493
[3,] 0.5522815 -0.1682810
[4,] -0.1304052 0.5624303
[5,] 0.5522815 -0.1682810
[6,] -0.1304052 0.5624303
2)svd如果USV在主题中你的意思是你想从奇异值分解得到它那么:
SVD <- svd(crossprod(S))
Rank <- sum(zapsmall(SVD$d) > 0)
SVD$v[, -seq_len(Rank)]
赠送:
[,1] [,2]
[1,] 0.2077046 -0.53869484
[2,] 0.2077046 -0.53869484
[3,] 0.5703757 -0.08946994
[4,] -0.3626711 -0.44922489
[5,] 0.5703757 -0.08946994
[6,] -0.3626711 -0.44922489
3)特征或来自S'S的特征值分解,然后:
e <- eigen(crossprod(S))
Rank <- sum(zapsmall(e$values) > 0)
e$vectors[, -seq_len(Rank)]
赠送:
[,1] [,2]
[1,] 0.0 0.5773503
[2,] 0.0 0.5773503
[3,] -0.5 0.2886751
[4,] 0.5 0.2886751
[5,] -0.5 0.2886751
[6,] 0.5 0.2886751
对于S
中的任何这些预乘来验证S
确实实际上将它们中的任何一个带到了零空间。