如何在MATLAB中给出一组向量来获得最大独立向量?

时间:2011-04-19 19:20:48

标签: matlab

如果给出一组向量(它们可以作为矩阵的列向量提供),并且我想获得最大独立向量,那么最好的方法是什么?

我可以一次向结果集添加一个向量,以查看新形成的矩阵的等级是否增加。但我觉得效率不高。当然,我可以回去做高斯消除来解决这个问题。但我只是想知道是否有更好的(有效和数字稳定和机器人)解决这个问题的方法。

感谢。

修改

通过观察等级增加可能无效,感觉增加。我们可以通过观察等级是否正在减少来进行删除。

4 个答案:

答案 0 :(得分:2)

这段代码可以解决问题。它有点脏,因为它在飞行中增长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不会直接给你这些。

答案 1 :(得分:2)

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

U现在包含原始矢量加上最佳正交集。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

SVD是你的答案。

MATLAB reference for SVD