预测一个动态系统的响应是使用过去的输出测量来预测系统未来的输出。换句话说,给定的观察结果y(t) = {y (1)、……y (N)}的输出,预测是对输出的预测y (N + 1)、……y (N + H)直到一个未来的时间范围H.
当您在System Identification Toolbox™软件中执行预测时,您首先确定一个适合系统中过去测量数据的模型。该模型可以是线性时间序列模型,如AR、ARMA和状态空间模型,也可以是非线性ARX模型。如果外部输入影响系统的输出,您可以使用ARX和ARMAX等输入-输出模型进行预测。在确定模型之后,您就可以使用预测
命令来计算y (N + 1)、……y (N + H).该命令通过以下方式计算预测值:
使用已识别的模型生成预测模型。
使用过去的测量数据计算预测器的最终状态。
模拟已识别的模型直到所需的预测范围,H,将末态作为初始条件。
本主题说明了线性和非线性模型的预测步骤。在没有外部输入(时间序列数据)的情况下预测系统的响应,然后预测有外部输入的系统。有关如何在工具箱中执行预测的信息,请参见预测动态系统的输出.
这个工具箱允许您使用线性模型(如AR、ARMA和状态空间模型)预测时间序列(仅输出)数据。下面是预测自回归模型响应的说明,接下来是对更复杂的模型(如移动平均模型和状态空间模型)的预测步骤。
假设您已经收集了时间序列数据y(t) = {y (1)、……y (N)}的一个平稳随机过程。假设数据是一个二阶自回归(AR)过程,可以用下面的AR模型来描述动态:
在哪里一个1和一个2拟合系数和e(t)为噪声项。
您可以使用基于“增大化现实”技术
命令。该软件计算的拟合系数和方差e(t),最大限度地减少观测值之间的一步预测误差{y (1)、……y (N)}和模型响应。
假设这些创新e(t)是一个零均值的白序列,您可以计算预测输出 使用公式:
在哪里y (t - 1)和y (2)是测量数据(如果可用)或先前的预测值。例如,预测输出未来的五个步骤是:
注意。的计算 使用先前的预测值 因为在时间步长之后无法获得测量数据N.因此,测量数据的直接贡献会随着你对未来的预测而减少。
对于包含移动平均项的时间序列过程,预测公式更为复杂。
在移动平均(MA)模型中,产出取决于当前和过去的创新(e(t),e(t1),e(t2),e(t3)……)。因此,预测MA模型的响应需要了解测量数据的初始条件。
假设时间序列数据y(t)可以适用于二阶移动平均模型:
假设y (1)
和y (2)
是唯一可用的观测值,它们的值分别为5和10。你可以估计模型系数c1和c2使用armax
命令。假设估计的c1和c2值分别为0.1和0.2。然后假设和之前一样e(t)是一个均值为零的随机变量,您可以预测时刻的输出值t使用以下公式:
在哪里e (t - 1)
和e (2)
有时测量的和预测的反应是否有差异t - 1
和2
,分别。如果测量数据在这些时间不存在,则使用零值,因为创新过程e(t)为零均值高斯白噪声。
因此,预测当时的产量t= 3是:
在那里,创新e (1)
和e (2)
在某一时刻产出的观测值和预测值之间是否有差异t等于1
和2
分别为:
因为数据是从时间开始测量的t等于1
的价值e (0)
和e (1)
是未知的。因此,为了计算预测输出,这些初始条件的值e (0)
和e (1)
是必需的。你可以假设零初始条件,或者估计它们。
零初始条件:如果指定的话e (0)
和e (1)
= 0,则误差值和预测输出为:
预测值t= 4和5是:
在这里e (3)
和e (4)
都被假定为零,因为没有超越时间的测量t= 2。这种假设收益率,
,
.
因此,对于这个二阶MA模型,预测输出超出最后测量数据点(t= 2)都是零。一般情况下,当初始条件为零时,无自回归项的纯MA模型的阶外预测值均为零。
估计初始条件:你可以通过最小化所有测量数据的一步预测误差的平方和来估计初始条件。
对于前面描述的MA模型,初始条件的估计e (0)
和e (1)
需要最小化以下最小二乘成本函数:
替换一个
=e (0)
和b
=e (1)
,成本函数为:
最小化V收益率e (0)
= 50,e (1)
= 0,得到:
因此,对于这个系统,如果在可用的两个样本上的预测误差最小,那么所有未来的预测都等于零,这是过程的平均值。如果有两个以上的观测值,你就会估计e (1)
和e (0)
使用最小二乘方法最小化所有可用数据的一步预测误差。
这个示例展示了如何使用预测
命令。
加载测量数据。
PastData = (5; 10);
建立A和C多项式系数分别为1和[1 0.1 0.2]的MA模型。
模型= idpoly(1,[],[1 0.1 0.2]);
指定零初始条件,并预测未来五步后的输出。
选择= forecastOptions (“InitialCondition”,“z”);yf_zeroIC =预测(模型、PastData 5,选择)
yf_zeroIC =5×11.9500 1.9000 000
指定软件估计初始条件,并预测输出。
选择= forecastOptions (“InitialCondition”,“e”);yf_estimatedIC =预测(模型、PastData 5,选择)
yf_estimatedIC =5×110-15年× -0.3553 -0.3553 0 0
对于任意结构模型,如自回归模型和移动平均项,可以涉及到预测过程,因此最好用状态空间形式描述。
时间序列数据的离散时间状态空间模型形式为:
在那里,x(t)为状态向量,y(t)为输出,e(t)是噪声项。一个,C,K是固定系数的状态空间矩阵。
可以用状态空间的形式表示任意结构的线性模型。例如,可以证明前面描述的ARMA模型是用状态空间形式表示的A = [0 0;1 0]
,(K = 0.5; 0]
和C = [0.2 0.4]
.您可以使用以下命令从观察到的数据估计状态空间模型党卫军
和n4sid
.可以将现有的多项式模型(如AR、MA、ARMA、ARX和ARMAX)转换为状态空间形式中的难点
命令。
状态空间形式的优点是任何具有多个时间滞后项的自回归或移动平均模型(t - 1
,2
,条t - 3
,…)只有一个时间延迟(t - 1
)在状态变量中,当模型转换为状态空间形式时。因此,预测所需的初始条件转化为初始状态向量的单个值X (0)
.的预测
命令将所有线性模型转换为状态空间形式,然后进行预测。
预测状态空间模型的响应:
为已识别的模型生成一个提前一步的预测模型。预测模型的形式为:
在哪里y(t)为测量输出和 为预测值。测量的输出直到时间步长为止N并作为预测模型的输入。初始状态向量是 .
给初始状态向量赋值x0.
初始状态要么指定为零,要么通过在测量数据时间跨度内最小化预测误差来估计。
如果在收集观测数据之前系统处于静止状态,则指定零初始条件。如果预测器模型足够稳定,您还可以指定零初始条件,因为稳定性意味着初始条件的影响随着观测数据的收集而迅速减小。当特征值为。时,预测模型是稳定的a - k * C
都在单位圆内。
计算
,表示该时刻的状态值t = N + 1
,在最后一个可用数据样本之后的时间瞬间。
为此,使用测量的观测值作为输入来模拟预测器模型:
对所识别模型的响应进行模拟H
步骤使用
作为初始条件,其中H
是预测视界。这个响应是模型的预测响应。
预测
命令该示例显示如何手动重现使用预测
命令。首先使用预测
命令来预测时间序列数据到未来。然后将预测结果与预测算法的手动实现进行比较。
加载时间序列数据。
负载iddata9z9
z9
是一个iddata
对象,该对象存储时间序列数据(无输入)。
指定用于模型估计的数据。
observed_data = z9 (1:128);Ts = observed_data.Ts;t = observed_data.SamplingInstants;y = observed_data.y;
Ts
为测量数据的采样时间,t
是时间向量吗y
为测量数据的向量。
估计一个四阶离散时间状态空间模型。
sys = ss (observed_data 4“t”、Ts);
方法预测状态空间模型100步以后的输出预测
命令。
H = 100;yh1 =预测(sys, observed_data, H);
yh1
预测产量是否使用预测
命令。控件使用的算法现在通过手动实现重新生成输出预测
命令。
检索估计的状态空间矩阵来创建预测模型。
一个= sys.A;K = sys.K;C = sys.C;
生成一个提前一步的预测器一个
矩阵的预测
模型是a - k * C
和B
矩阵是K
.
预测= idss ((a - K * C)、K、C、0,“t”、Ts);
估计初始状态,使观测输出之间的差异最小化y
以及识别模型的一步预测响应sys
.
x0 = findstates (sys observed_data 1);
将状态向量传播到观测数据的末尾。要做到这一点,使用y
作为输入,并x0
为初始状态。
输入= iddata ([], y, Ts);选择= simOptions (“InitialCondition”, x0);(~ ~ x) = sim(预测、输入、选择);xfinal = x(最终:)”;
xfinal
状态向量在时刻的值是多少t(结束)
,即可获得观测数据的最后时刻。预测未来的100个时间步从下一个时间步开始,t1 = t(结束)+ Ts
.
实现了预测算法,得到了时刻的状态向量值t1
是必需的。利用状态更新方程计算状态向量预测
模型xfinal
.
x0_for_forecasting =预测。* xfinal + Predictor.B * y(结束);
对所识别的模型进行仿真H
步骤使用x0_for_forecasting
作为初始条件。
选择= simOptions (“InitialCondition”, x0_for_forecasting);
因为sys
是一个时间序列模型,为模拟指定输入作为一个H
由0信号,H
为所需的仿真输出样本数。
输入= iddata ([], 0 (H, 0), Ts,“Tstart”t(结束)+ Ts);yh2 = sim (sys,输入,选择);
比较结果预测
命令yh1
与手工计算的结果yh2
.
情节(yh1 yh2,“r”。)
图表显示结果是匹配的。
当有外源性刺激影响系统时,系统不能被认为是静止的。然而,如果这些刺激是可测量的,那么你可以将它们作为系统的输入,并在预测系统的输出时考虑它们的影响。预测外生输入数据的工作流程与预测时间序列数据的工作流程类似。首先确定一个模型来适应测量的输入-输出数据。然后为预测时间跨度指定预期的输入值,并使用预测
命令。如果您没有指定预期的输入值,则假定它们为零。
这个例子展示了如何预测工具箱中有外生输入的ARMAX模型:
负载的输入-输出数据。
负载iddata1z1
z1
是一个iddata
对象具有300个时间点的输入输出数据。
使用前一半的数据作为过去的数据进行模型识别。
past_data = z1 (1:15);
确定一个ARMAX模型Ay(t) = Bu(t-1) + Ce(t),阶[2 2 2 1]。
na = 2;多项式阶nb = 2;% B多项式阶数控= 2;% C多项式阶nk = 1;%的输入延迟Sys = armax(past_data,[na nb nc nk]);
预测100个时间步后的响应,超过最后的观测数据样本past_data
.在未来的100个时间点指定预期的输入。
H = 100;FutureInputs = z1.u (151:250);预测(sys past_data H, FutureInputs)传说(“过去的输出”,“未来的输出”)
工具箱还允许您使用非线性ARX、Hammerstein-Wiener和非线性灰箱模型预测数据。
Hammerstein-Wiener和非线性灰箱模型都有一个琐碎的噪声分量,即模型中的扰动是用白噪声来描述的。因此,使用预测
命令与执行纯模拟相同。
时间序列非线性ARX模型的结构如下:
在哪里f是有输入的非线性函数吗R(t),模型回归器。回归变量可以是时滞变量y (t - 1),y (2),...,y (sn)以及它们的非线性表达式,例如y (t - 1)2,y y (t - 1) (2),abs (y (t - 1)).当您从测量数据估计非线性ARX模型时,您指定模型回归器。也可以指定的结构f使用不同的结构,如小波网络和树划分。有关的更多信息,请参阅参考页nlarx
估计命令。
假设你的系统中的时间序列数据可以符合一个二阶线性回归模型,该模型具有以下多项式回归器:
然后f (R) = W ' * R + c
,在那里W = [W1w2w3.w4w5]
是一个权重向量吗c
为输出偏移量。
非线性ARX模型的形式为:
当你用nlarx
命令,软件估计模型参数W
和c
.
当你使用预测
命令后,软件通过对模型的仿真,计算出预测的模型输出H时间踏进未来,用过去N测量输出样本作为初始条件。在哪里N最大的滞后是在回归量,和H是您指定的预测地平线。
对于线性回归模型,假设您已经测量了100个输出样本y,你想预测未来的四个步骤(H= 4).模型回归量的最大滞后是N= 2。因此,软件取最后两个样本的数据y (99)
和y (100)
为初始条件,预测输出为:
如果你的系统有外生输入,非线性ARX模型还包括依赖于输入变量的回归量。预测过程与时间序列数据的预测过程相似。首先确定模型,sys
,使用输入输出数据,past_data
.当你预测数据时,软件会模拟已识别的模型H时间踏进未来,用过去N测量输出样本作为初始条件。您还可以为预测时间跨度指定预期的输入值,FutureInputs
.预测具有外生输入的非线性模型的响应的语法与线性模型相同,预测(sys past_data H, FutureInputs)
.