1

我对以下 Matlab 观察感到非常困惑。

在我的问题中,我试图从离散的采样输入输出数据中估计一个 ARX/ARMAX 模型。我正在按照 Matlab 的指南在命令行中识别线性​​模型(使用系统识别工具箱)

  • 我的数据集是 980 个输入-输出对(实验),采样时间为Ts = 10秒(2 个输入,1 个输出)。我将数据my_data分成 490 个实验的两个子集:experimentalvalidation.
  • 运行delayest(my_data)表明任何输入都没有延迟。因此nk1=0nk2=0
  • selstruc和识别订单arxstruc让我可以选择订单na和。nb1nb2
  • 我将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命令的拟合之间存在这种差异?

  • 我觉得这很奇怪,因为即使使用不同的数据集experimentalvalidation,它们都来自同一个输入系列(输入 1 的脉冲持续时间和幅度不同;输入 2 是外生输入)。

4

0 回答 0