我正在尝试建立一个ARMAX模型,该模型预测水库水位高度是先前海拔和上游流入的函数。我的数据大约是0.041天的时间步长,但它确实略有不同,我有3643个时间序列点。我尝试过使用基本的armax Matlab命令,但是收到了这个错误:
Error using armax (line 90)
Operands to the || and && operators must be convertible to
logical scalar values.
我尝试的代码是:
data = iddata(y,x,[],'SamplingInstants',JDAYs)
m1 = armax(data, [30 30 30 1])
其中y是高程矢量,开始时y = [135.780 135.800 135.810 135.820 135.820 135.830]',x是流量矢量,开始时像x = [238.865 238.411 238.033 237.223 237.223 233.828]'和JDAY是一个时间戳的向量,开始时像JDAYs = [122.604 122.651 122.688 122.729 122.771 122.813]'
我对此型号类型和系统识别工具箱不熟悉,因此我在查明导致该错误的原因时遇到了问题。 Matlab的例子并不是很有用......
答案 0 :(得分:2)
我希望这不会让你迟到。
检查您的代码我发现您使用的是名为SamplingInstants
的参数。我不确定ARMAX
函数是否可以使用它。其实我确定。我已经尝试了几次,不,它没有。它似乎也不是ARMAX
或其他方法的明确记录选项。
ARX
,ARMAX
和其他模型基于Z-Transform形式主义的线性离散系统,也就是说,人们可以 ussualy 假设您的系统具有以常规抽样率抽样。当然,这不是一个定律,这是处理线性系统和非线性系统时的标准框架。还有大多数工业控制和采集系统在定期采样率下工作。然而。
尝试进入ARMAX
标准设置,如下所示:
y=[135.780 135.800 135.810 135.820 135.820 135.830 .....]';
x=[238.865 238.411 238.033 237.223 237.223 233.828 .....]';
%JDAYs=[122.604 122.651 122.688 122.729 122.771 122.813 .....]';
JDAYs=122.601+[0:length(y)-1]*4.18';
data = iddata(y,x,[],'SamplingInstants',JDAYs);
m1 = armax(data, [30 30 30 1])
这将永远有效。请确保x
和y
足够长,以便能够正确估算所有自由系数,大于mean(4*orders)
,ARMAX
才能正常工作 - 在这种情况下,对于10*mean(4*orders)
算法来说,正确地解决你的问题需要大于121,并且希望大于ARMAX
,并且有足够的时间变量来防止达到病态的解决方案。
祝你好运;)......