我有太阳黑子的N个数据点的时间序列,并希望根据这些点的子集预测系列中的剩余点,然后比较正确性。
我刚刚开始使用Matlab进行线性预测,因此我决定在循环中使用以下代码段的路径,以便训练集外的每个点直到给定数据的结尾预测:
%x is the data, training set is some subset of x starting from beginning
%'unknown' is the number of points to extend the prediction over starting from the
%end of the training set (i.e. difference in length of training set and data vectors)
%x_pred is set to x initially
p = length(training_set);
coeffs = lpc(training_set, p);
for i=1:unknown
nextValue = -coeffs(2:end) * x_pred(end-unknown-1+i:-1:end-unknown-1+i-p+1)';
x_pred(end-unknown+i) = nextValue;
end
error = norm(x - x_pred)
我有三个问题:
1)这是否恰当地符合我的描述?我问,因为我只预测了数百个有数百个点的数据集的最后20个点时,我的错误看起来相当大(> 100)。
2)我是否正确解释了lpc的第二个参数?也就是说,它意味着你想要用来预测下一个点的'顺序'或者更多的点?
3)如果在Matlab中有一个更高效的单行函数,我可以调用它来替换循环,并为我计算所有必要的预测,给出我的整体数据的一些子集作为训练集?
我试着通过lpc Matlab教程查看,但它似乎没有进行预测,因为我已经描述了我的需求。我也一直在使用How to use aryule() in Matlab to extend a number series?作为参考。
答案 0 :(得分:0)
因此经过深思熟虑和实验后,我发现上述方法是正确的,并且似乎没有任何单一的Matlab函数来完成上述工作。所遇到的大误差是合理的,因为我使用线性预测算法来解决具有固有非线性行为的问题(即太阳黑子预测)。
希望这有助于其他人在那里开展类似工作。