2016-01-27 54 views
1

首先'find_nbrs'的輸出是一個行向量。我得到以下錯誤(下標指標必須是真正的正整數或邏輯值。)在第13行評估下面的代碼時:Matlab下標索引錯誤

function [ N ] = componentt(A,m,found_list) 
found_list=[m]; 
for i = find_nbrs(m,A) 
    found_list(length(found_list)+1)=i; 
end 
v=[]; 
    for j=found_list 
     v=[v find_nbrs(j,A)];  
    end 
    v=unique(v); 

    while length(v)~= length(found_list) 
      found_list = [found_list v(end)]; 
     for k=v 
      a=find_nbrs(k,A); 
     while ~ismember(a,found_list) 
      v(length(v)+1)=a; 
     end 
     end 
    end 


N=sort(found_list); %The entries of the output vector are in increasing order. 
end 
+0

哪一個是行號13?並可以發佈變量的值 – dnit13

+0

第13行是:found_list = [found_list v(end)]; A是方矩陣,m是1和長度(A)之間的自然數,並且found_list是空向量[]。 – Federico

+0

[下標索引必須是真正的正整數或邏輯,通用解決方案](http://stackoverflow.com/questions/20054047/subscript-indices-must-either-be-real-positive-integers-or-邏輯值,通用溶膠) – excaza

回答

1

有對

標指標兩個可能的原因絕要麼是真正的正整數或邏輯。由線

found_list = [found_list v(end)]; 

被拋出

錯誤首先是你不小心創建了一個名爲end變量。但既然你已經發布了一個應該被限定範圍的函數,我不認爲這是事實。

第二個是v是一個空矩陣。在這種情況下,什麼是end?它可能是0。儘管如此,它絕對不是一個正整數。試試這個

v = []; 
v(end) 

你會得到錯誤。

所以你需要問自己v應該在你到達那條線時是空的。如果是,則需要將其包裝在if聲明中。所以像

if ~isempty(v) 
    found_list = [found_list v(end)]; 
end