如何在MATLAB中给定一组向量,获取最大独立向量?

3
如果我有一组向量(可以提供为矩阵的列向量),并且我想要获取最大独立向量,最好的方法是什么?
我可以逐个将一个向量添加到结果集中,以查看新形成的矩阵的秩是否增加。但我觉得这不是很高效。当然,我可以回去做高斯消元来解决这个问题。但我只是想知道是否有更好的方法(高效、数值稳定和鲁棒)来解决这个问题。
谢谢。
编辑
通过观察秩的增加来感觉添加可能无效。但我们可以通过观察秩是否减少来进行删除。

“maximally independent” 的确切含义是什么? - Phonon
@Phonon:我的意思是任何一组独立向量,再加上其中的任何一个向量都会产生一个线性相关的集合。 - Qiang Li
4个回答

3

这段代码可以解决问题。虽然它会动态增加rInd,这不是最高效的方式,但思路更加重要。它使用QR分解,基本上是Gram-Schmidt正交化过程。从这里开始,它会遍历r的行,直到找到下一个向量在A中添加线性独立的内容到当前已知的基础。

iUnderConsideration = 1;

[q,r] = qr(A);
rInd = [];
for j = 1:size(r,2),
    if(r(iUnderConsideration,j) ~= 0)
        rInd = [rInd r(:,j)];
        iUnderConsideration = iUnderConsideration + 1;
    end
    if(iUnderConsideration > size(r,1))
        break;
    end
end

q*rInd  %here's your answer

顺便提一下,这段代码会选择矩阵 A 的向量而不改变它们。svd 不会直接给你这些。


请注意,这假定您的向量是A的列向量。 - Yoav
1
@Ben-Uri 这是原帖作者的假设之一。 - Chris A.

2
[U,S,V]=svd(vectors);
U(1:size(vectors,1),1:size(vectors,2))=vectors;

U现在包含原始向量以及最佳正交集。


1

进行RREF并查找具有前导零的列是最好的选择:

matr(:,logical(sum(rref(matr)==1)))

这将为矩阵的列空间提供基础。


这是使用部分主元高斯-约旦消元法之一。这是我上面提到的方法之一。这种方法在数值上不太稳定,对吗? - Qiang Li
我不知道它在数值上是不稳定的。我会很快删除我的回答。 - Phonon

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接