如何识别不增加R中矩阵秩的行/列?
假设我有一个维数为nxn的对称半正定矩阵如何识别不增加R中矩阵秩的行/列?,r,matrix,linear-algebra,R,Matrix,Linear Algebra,假设我有一个维数为nxn的对称半正定矩阵a。A的秩是d
a
。A
的秩是dd
的索引,使得A[索引,索引]
具有秩d
。例如,如果
A <- structure(c(3, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(4L, 4L))
A您可以使用QR分解,QR
q <- qr(A)
q$pivot[seq(q$rank)]
# [1] 1 2 3
A[,q$pivot[seq(q$rank)]]
# [,1] [,2] [,3]
# [1,] 3 2 1
# [2,] 2 2 1
# [3,] 1 1 1
# [4,] 1 1 1
q这里有一个可以解决的问题:做eigen(a)
,看看特征值为零的特征向量(即最后一列)。它在最后两行中有非零分量(注意这里的数字问题),即,可以删除索引3和4中的一个,以获得您的索引集。现在,随着n
变得越来越大,需要进行一些组合运算,但这似乎是可行的。@mts:我已经看过了,而且由于数值精度(以及非常大的矩阵)使用特征值来识别正确的列变得非常混乱。编辑:我发现subselect
包中的trim.matrix
方法使用特征值方法解决了问题,但它比直接的QR分解慢得多。非常感谢!我离得很近,但不知怎的,我想我需要q$qraux
。