我对以下 Matlab 观察感到非常困惑。
在我的问题中,我试图从离散的采样输入输出数据中估计一个 ARX/ARMAX 模型。我正在按照 Matlab 的指南在命令行中识别线性模型(使用系统识别工具箱)
- 我的数据集是 980 个输入-输出对(实验),采样时间为
Ts = 10
秒(2 个输入,1 个输出)。我将数据my_data
分成 490 个实验的两个子集:experimental
和validation
. - 运行
delayest(my_data)
表明任何输入都没有延迟。因此nk1=0
和nk2=0
。 - 用
selstruc
和识别订单arxstruc
让我可以选择订单na
和。nb1
nb2
- 我将
opt=armaxOptions('InitialCondition','z')
系统的初始条件设置为零(我不使用 Matlab 将其视为估计变量)。
考虑到以上所有因素,我运行
my_model = arx(experimental,[6,[2,5],[0,0]],opt)
它在命令行中给出了以下模型(pastebin 上的链接)。
从上面的链接中,如果向下滚动,我们可以看到对experimental
数据的拟合非常好。
我的问题来了:
如果我现在想使用子集验证数据,请使用以下命令validation
进行比较:compare
% the model had zero initial condition as well
opt=compareOptions('InitialCondition','z');
[~,fit_vector,~]=compare(validation,my_model,opt);
disp(num2str(cell2mat(fit_vector)))
这就是有趣的地方,现在显示的数字很-109.626 %
合适。
有谁知道这个命令的确切行为,为什么在生成模型时的拟合
arx
(在上面的 pastebin 链接中)和使用该compare
命令的拟合之间存在这种差异?我觉得这很奇怪,因为即使使用不同的数据集
experimental
和validation
,它们都来自同一个输入系列(输入 1 的脉冲持续时间和幅度不同;输入 2 是外生输入)。