У меня проблема с моим кодом в Matlab, что довольно странно.У меня есть цикл for, который содержит пару утверждений о некоторых датах, вот код:
for i=1:data_length_Added
if (month(dateAdded(i)) ~= 0) && (month(dueDate(i)) ~= 0) && (month(dueDate(i)) == month(datePublished(i)))
[~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');% finds the position of an element from the array in the array for months
kpit(idx,2) =kpit(idx,2) + overdue(i);
kpit(idx,3) = kpit(idx,3) + 1;
idx = idx + 1;
else
if (month(dateAdded(i)) ~= 0) && (month(datePublished(i)) == (month(dueDate(i)) + 1)) && month(dueDate(i)) ~= 0
[~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');
[~,idx1]=ismember(month(datePublished(i)),kpit(:,1),'rows');
year1 = year(datePublished(i));
weight = (day(datePublished(i)))/eomday(year1,month(datePublished(i)));
kpit(idx,2) =kpit(idx,2) + overdue(i);
kpit(idx1,2) =kpit(idx1,2) + overdue(i)*weight;
kpit(idx,3) = kpit(idx,3)+ 1;
kpit(idx1,3) = kpit(idx1,3)+ 1;
else
if (month(dateAdded(i)) ~= 0) && (month(datePublished(i)) ~= 0) && (month(datePublished(i)) > (month(dueDate(i))+1)) && (month(dueDate(i)) ~= 0)
[~,idx]=ismember(month(datePublished(i)),kpit(:,1),'rows');
year1 = year(datePublished(i));
weight = day(datePublished(i))/eomday(year1,month(datePublished(i))); %Should count all overdue days for full months and weighted overdue days for not full months
kpit(idx,2) = overdue(i)*weight;
kpit(idx,3) = kpit(idx,3) + 1;
for j=month(dueDate(i)) : (month(datePublished(i))-1)
[~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');
kpit(idx,2) =kpit(idx,2) + overdue(i);
kpit(idx,3) = kpit(idx,3)+ 1;
j = j + 1;
month(dueDate(i)) = month(dueDate(i)) + 1;
end
else
if (month(dateAdded(i)) ~= 0) && month(dueDate(i)) ~= 0 && month(datePublished(i)) == 0
[~,idx]=ismember(month(today),kpit(:,1),'rows');
year1 = year(today);
weight = day(today)/eomday(year1,month(today)); %Should count all overdue days for full months and weighted overdue dats for not full months
kpit(idx,2) = overdue(i)*weight;
kpit(idx,3) = kpit(idx,3) + 1;
for j=month(dueDate(i)) : (month(today)-1)
[~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');
kpit(idx,2) =kpit(idx,2) + overdue(i);
kpit(idx,3) = kpit(idx,3)+ 1;
j = j + 1;
month(dueDate(i)) = month(dueDate(i)) + 1;
end
end
end
end
end
end
Итак, проблема в том, что я успешно запускаю код через цикл, и проблема возникает после первогодата у меня в строке 367 (до этого у меня только нули).В принципе, у меня нет проблем с нулями до первого числа, которое фактически попадает в первый вложенный цикл и первое число, проблема возникает после этого.Как вы думаете, что может вызвать проблему с ошибкой индексов индекса я получаю?Спасибо:)))
введите описание изображения здесь