2015-08-19 7 views
0

Эта матрица ниже представляет собой матрицу 25x7. В основном то, что я делаю, это дата начала и дата окончания и добавление 1 к дате начала и вычитание 1 с даты окончания. Проблема в том, что я добираюсь до последней (25-й) итерации, где мой индекс превышает размеры матрицы. Здесь дата начала 20081210, и мне нужно получить 20081211. Как я могу это сделать без изменения методологии моего кода? Спасибо.Преодоление матрицы Matlab 'превосходит размеры матрицы' без изменения точки кода

for i = 1:length(matrix) 
     plus1=matrix(i+1,1); 
     minus1=matrix(i,2)-1; 
     [~,startIdx]=ismember(plus1,date); % index days in between entry date and exit date 
     [~,cutoffIdx]=ismember(minus1,date); % index days in between entry date and exit date 
     j=date(startIdx:cutoffIdx); 
    end 
+1

Я не понимаю, как ваш данные структурированы или точка вашего кода. Просьба представить [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) вместе с желаемым результатом. – excaza

+0

Я не понимаю, что такое 'matrix' и какая' дата'. – rayryeng

+0

Первый столбец матрицы - это деловые даты. 20080825 - 20081210. Матрица содержит значение спредов опционов. Я пытаюсь отслеживать значение в каждый следующий день. Я хочу, чтобы цикл for завершился в 20081211, но я не могу сделать это без превышения размеров. – kits

ответ

0

Ваш цикл всегда будет превышать длину matrix и, следовательно, без ошибок.

for i = 1:length(matrix) 
    plus1 = matrix(i + 1, 1); % What happens when i == length(matrix)? 
    % i + 1 = 26 which is greater than the rows in matrix 

Вы должны изменить свои пределы контура для

for i = 1:length(matrix) - 1 
    plus1 = matrix(i + 1, 1); % the max value of i + 1 will be the length of matrix 

Я понятия не имею, если все остальное правильно, потому что вы не полностью определены matrix ни date

+0

Я только что предложил изменить. Не понял петлю. Вы написали сокращенно. Игнорируется, если хотите. – Juderb