主要内容

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

compare

将辨识模型输出与测量的输出进行比较

说明

绘制仿真和测量输出

compare(data,sys)仿真单个动态系统模型 sys 或动态系统模型数组的响应,并将每个模型的响应叠加在 data 中包含的绘制的输入/输出测量数据上。data 可以是时间表、逗号分隔的输入/输出矩阵对,或数据对象(例如 iddata 对象或 idfrd 对象)。

该图还显示了仿真响应和输出测量数据之间的拟合优度的归一化均方根 (NRMSE) 测量。

当您想要验证单个模型或想要评估从相同测量数据中辨识出的一组候选模型时,请使用此函数。

对于时间表和数据对象,compare 根据 sys 中的通道名称匹配输入/输出通道,并忽略不匹配的通道。

compare(data,LineSpec) 还指定了模型响应的线条类型、标记符号和颜色。

compare(data,sys1,...,sysN) 比较同一轴上多个动态系统的响应。compare 自动选择线路规格。

示例

compare(data,sys1,LineSpec1,...,sysN,LineSpecN) 使用为每个系统指定的线型、标记符号和颜色比较同一轴上多个系统的响应。

示例

预测模型输出

compare(___,kstep) 使用 kstep 指定的预测范围来预测 sys 的响应。预测使用输出测量以及输入测量来工程未来的响应。kstep 表示每个输出测量的时间点和最终预测响应的时间点之间的时间采样数。

有关预测的详细信息,请参阅Simulate and Predict Identified Model Output。您可以将此语法与任何先前的输入/输出组合一起使用。

示例

指定附加选项

compare(___,opt) 使用选项集配置比较。选项包括初始条件处理、数据偏移和数据选择。

示例

返回结果

[ymod,fit,ic] = compare(___) 返回模型响应 ymod、拟合优度值 fit 和初始条件 ic。此语法不会生成图表,因此任何线条设定都会被忽略。

示例

示例

全部折叠

辨识线性模型并使用生成该模型的数据来可视化仿真模型响应。

tt1 中加载输入/输出测量,并辨识三阶状态空间模型 sys

load sdata1 tt1;
sys = ssest(tt1,3);

sys 是一个连续时间辨识状态空间 (idss) 模型。

使用 compare 仿真 sys 响应并将其与 tt1 中的数据一起绘制。

figure
compare(tt1,sys)

Figure contains an axes object. The axes object with ylabel y contains 2 objects of type line. These objects represent Validation data (y), sys: 70.56%.

该图说明了模型响应和原始数据之间的差异。图例中显示的百分比是 NRMSE 适应度值。它表示预测模型输出与数据的接近程度。

要更改图中的显示选项,右键点击该图以访问上下文菜单。例如:

  • 要绘制预测输出和测量输出之间的误差,请选择 Error Plot

  • 要查看仿真响应的置信域,请选择 Characteristics-> ConfidenceRegion

  • 要指定要绘制的标准差数,请双击该图并打开 Property Editor 对话框。在 Options 选项卡中,指定 Confidence Region for Identified Models 中的标准差数。默认值是 1 标准差。

辨识线性模型并使用计算数据可视化预测的模型响应。

使用 umat1ymat1 中的输入/输出测量来辨识三阶状态空间模型。

load sdata1 umat1 ymat1 Ts
sys = ssest(umat1,ymat1,3,'Ts',Ts);

sys 是一个离散时间辨识状态空间 (idss) 模型。

现在使用 compare 来绘制预测响应。预测与仿真的不同之处在于,它在计算系统响应时同时使用测量的输入和测量的输出。预测范围定义了相对于当前测量的输出点,预测未来多远的情况。对于此示例,将预测范围 kstep 设置为 10 步,并使用 compare 绘制预测响应与原始测量数据的关系。

kstep = 10;
compare(umat1,ymat1,sys,kstep)

Figure contains an axes object. The axes object with ylabel y1 contains 2 objects of type line. These objects represent Validation data (y1), sys: 70.8%.

在此图中,每个 sys 数据点代表与至少 10 步前获取的输出测量数据相关的预测输出。例如,t = 15s 时的点基于 t = 5s 或之前进行的输出测量。这个 t = 15s sys 数据点的计算也使用了高达 t = 15s 的输入测量值,就像仿真一样。

该图说明了模型响应和原始数据之间的差异。图例中显示的百分比是 NRMSE 适应度值。它表示预测模型输出与数据的匹配程度。

要更改图中的显示和仿真选项,右键点击该图以访问上下文菜单。例如,要绘制预测输出和测量输出之间的误差,请从上下文菜单中选择 Error Plot。要更改预测范围值,或在仿真和预测之间切换,请从上下文菜单中选择 Prediction Horizon

确定同一数据的几种模型类型,并比较结果以查看哪种模型最适合数据。

加载数据,其中包含具有单个输入和输出的 iddata 对象 z1

load iddata1;

z1 中,为下列每个线性形式确定一个模型:

  • 2、3 和 1 阶 ARMAX (idpoly),死区时间为 0

  • 具有三个状态的状态空间 (idss)

  • 具有三个极点的传递函数 (idtf)

sys_armax = armax(z1,[2 3 1 0]);
sys_ss = ssest(z1,3);
sys_tf = tfest(z1,3);

使用 compare,绘制带有 z1 的三个模型的仿真响应。

compare(z1,sys_armax,sys_ss,sys_tf)

Figure contains an axes object. The axes object with ylabel y1 contains 4 objects of type line. These objects represent Validation data (y1), sys\_armax: 70.27%, sys\_ss: 70.56%, sys\_tf: 70.96%.

对于这组数据,以及所有模型的默认设置,传递函数形式具有最佳的 NRMSE 拟合度。然而,所有模型的拟合度都在 1% 左右的范围内。

您可以通过右键点击图表并将鼠标悬停在 Systems 上,以交互方式控制在图表中显示哪些模型响应。

将不同类型的多个估计模型的输出与测量的频域数据进行比较。

对于此示例,从频率响应数据估计过程模型和输出-误差多项式。

load demofr  % frequency response data
zfr = AMP.*exp(1i*PHA*pi/180);  
Ts = 0.1;
data = idfrd(zfr,W,Ts);  
sys1 = procest(data,'P2UDZ'); 
sys2 = oe(data,[2 2 1]);

sys1 是一个 idproc 模型,是一个连续时间过程模型。sys2 是一个 idpoly 模型,是一个离散时间输出-误差模型。

将估计模型的频率响应与数据进行比较。

compare(data,sys1,'g',sys2,'r');

Figure contains 2 axes objects. Axes object 1 with title From: u1, ylabel To: y1 contains 3 objects of type line. These objects represent Data, sys1: 88.04%, sys2: 88.04%. Axes object 2 with ylabel To: y1 contains 3 objects of type line. These objects represent Data, sys1: 88.04%, sys2: 88.04%.

这两个模型的 NRMSE 拟合值相对于计算它们的数据来说几乎相等。

当您将估计模型与测量数据进行比较时,修改默认行为。

估计测量数据的传递函数。

load sdata1 tt1;
sys = tfest(tt1,3);

sys 是一个连续时间辨识传递函数 (idtf) 模型。

假设您希望初始条件为零。compare 的默认值是从数据中估计初始条件。

创建一个选项集来指定初始条件处理。要使用零作为初始条件,请为 'InitialCondition' 选项指定 'z'

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

使用比较选项集将估计的传递函数模型输出与测量数据进行比较。

compare(tt1,sys,opt)

Figure contains an axes object. The axes object with ylabel y contains 2 objects of type line. These objects represent Validation data (y), sys: 70.66%.

加载数据。

load iddata2 z2

将数据分为估计集和验证集。

z2e = z2(1:200);
z2v = z2(201:400);
idplot(z2e,z2v)

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent untitled1, untitled2. Axes object 2 with title u1 contains 2 objects of type line. These objects represent untitled1, untitled2.

使用估计数据估计状态空间模型和传递函数模型。

sys_ss = ssest(z2e,2);
sys_tf = tfest(z2e,2,1);

使用 compare 获取 sys_ss 的初始条件 ic_ss

[y_ss,fit_ss,ic_ss] = compare(z2e,sys_ss);
ic_ss
ic_ss = 2×1

   -0.0018
    0.0016

ic_ss 是初始状态的数值向量。

使用 compare 获取 sys_tf 的初始条件 ic_tf

[y_tf,fit_tf,ic_tf] = compare(z2e,sys_tf);
ic_tf
ic_tf = 
  initialCondition with properties:

     A: [2×2 double]
    X0: [2×1 double]
     C: [-1.6093 5.1442]
    Ts: 0

ic_tf 是一个 initialCondition 对象,它以状态空间形式包含 sys_tf 对初始条件的自由响应模型。AC 包含自由响应信息,而 X0 包含初始状态。

现在使用验证数据立即获取两个模型的初始条件。

[y_sstf,fit_sstf,ic_sstf] = compare(z2v,sys_ss,sys_tf);
ic_sstf
ic_sstf=2×1 cell array
    {2×1 double          }
    {1×1 initialCondition}

ic_sstf 是一个元胞数组,包含 sys_ss 的初始状态向量和 sys_tfinitialCondition 对象。

compare 可以为具有任何测量数据集的现有模型提供初始条件。

输入参数

全部折叠

验证数据,指定为时间表、逗号分隔的矩阵对、元胞数组或数据对象。data 的设定取决于数据类型。

时间表

对于 SISO、MISO 和 MIMO 系统,将 data 指定为使用固定间隔时间向量的 timetable。对于 timetable 数据类型,data 包含代表输入和输出通道的变量。

data 必须具有与估计每个模型 sys 的原始数据相同的变量名称。模型属性包括输入和输出变量的名称。因此,您不需要明确指定在时间表中使用哪些频道。

对于多试验数据,将 data 指定为 1×Ne 元胞数组,其中 Ne 是试验的数量。所有试验的采样时间必须匹配。

矩阵

对于 SISO、MISO 和 MIMO 系统,将数据指定为一对矩阵,输入矩阵的维度为 Ns×Nu,输出矩阵的维度为 Ns×Ny。软件使用 sysTs 属性中的采样周期。

对于多试验数据,将 data 指定为一对 1×Ne 元胞数组数组,其中 Ne 是试验的数量。所有试验的采样时间必须与 sys 的采样时间相匹配。

数据对象

将数据指定为 iddataidfrdfrd 模型对象。

如果 sys 为:

  • 参数化模型例如 idss,然后 data 可以是 iddataidfrdfrd 模型对象。

  • 频率响应数据模型(idfrdfrd 模型对象),则 data 也必须是频率响应数据模型。

  • 如果是 iddata 对象,则 data 必须是一个具有匹配域、试验的数量和时间或频率向量的 iddata 对象。

例如,请参阅:

.

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

辨识模型,指定为动态系统模型iddata 对象或模型数组。

data 的时间或频率单位与 sys 的单位不匹配时,compare 会重新调整 sys 以匹配 data 的单位。

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

  • Inf - 将 sysdata 的仿真响应进行比较。

  • 正有限整数 - 将 sysdata 的预测响应进行比较,其中每个预测响应点不仅基于截至该时间点的测量输入数目据,还基于截至之前 kstep 个时间点的测量输出数目据。

sysiddata 对象、FRD 模型或没有噪声分量的动态系统时,compare 会忽略 kstep。当使用频率响应验证数据时,compare 也会忽略 kstep

如果指定的 kstep 大于数据采样的数量,则 compare 会将 kstep 设置为 Inf 并提供警告消息。

有关仿真和预测的详细信息,请参阅Simulate and Predict Identified Model Output

有关示例,请参阅将辨识的时域模型的预测响应与测量数据进行比较

线条样式、标记以及线条和标记的颜色,指定为字符向量,例如 'b''b+:'

有关配置 LineSpec 的详细信息,请参阅 plotLinespec 输入参量。有关示例,请参阅将多个估计模型与测量的频域数据进行比较

比较选项,指定为您使用 compareOptions 创建的选项集。

可用选项包括:

  • 初始条件的处理

  • 计算拟合值的采样范围

  • 数据偏移量

  • 输出加权

例如,请参阅:

输出参量

全部折叠

模型响应,以 timetable、矩阵、iddata 对象、idfrd 对象、元胞数组或数组的形式返回。输出类型取决于您提供的模型和数据,如下所示:

  • 对于单个模型和单试验数据集,ymodtimetable、矩阵、iddata 对象或 idfrd 对象。

  • 对于多模型比较,ymod 是一个元胞数组,每个输入模型有一个时间表、矩阵、iddata 对象或 idfrd 对象条目。

  • 对于多试验数据,ymod 是一个元胞数组,每个试验都有一个条目。

  • 对于使用多试验数据进行多模型比较,ymod 是一个 Nsys×Nexp 元胞数组,其中 Nsys 是模型数量,Nexp 是试验数量。

  • 如果说 sys 是一个模型数组,则 ymod 是一个数组,其中的元素分别对应 sys 中的每个模型以及 data 中的试验。有关模型数组的详细信息,请参阅 stack

如果未指定 kstep 或为 Inf,则 compare 将返回 ymod 中的仿真响应。

否则,compare 将返回预测的响应。在时间 tn-kstep 时测量的 data 中的输出值用于预测时间 tnsys 的输出。有关仿真和预测的详细信息,请参阅Simulate and Predict Identified Model Output

compare 响应计算需要初始条件处理的设定。默认情况下,compare 估计初始条件以最大化数据拟合。有关 compare 如何确定要使用的初始条件的详细信息,请参阅 compareOptions

NRMSE 适应度值指标表示仿真或预测模型响应与测量数据的匹配程度,以向量、矩阵或元胞数组的形式返回。输出取决于您提供的模型和数据,如下所示:

  • 如果 dataiddata 对象,则 fit 是长度为 Ny 的向量,其中 Ny 是输出数目

  • 如果 data 是 FRD 模型,则 fitNy×Nu 矩阵,其中 Nudata 中的输入数目量

  • 对于单个模型和单试验数据集,fit 是一个向量或矩阵

  • 对于多模型比较,fit 是一个元胞数组,每个输入模型都有一个条目

  • 对于多试验数据,fit 是一个元胞数组,每个试验对应一个条目

  • 对于使用多试验数据进行多模型比较,fit 是一个 Nsys×Nexp 元胞数组,其中 Nsys 是模型数量,Nexp 是试验数量

  • 如果 sys 是一个模型数组,则 fit 是一个数组,其元素分别对应 sys 中的每个模型和 data 中的试验

compare 使用

fit=100(1||yy^||||ymean(y)||),

计算 fit(百分比)

其中 y 是验证数据输出,y^sys 的输出。

对于 FRD 模型 - compare 通过比较复杂的频率响应来计算 fitcompare 图中所显示的幅值和相位曲线的拟合不是由 compare 单独计算的。

用于计算系统响应的初始条件,以空数组、向量、initialCondition 对象或元胞数组的形式返回。

对于单个模型和单试验数据,输出的形式取决于模型类型。

  • 对于状态空间模型,ic 是一个包含初始状态的数值向量。

  • 对于传递函数和多项式模型,ic 是一个 initialCondition 对象。initialCondition 以状态空间形式表示模型(AC 矩阵)对估计的初始状态 (x0) 的自由响应。

  • sysfrdiddata 对象时,ic 是空数组 [],因为初始条件不能与这些对象一起使用。

对于多个模型和/或试验,输出的形式如下:

  • 对于多模型比较,ic 是一个元胞或对象数组,每个输入模型有一个向量、矩阵或 initialCondition 条目。

  • 对于多试验数据,ic 是一个元胞或对象数组,每个试验都有一个条目。

  • 对于使用多试验数据的多模型比较,ic 是一个 Nsys×Nexp 元胞或对象数组,其中 Nsys 是模型数量,Nexp 是试验数量。

  • 如果说 sys 是一个模型数组,则 ic 是一个数组,其中的元素分别对应 sys 中的每个模型以及 data 中的试验。

默认情况下,compare 使用 findstates 来估计 ic 中的初始状态。要更改此行为,请在 opt 中设置 'InitialCondition' 选项(请参阅 compareOptions)。如果您有在起点之前的输入/输出历史记录,则可以将 'InitialCondition' 设置为该历史数据。然后 compare 使用 data2state 计算历史数据的结束状态,从而计算仿真的起始状态。其他选择包括将初始条件设置为零,或设置为您之前确定的特定值。有关查找初始条件的详细信息,请参阅Estimate Initial Conditions for Simulating Identified Models

如果您使用的估计模型没有明确使用状态,compare 首先将模型转换为其状态空间表示,然后将数据映射到初始状态。然后,compare 将初始状态向量以及 AC 状态空间矩阵打包到 initialCondition 对象中。有关使用 compare 和此类模型的示例,请参阅获取初始条件

提示

  • 使用 compare 获得的 NRMSE 拟合结果可能与模型辨识中报告的拟合值不完全匹配。这些差异通常源于初始条件的不匹配,以及预测范围辨识和验证默认值的差异。差异通常很小,不会影响您的模型选择和验证工作流程。有关详细信息,请参阅Resolve Fit Value Differences Between Model Identification and compare Command

  • compare 根据通道名称匹配 datasys 中的输入/输出通道。因此,可以评估不使用 data 中可用的所有输入通道的模型。这种灵活性使您可以比较多个模型,每个模型都是从不同的输入/输出通道集独立辨识的。

  • compare 图允许您改变关键参数。例如,您可以交互地控制:

    • 无论生成仿真响应还是预测响应

    • 预测时域值

    • 初始条件处理

    • 您查看的试验数据

    • 您查看哪些系统模型

    要访问控件,右键点击图表以调出选项菜单。

版本历史记录

在 R2006a 中推出

全部展开