主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

predict

预测辨识模型的 K 步输出

说明

predict 命令使用测量的输入-输出数目据计算辨识模型的 K 步输出。为了辨识模型,您首先要收集所有输入-输出数目据,然后离线估计模型参数。要使用实时数据对非线性系统进行在线状态估计,请改用扩展和无迹卡尔曼滤波器的 predict 命令。

yp = predict(sys,data,K) 使用测量的输入-输出数目据预测辨识模型 sysK 步输出。

predict 命令预测测量数据时间跨度内的输出响应。相比之下,forecast 在超出测量数据的最后一刻的时间范围内对未来进行预测。使用 predict 在测量数据的时间跨度内验证 sys

data 可以是时间表、逗号分隔的输入/输出矩阵对或 iddata 对象。

示例

yp = predict(sys,data,K,opt) 使用选项集 opt 来指定额外的预测选项,例如初始条件和数据偏移量的处理。

示例

[yp,ic,sys_pred] = predict(___) 还返回初始条件 ic 和预测模型 sys_pred 的估计值。将此语法与任何先前的输入参量组合一起使用。

示例

predict(sys,data,K,___) 绘制预测输出。与任何先前的输入参量组合一起使用。要更改图中的显示选项,右键点击该图以访问上下文菜单。有关菜单的更多详细信息,请参阅提示

您还可以使用 compare 命令绘制预测模型响应。compare 命令将预测结果与观察到的数据进行比较,并显示定量的拟合优度。

predict(sys,Linespec,data,K,___) 使用 Linespec 指定线型、标记符号和颜色。

predict(sys1,...,sysN,data,K,___) 绘制多个辨识模型的预测输出。predict 自动选择颜色和线型。

predict(sys1,Linespec1,...,sysN,LinespecN,data,K,___) 使用为每个模型指定的线型、标记符号和颜色。

示例

示例

全部折叠

仿真时间序列数据。

init_sys = idpoly([1 -0.99],[],[1 -1 0.2]);
opt = simOptions('AddNoise',true);
u = iddata([],zeros(400,0),1);
data = sim(init_sys,u,opt);

dataiddata 对象,其中包含时间序列模型的仿真响应数据。

使用 data 作为估计数据来估计 ARMAX 模型。

na = 1;
nb = 2;
sys = armax(data(1:200),[na nb]);

使用预测时域 4 来预测模型的输出。

K = 4;
yp = predict(sys,data,K);

ypiddata 对象。预测输出在对象的 OutputData 属性中返回。

比较预测数据输出和估计数据输出。

plot(data(201:400),yp(201:400));
legend('Estimation data','Predicted data');

Figure contains an axes object. The axes object with title y1 contains 2 objects of type line. These objects represent Estimation data, Predicted data.

或者,要绘制预测响应和估计数据,请使用 compare(sys,data,K)

加载估计数据。

load sdata1 tt1;
data = tt1;

估计阶数为 [2 2 1] 的 ARX 模型。

sys1 = arx(data,[2 2 1]);

估计具有 2 个极点的传递函数。

 sys2 = tfest(data,2);

创建 predict 选项集来将预测的初始条件指定为零。

opt = predictOptions('InitialCondition','z');

绘制估计模型的预测输出。使用指定的预测选项集 opt,并将预测时域指定为 10。指定绘制每个系统预测输出的线型。

predict(sys1,'r--',sys2,'b',data,10,opt);

Figure contains an axes object. The axes object with ylabel y contains 2 objects of type line. These objects represent Validation data (y), sys1, sys2.

要更改显示选项,请右键点击图以访问上下文菜单。例如,要查看估计数据,请从上下文菜单中选择 Show Validation Data。要查看预测误差,请选择 Prediction Error Plot

您还可以使用 compare 命令绘制预测响应。为此,请先为 compare 创建选项集来指定使用零初始条件。

opt = compareOptions('InitialCondition','z');
compare(data,sys1,'r--',sys2,'b',10,opt);

Figure contains an axes object. The axes object with ylabel y contains 3 objects of type line. These objects represent Validation data (y), sys1: 54.31%, sys2: 70.57%.

使用估计数据来估计模型,然后使用 predict 命令计算预测模型输出和预测器模型。仿真预测模型以重现预测输出。

加载估计数据。

load sdata3 umat3 ymat3 Ts

根据数据估计多项式模型。

sys = polyest(umat3,ymat3,[2 2 2 0 0 1]);

使用预测时域 4 预测系统响应。

K = 4;
[yp,ic,sysp] = predict(sys,umat3,ymat3,K);

yp 是预测模型响应,ic 包含估计的初始条件,sysp 是预测器模型。

使用输入 [data.OutputData,data.InputData] 和初始条件 ic 仿真预测器模型。

opt = simOptions;
opt.InitialCondition = ic;
ys = sim(sysp,[ymat3,umat3],opt);

绘制预测输出和仿真输出。

ns = size(ys,1);
t = [1:Ts:ns]';

plot(t,yp,'b',t,ys,'.r');
legend('Predicted Output','Simulated Output')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Predicted Output, Simulated Output.

将您之前获得的初始条件纳入到您的模型预测中。

加载数据。

load iddata1ic z1i

指定 ARMAX 估计选项来估计初始状态。

estimOpt = armaxOptions('InitialCondition','estimate');

估计 ARMAX 模型并返回以状态空间形式封装初始条件的 initialCondition 对象 ic

na = 2;
nb = 2;
nc = 2;
nk = 1;
[sys,ic] = armax(z1i,[na nb nc nk],estimOpt);

指定预测的初始条件。

predictOpt = predictOptions('InitialCondition',ic);

预测模型并获得模型响应。使用测量数据绘制响应 y

y = predict(sys,z1i,predictOpt);
plot(z1i,y)
legend('Measured Data','Predicted Response')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent Measured Data, Predicted Response. Axes object 2 with title u1 contains an object of type line. This object represents Measured Data.

在预测开始时,测量的响应和预测的响应显示出良好的一致性。

使用历史数据执行模型预测以指定初始条件。您首先使用 predict 命令进行预测,并使用 predictOptions 选项集指定历史数据。然后,您可以通过手动将历史数据映射到初始状态来重现预测的响应。

加载双输入单输出数目据集。

load iddata7 z7

使用数据辨识五阶状态空间模型。

sys = n4sid(z7,5);

将数据集分成两部分。

zA = z7(1:15);
zB = z7(16:end);

假设您想要计算辨识系统对数据 zB 响应的 10 步预测。对于初始条件,使用 zA 中的信号值作为历史记录。即 zB 中数据之前时间的输入值和输出值。

IO = struct('Input',zA.InputData,'Output',zA.OutputData);
opt = predictOptions('InitialCondition',IO);

使用指定的初始条件和 predict 对数据 zB 生成 10 步预测。

[yp,x0,Predictor] = predict(sys,zB,10,opt);

yp 是预测模型响应,x0 是对应于预测器模型 Predictor 的初始状态。您可以使用 x0 作为初始条件仿真 Predictor 来重现 yp.OutputData

现在,可通过手动将历史数据映射到初始状态来重现输出。为此,最小化 zA 时间跨度内的 1 步预测误差。

x0est = data2state(sys,zA);

x0est 包含 zA 中最新数据采样之后的时刻 sys 的五个状态值。

在 10 步预测时域下,Predictor 的状态比原始系统要多。将时域引起的附加状态指定为零初始值,然后附加 x0est

x0Predictor = zeros(order(Predictor),1);
x0Predictor(end-4:end) = x0est;

使用 [zB.OutputData,zB.InputData] 作为输入信号并使用 x0Predictor 作为初始条件仿真预测器。

uData = [zB.OutputData,zB.InputData]; % signals required for prediction
[ysim,t,xsim] = lsim(Predictor,uData,[],x0Predictor);

绘制 predict 命令 yp.OutputData 的预测输出和手动计算的结果 ysim

plot(t,yp.OutputData,t,ysim, '.')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

ysimyp.OutputData 相同。

输入参数

全部折叠

要预测输出的辨识模型,指定为以下项之一:

如果模型不可用,则使用 ararmaxtfestnlarxssest 等命令根据 data 估计 sys

均匀采样的测量输入/输出数目据,指定为 timetable、以逗号分隔的数值输入/输出矩阵对或 iddata 对象。data 的设定取决于数据类型。

时间表

data 指定为使用固定间隔时间向量的 timetable。包含表示输入和输出通道的变量。

逗号分隔的矩阵对

data 指定为以逗号分隔的矩阵对,其中包含输入和输出时域信号值 uy。指定维度为 Ns×Nu 的输入矩阵和维度为 Ns×Ny 的输出矩阵,其中 Nu 是输入数目,Ny 是输出数目,Ns 是采样的数量。

对于时间序列数据,指定 [],y

仅对离散时间模型使用基于矩阵的数据。

数据对象

将数据指定为包含输入和输出数目据的 iddata 对象。对于时间序列数据(无输入),将 data 指定为没有输入的 iddata 对象。

有关使用估计数据类型的详细信息,请参阅Data Domains and Data Types in System Identification Toolbox

预测时域,指定为以下项之一:

  • 正整数 - 输出 yp 计算为未来 K 步的结果,其中 K 表示 data 采样时间的倍数。

    t 时刻的输出是使用截至 t-K 时间之前测量的输出以及截至 t 时刻的输入计算得出的。

  • Inf - 计算中未使用任何先前的输出,并且 predict 返回的结果与使用 sim 命令的仿真相同。

对于输出-误差模型,K 预测和仿真输出之间没有差别。这是因为输出-误差模型仅使用过去的输入来预测未来的输出。

注意

对于严格的模型验证,一步预测 (K = 1) 通常不是在测量数据的时间跨度内验证模型 sys 的有效测试方法。即使是简单的一步预测器 y^(t)=y(t1) 也可以提供有效的预测。因此,不准确的模型可能适用于对采样时间较少的数据进行一步预测。使用 K = Inf 进行预测与使用 sim 命令执行仿真相同,可能会导致输出发散,因为数据中的低频扰动被放大,尤其是对于具有积分的模型。使用 1Inf 之间的 K 值来捕获测量数据的中频行为。

预测选项,指定为 predictOptions 选项集。使用选项集指定预测选项,例如初始条件和数据偏移量的处理。

线型、标记和颜色,指定为字符向量。例如,'b''b+:'

有关配置 Linespec 的详细信息,请参阅 plot 的 Linespec 参量。

输出参量

全部折叠

预测的输出响应,以与 data 相同的形式返回。

dataiddata 对象时,ypOutputData 属性存储预测输出的值。时间变量采用由 data.SamplingInstants 表示的范围内的值。

t 时刻的输出是使用截至 t-K 时间之前测量的输出以及截至 t 时刻的输入计算得出的。换句话说,测量数据的时间点 r 的预测响应存储在 ypr+K-1 采样中。请注意,在 r 时间,预测所需的未来输入 u(r+1)u(r+2)、...、u(r+K) 假定为已知。对于多试验数据,yp 包含每个试验的预测数据集。预测输出的时间跨度与观察到的数据的时间跨度相匹配。

当使用 idnlhwidnlgrey 模型指定 sys 时,yp 与使用 data.InputData 作为输入计算的仿真响应相同。

与预测器模型 sys_pred 对应的估计初始条件,以列向量、initialCondition 对象或元胞数组的形式返回。

  • 如果 sys 是线性传递函数或多项式模型,则 icinitialCondition 对象。initialCondition 对象以状态空间形式封装 sys 的自由响应以及相应的初始状态向量。

  • 如果 sys 是任何其他类型的线性或非线性动态模型,则 ic 是初始状态向量,以大小等于状态数的列向量形式返回。

  • 如果 data 包含多试验数据,则 ic 是大小为 Ne 的元胞数组,其中 Ne 是试验的数量。

为了重现预测结果,您可以使用 ic 作为初始条件来仿真 sys_pred。有关示例,请参阅通过仿真重现预测结果

如果 sysidnlarx 模型,则 ic 返回为空。

预测器模型,以动态系统模型的形式返回。对于多试验数据,sys_pred 是模型数组,每个试验都对应有一个条目。您可以使用预测器模型 sys_pred 和估计初始条件 ic 来重现预测结果:

  • 如果 sys 是线性模型,则返回预测器模型作为类型与 sys 相同的模型或该模型的状态空间版本 (idss)。为了重现预测结果,使用 [data.OutputData data.InputData] 作为输入并使用 ic 作为初始条件来仿真 sys_pred。仿真输出与预测输出 yp.OutputData 相同。有关示例,请参阅通过仿真重现预测结果

  • sys 是非线性灰盒模型 (idnlgrey) 或哈默斯坦-维纳模型 (idnlhw) 时,模型的噪声分量很简单,因此预测器模型与该模型相同。sys_pred 返回为空。为了重现预测结果,使用初始条件 ic 仿真 sys。有关 idnlhw 模型状态的定义,请参阅Definition of idnlhw States

  • 如果 sys 是非线性 ARX 模型 (idnlarx),则 sys_predic 将返回为空。您无法通过仿真重现预测结果。

对于离散时间数据,即采样时间 Ts 大于零的时域或频域数据,sys_pred 是离散时间模型,即使 sys 是连续时间模型。

提示

  • 右键点击预测输出的图将打开上下文菜单,您可以在其中访问以下选项:

    • Systems - 选择系统来查看预测响应。默认情况下,将绘制所有系统的响应。

    • Data Experiment - 仅适用于多试验数据。在不同试验的数据之间切换。

    • Characteristics - 查看以下数据特征:

      • Peak Value - 查看数据的绝对峰值。仅适用于时域数据。

      • Peak Response - 查看数据的峰值响应。仅适用于频率响应数据。

      • Mean Value - 查看数据的均值。仅适用于时域数据。

    • Show - 仅适用于频域和频率响应数据。

      • Magnitude - 查看系统频率响应的幅值。

      • Phase - 查看系统频率响应的相位。

    • Show Validation Data - 绘制用于预测模型响应的数据。

    • I/O Grouping - 适用于包含多个输入或输出通道的数据集。选择图上的输入和输出通道的分组。

      • None - 在各自的轴上绘制输入-输出通道。

      • All - 将所有输入通道组合在一起,将所有输出通道组合在一起。

    • I/O Selector - 适用于包含多个输入或输出通道的数据集。选择输入和输出通道的子集进行绘制。默认情况下,将绘制所有输出通道。

    • Grid - 向图中添加网格。

    • Normalize - 归一化图中所有数据的 y 刻度。

    • Full View - 返回完整视图。默认情况下,绘图会缩放至完整视图。

    • Prediction Horizon - 设置预测时域,或选择仿真。

    • Initial Condition - 指定初始条件的处理。不适用于频率响应数据。

      指定为下列项之一:

      • Estimate - 将初始条件视为估计参数。

      • Zero - 将所有初始条件设置为零。

      • Absorb delays and estimate - 将非零延迟吸收到模型系数中,并将初始条件视为估计参数。此选项仅适用于离散时间模型。

    • Predicted Response Plot - 绘制预测模型响应。默认情况下,将显示响应图。

    • Prediction Error Plot - 绘制模型响应和预测数据之间的误差。

    • Properties - 打开 Property Editor 对话框来自定义绘图属性。

版本历史记录

在 R2006a 之前推出

全部展开