我正在尝试运行以下代码:
%% Getting Stocks
stocks = hist_stock_data('01012013','07112014','GDXJ', 'SPY','GOOGL', 'QQQ', 'AAPL');
%% Loop to get the stocks in order by date
while i <= 5
stocks(1,i).Date=datenum(stocks(1,i).Date);
stocks(1,i).Date = stocks(1,i).Date(end:-1:1);
stocks(1,i).AdjClose = stocks(1,i).AdjClose(end:-1:1);
stocks(1,i).Ticker =stocks(1,i).AdjClose;
end
但是我收到以下错误:
Subscript indices must either be real positive integers or logicals.
我在网上搜索过但不太明白为什么我会收到此错误?
答案 0 :(得分:0)
首先,您必须提到hist_stock_data
是您从外部源获得的函数,而不是MATLAB内置函数或变量。好吧,我用Google搜索并在MATLAB File Exchange找到了它。
接下来查看代码,这里有一些建议 - 尽量避免使用i
作为迭代器,因为未初始化的MATLAB会将其视为imaginary unit。阅读更多相关信息here。这就是你收到错误的原因 - Subscript indices must either be real positive integers or logicals.
,因为使用的索引是imaginary unit
,不能用作索引。
因此,我们可以将i
更改为ii
-
while ii <= 2
stocks(1,ii).Date=datenum(stocks(1,ii).Date);
stocks(1,ii).Date = stocks(1,ii).Date(end:-1:1);
stocks(1,ii).AdjClose = stocks(1,ii).AdjClose(end:-1:1);
stocks(1,ii).Tiicker =stocks(1,ii).AdjClose;
end
然后,我们运行代码并看到此错误 -
Undefined function or variable 'ii'.
现在,我做了一些猜测,并将while-loop
替换为for-loop
,迭代结构stocks
中的所有元素。所以,它变成了 -
for ii = 1:numel(stocks)
stocks(1,ii).Date=datenum(stocks(1,ii).Date);
stocks(1,ii).Date = stocks(1,ii).Date(end:-1:1);
stocks(1,ii).AdjClose = stocks(1,ii).AdjClose(end:-1:1);
stocks(1,ii).Tiicker =stocks(1,ii).AdjClose;
end
这样运行正常,但要确保结果与stocks
中的结果一致。
如果您只想为第一个5
元素运行循环,那么执行此操作 -
for ii = 1:5