2014-04-01 2 views
0

루프를 통과하는 동안 배열 요소 인 행렬에 값을 할당하려고합니다. 그러나 나는 그 말을 듣고있다 Subscript indices must either be real positive integers or logicals.하지만 아래의 스크립트에서 볼 수 있듯이 실제로 사용되기 전에 각 인덱스에 대한 출력을 읽었고 각 인덱스는 실제 양의 정수입니다.셀 배열의 행렬에 값 할당 - MATLAB

오류는 첫 번째 루프 문 fundMoments{1,i}((count-frame(j)+1), meanCol) = mean(fund(count-frame(j)+1:count));에 의해 생성됩니다 - 나는 스크립트에서 정의 된 입력과 함께 라인의 왼쪽면을 단독으로 실행했으며 배열의 행렬에 보관 된 값이 올바르게 표시됩니다. 0입니다. 그러나 전체 라인이 실행되지 않습니다.

내가 여기에 잘못 가고있는 아이디어가 있습니까?

코드에 대한 일부 컨텍스트 - 이동 평균 (그러나 이동 평균뿐만 아니라 이동 표준, 편차 등)을 계산하려고합니다. frame의 값은 이동 시간 창을 고려한 길이입니다. funds은 ~ 2500x8 배가 매트릭스입니다.

frame = [252 504 756]; % the time frame to be used for moving averages 
funds = funds_ROR; %matrix with the returns of all funds 
meanCol = 1; 
st_devCol = 2; 
skewCol = 3; 
kurtCol = 4; 

%for f = 1:length(frame) 
mean = zeros(length(funds) - frame(1), 1); 
st_dev = zeros(length(funds) - frame(1), 1); 
skew = zeros(length(funds) - frame(1), 1); 
kurt = zeros(length(funds) - frame(1), 1); 

vectLength = length(mean); % all the four vectors must be of the same length, so we only need use one 

fundMoments = {[mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt]}; 

for i = 1:1:8 
    fund = funds_ROR(:,i); 


    for j = 1:length(frame) 

     for count = frame(j):length(fund) 
      fund 
      count 
      frame_j = frame(j) 
      meanCol 
      fund(count-frame(j)+1:count) 

      fundMoments{1,i}((count-frame(j)+1), meanCol) = mean(fund(count-frame(j)+1:count)); 
      fundMoments{1,i}(count-frame(j)+1, st_devCol) = std(fund(count-frame(j)+1:count)); 
      fundMoments{1,i}(count-frame(j)+1, skewCol) = mean(fund(count-frame(j)+1:count)); 
      fundMoments{1,i}(count-frame(j)+1, kurtCol) = mean(fund(count-frame(j)+1:count)); 

      % fund_kurt = kurtosis(1:1:frame(j)); 

      %     date = time_series(frame(j):end); 
      %     figure(frame(j)) 
      %     plot(date, fundMoments, date, fund_kurt) 
      %     header = ['Skew and Kurtosis - ', frame, ' moving average']; 
      %     title(header) 
      %     legend('Skew', 'Kurtsosis') 
      %     set(gcf, 'YLim', max(max(fundMoments), max(fund_kurt))) 

     end 
    end 

end 
+0

'count-frame (j) +1 '대신에'uint32 (count-frame (j) +1)'시도해보십시오 –

+0

어쨌든 작동하지 않았습니다. –

+0

'mean'은 함수라는 뜻입니까,'mean'입니까? 왜냐하면 코드의 앞부분에 변수를 겹쳐 쓰고 있기 때문입니다. – nkjt

답변

0

설명에서 언급했듯이 mean에 값이 할당되면 문제가 발생합니다.

이후 변수이지만 asker는 여전히 함수가 될 것으로 기대합니다.

나는 이것이 generic solution to this problem을 통해 또한 this question을 통해 발견되었을 것이라고 믿습니다.

관련 문제