2013-06-04 2 views
-1

Я стараюсь прогнозировать несколько шагов вперед. И я столкнулся с проблемой Индекс превышает размеры матрицы по адресу volrv (index2, index1) = sum (rv1m (index2-index1 + 1: index2,1)); Хотя я проверил размер матрицы в порядке. Я не понимаю, почему. HELP пожалуйстаИндекс превышает размеры матрицы

load sp100_88_03_for.txt; 
[y]=sp100_88_03_for; 
T=3585; % In-Sample: 1/1/1988-9/28/2001 
N = size(y,1); 
dataf = 100*(log(y(2:N))-log(y(1:N-1))); % data to be forecast 
N = N - 1; % You loose 1 obs'n in taking the lag 
clear y; 
%ERRORS 
datafm = mean(dataf); %mean of all the sample for the forecast error 
errors = dataf - datafm; % errors 
errors2 = (dataf(T:N)-datafm).^2; % vector with squared errors 
% Loading Realized Volatilities 
load real_vol_adj.txt 
RV_adj = real_vol_adj; 
rv1m = RV_adj(:,1); 
rv5m = RV_adj(:,2); 
clear real_vol*; 
clear RV_adj*; 
% Calculating the proxy for the volatility process 
volr2 = []; % volatilities from sum of squared daily returns 
volrv = []; % volatilities from sum of daily realized volatilities 
volrd = []; % volatilities from d-day period returns (d=1,2,...,22) 
rsquared=(dataf(T:N)-mean(dataf(T:N))).^2; 
volr2(:,1)=rsquared; 
volrv(:,1)=rv1m; 
for index1=2:22; 
      volr2(1:index1-1,index1) = 0; 
      volrv(1:index1-1,index1) = 0; 
     for index2=index1:N-T+1 
      volr2(index2,index1)=sum(rsquared(index2-index1+1:index2,1)); 
      volrv(index2,index1)=sum(rv1m(index2-index1+1:index2,1)); 
     end 
end 

Ошибка в ==> volrv (index2, INDEX1) = сумма (rv1m (index2-index1 + 1: index2,1));

Благодаря

+4

Как насчет добавления отладочного вывода? Перед линией нарушения напечатайте значения 'index2-index1 + 1: index2' и' size (rsquared) '. Это должно сразу сказать вам, где это выходит за рамки, и вы можете проследить, почему. – jazzbassrob

+0

Я пробовал. Но я не ошибаюсь. Спасибо за предложение – user2451341

+0

Ваше утверждение в явном противоречии с ошибкой. Используйте 'dbstop if error' или указывайте размер перед ошибками. – Oleg

ответ

0

Для меня ваш код брейки в строке 30.
Итак, я установил breakpoint в этой линии и сделал

size(rsquared) 

ans = 

    1 3585 

Однако, вы пытаетесь получить доступ rsquared(1:2,1), который в этом случае выдает сообщение об ошибке

Index exceeds matrix dimensions. 

.

Одно быстрое решение может быть:

volr2(index2,index1)=sum(rsquared(1,index2-index1+1:index2)); 

Но это зависит от конкретной задачи.
После этого исправления код работал без ошибок для меня.

+0

это работает. Спасибо. – user2451341

Смежные вопросы