我正在尝试将值分配给矩阵,矩阵在循环时直接是一个数组元素。然而我被告知Subscript indices must either be real positive integers or logicals.
但是正如你从下面的脚本中看到的那样,我已经在实际使用之前读取了每个索引的输出,并且每个索引都是真正的正整数。
错误是由第一个循环语句fundMoments{1,i}((count-frame(j)+1), meanCol) = mean(fund(count-frame(j)+1:count));
产生的 - 我单独运行了该行的左侧,并在脚本中定义了输入,并且它正确地告诉我矩阵中保存的值,数组,为零。但是整行不会运行。
我在这里出错的任何想法?
对于代码的某些上下文 - 我试图计算移动平均线(但不仅是移动平均值,还有移动标准偏差等)。 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 :(得分:0)
正如评论中所述,当值分配给mean
时会出现问题。
之后它是一个变量,但是提问者希望它仍然是一个函数。
我相信这也可以通过generic solution to this problem来自this question找到。