如何使用MATLAB在循环中传递整数

时间:2014-11-08 07:12:45

标签: matlab loops stocks

我正在尝试运行以下代码:

%% 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.

我在网上搜索过但不太明白为什么我会收到此错误?

1 个答案:

答案 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