我需要创建一个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
答案 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?