如何在Matlab中构建ARMAX模型

时间:2014-04-22 22:27:49

标签: matlab system-identification autoregressive-models

我正在尝试建立一个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的例子并不是很有用......

1 个答案:

答案 0 :(得分:2)

我希望这不会让你迟到。

检查您的代码我发现您使用的是名为SamplingInstants的参数。我不确定ARMAX函数是否可以使用它。其实我确定。我已经尝试了几次,不,它没有。它似乎也不是ARMAX或其他方法的明确记录选项。

ARXARMAX和其他模型基于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])

这将永远有效。请确保xy足够长,以便能够正确估算所有自由系数,大于mean(4*orders)ARMAX才能正常工作 - 在这种情况下,对于10*mean(4*orders)算法来说,正确地解决你的问题需要大于121,并且希望大于ARMAX,并且有足够的时间变量来防止达到病态的解决方案。

祝你好运;)......