从USB计算空间

问题描述 投票:0回答:1

我正在尝试使用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

r svd
1个回答
0
投票

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确实实际上将它们中的任何一个带到了零空间。

© www.soinside.com 2019 - 2024. All rights reserved.