使用Matlab查找线性独立向量的最大子集

时间:2013-03-07 02:19:39

标签: matlab matrix

我需要创建一个matlab函数,在矩阵A中找到线性独立向量的最大子集。

将程序的输出初始化为0,这对应于空集(不包含列向量)。从左到右逐个扫描A的列;如果将当前列向量添加到到目前为止找到的线性独立向量集中,则使新的向量集线性地依赖,然后跳过此向量,否则将此向量添加到解集;然后转到下一栏。

function [ out ] = maxindependent(A) 
%MAXINDEPENDENT takes a matrix A and produces an array in which the columns 
%are a subset of independent vectors with maximum size. 
[r c]= size(A); 
out=0; 
A=A(:,rank(A)) 
for jj=1:c 
  M=[A A(:,jj)] 
  if rank(M)~=size(M,2) 
    A=A 
  elseif rank(M)==size(M,2) 
    A=M 
  end 
end 
out=A 

if max(out)==0 
 0; 
end 

end

1 个答案:

答案 0 :(得分:0)

矩阵中线性无关矢量的数量等于rank of the matrix,并且线性独立矢量的特定子集不是唯一的。线性独立向量的任何“最大子集”将具有等于秩的大小。

在MATLAB中有一个函数:

n = rank(A);

您描述的算法不是必需的;你应该只使用SVD。这里有一个简明的方法:how to get the maximally independent vectors given a set of vectors in MATLAB?