如何识别不增加R中矩阵秩的行/列?

如何识别不增加R中矩阵秩的行/列?,r,matrix,linear-algebra,R,Matrix,Linear Algebra,假设我有一个维数为nxn的对称半正定矩阵a。A的秩是d

假设我有一个维数为nxn的对称半正定矩阵
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