2013-03-07 40 views
-1

我需要創建發現以矩陣A.查找線性無關矢量的子集,最大用Matlab

初始化程序的輸出線性無關矢量的最大子集的MATLAB函數爲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

所以,***你有什麼試過***? – nneonneo 2013-03-07 02:22:17

回答

0

在矩陣線性無關矢量的數目等於rank of the matrix,和線性無關矢量的特定子集是不是唯一的。線性獨立矢量的任何「最大子集」的大小都等於等級。

有一個在MATLAB這個功能:

n = rank(A); 

你描述的算法是沒有必要的;你應該只使用SVD。有一個簡潔的方法來做到這一點:how to get the maximally independent vectors given a set of vectors in MATLAB?

+0

我需要編寫一個腳本,通過遍歷A的列並將該列向量添加到A中與向量線性無關的向量來手動執行此操作。 這裏是我迄今爲止... 函數[OUT] = maxindependent(A) %MAXINDEPENDENT需要一個矩陣A,併產生一個陣列,其中各列 %與最大尺寸獨立矢量的子集。 [r c] = size(A); out = 0; A = A(:,秩(A)) 爲JJ = 1:C M = [AA(:,JJ)] 如果秩(M)〜=大小(M,2) A = A ELSEIF秩(M)==大小(M,2) 甲= M 端 端 OUT =甲 如果最大值(下)== 0 0; 結束 結束 – user2142460 2013-03-07 02:55:55

+0

嘆息......我將該代碼複製到您原來的帖子中,這是您應該首先完成的。 – 2013-03-07 02:59:24

+0

對不起..我是一個新手 – user2142460 2013-03-07 03:02:15