动态系统响应预测导论“,
预测动态系统的响应是利用过去的输出测量来预测系统未来的输出。换句话说,给定的观察结果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)通过最小化观测之间的1步预测误差{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];
创建一个MA模型,其中A和C多项式系数分别为1和[1 0.1 0.2]。
Model = idpoly(1,[],[1 0.1 0.2]);
指定零初始条件,并预测未来五步的输出。
opt = forecastOptions(“InitialCondition”,“z”);yf_zeroIC = forecast(model,PastData,5,opt)
yf_zeroIC =5×11.9500 1.9000 000
指定软件估计初始条件,并预测输出。
opt = forecastOptions(“InitialCondition”,“e”);yf_estimatedIC = forecast(model,PastData,5,opt)
yf_estimatedIC =5×110-15年× -0.3553 -0.3553 0 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 = ssest(observed_data,4,“t”、Ts);
预测状态空间模型在未来100步后的输出预测
命令。
H = 100;yh1 = forecast(sys,observed_data,H);
yh1
预测产量是否使用预测
命令。方法使用的算法现在通过手动实现重新生成输出预测
命令。
检索估计的状态空间矩阵以创建预测器模型。
A = 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
作为初始状态。
Input = iddata([],y,Ts);opt = simOptions(“InitialCondition”, x0);[~,~,x] = sim(Predictor,Input,opt);Xfinal = x(end,:)';
xfinal
状态向量是时刻的值吗t(结束)
,观测数据可用的最后时刻。预测未来100个时间步从下一个时间步开始,t1 = t(end)+Ts
.
实现预测算法时,状态向量在时间上的值t1
是必需的。应用的状态更新方程计算状态向量预测
模型xfinal
.
x0_for_forecasting = Predictor。A*xfinal + Predictor.B*y(end);
模拟所识别的模型H
步骤使用x0_for_forecasting
作为初始条件。
opt = simOptions(“InitialCondition”, x0_for_forecasting);
因为sys
是时间序列模型,指定输入仿真作为H
-by-0信号,其中H
是模拟输出样本的期望数量。
输入= iddata([], 0 (H,0), t,“Tstart”t(结束)+ Ts);yh2 = sim(sys,Input,opt);
比较的结果预测
命令yh1
用人工计算的结果yh2
.
情节(yh1 yh2,“r”。)
图表显示结果是一致的。
外源输入线性模型的预测响应
当存在外源性刺激影响系统时,系统不能被认为是静止的。然而,如果这些刺激是可测量的,那么您可以将它们视为系统的输入,并在预测系统输出时考虑它们的影响。具有外源输入的预测数据的工作流程与预测时间序列数据的工作流程相似。您首先确定一个模型来拟合测量的输入-输出数据。方法指定预测时间跨度的预期输入值,并预测已识别模型的输出预测
命令。如果您没有指定预期的输入值,则假定它们为零。
这个例子展示了如何在工具箱中使用外生输入来预测ARMAX模型:
加载输入输出数据。
负载iddata1z1
z1
是一个iddata
对象,其中包含300个时间点的输入输出数据。
使用前半部分的数据作为模型识别的过去数据。
Past_data = z1(1:50 0);
确定一个ARMAX模型Ay(t) = Bu(t-1) + Ce(t),阶为[2 2 2 1]。
Na = 2;%多项式阶Nb = 2;% B多项式阶Nc = 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模型的预测响应
时间序列非线性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)
.