2016-01-27 3 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 
Смежные вопросы