通过添加标准基础上的向量构建满秩矩阵

时间:2013-12-05 20:22:22

标签: algorithm matlab matrix linear-algebra

我有一个nxn奇异矩阵。我想将k行(必须来自标准基础e1,e2,...,en)添加到此矩阵,使得新的(n + k)xn矩阵是完整列等级。添加的行数k必须最小,并且只要k是最小值,它们可以按任何顺序添加(不仅仅是e1,e2,...,它可以是e4,e10,e1,...)。

有人知道一个简单的方法吗?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:4)

您可以通过执行QR decomposition with column pivoting,然后对置换矩阵的最后n-rank(A)列进行转置来实现此目的。 在matlab中,这是通过qr函数实现的(参见matlab文档here):

r=rank(A);
[Q,R,E]=qr(A);
newA=[A;transpose(E(:,end-r+1:end))];

transpose(E(:,end-r+1:end))的每一行都是标准基础的成员,newA的等级将为n,这也是您需要这样做的最小标准基础数。

这是如何工作的:

使用列旋转进行QR分解是将矩阵A分解为产品的标准程序:

一个* E == Q * - [R

如果A是实数,Q是orthogonal matrix,如果A是复数,则Q是酉矩阵; R是upper triangular matrix,E是permutation matrix

简而言之,选择排列使得对角线元素大于同一行中的非对角线,并且对角线元素的大小不增加。可以在netlib QR factorization page上找到更详细的说明。

由于Q和E都是正交(或单一)矩阵,因此R的秩与A的秩相同。为了提高A的等级,我们只需要找到增加R的等级的方法;由于旋转的结构和它是上三角形的事实,这更加直截了当。

现在,由于对旋转过程的要求,如果R的任何对角元素为0,则整行必须为0.如果R负责无效,则底部的n-rank(A)行为0。如果我们用单位矩阵替换右下角,那么新矩阵将是满秩。好吧,我们不能真正做到替换,但是我们可以将行矩阵附加到R的底部并形成一个具有相同等级的新矩阵:

B==[ 0 I ]     =>   newR=[ R ; B ]

这里I的维度是A的无效性和R的无效性。 很容易看出rank(newR)=n。然后我们还可以通过以微不足道的方式扩展其维数来定义新的单一Q矩阵:

newQ=[Q 0 ; 0 I]

这样,我们的新秩n矩阵可以作为

获得
newA=newQ*newR.transpose(E)=[Q*R ; B ]*transpose(E) =[A ; B*transpose(E)]

请注意,B是[0 I],E是置换矩阵,因此B*transpose(E)只是转置 E的最后n-rank(A)列,以及由标准基础组成的一组行,这正是您想要的!

答案 1 :(得分:3)

n非常大吗?不使用任何数学运算的最简单的解决方案是尝试添加e_i并查看排名是否增加。如果是,请保留e_i。继续直到完成。

答案 2 :(得分:1)

我喜欢@Xiaolei Zhu的解决方案,因为它很优雅,但另一种方式(计算效率更高):

  1. 确定矩阵i的{​​{1}}索引的任何行是否全为零。如果是,则必须连接相应的A
  2. 在该过程之后,您可以简单地连接您在步骤1中未添加的单位矩阵的e_i列的任何子集。

答案 3 :(得分:-1)

来自Identity矩阵的

行/列可以按任何顺序添加。它不需要按照通常的顺序添加为e1,e2,...一般情况下使矩阵满级。