主要内容

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

goodnessOfFit

用于分析和验证辨识模型的测试数据和参考数据之间的拟合优度

说明

goodnessOfFit 返回表示测试数据集和参考数据集之间的误差范数的拟合值。如果您想将仿真模型输出与测量数据进行比较和可视化,另请参阅 compare

fit = goodnessOfFit(x,xref,cost_func) 使用成本函数 cost_func 返回测试数据 x 和参考数据 xref 之间的拟合优度。fitxxref 接近程度的定量表示。要执行多个测试与参考拟合度比较,您可以将 xxref 指定为包含多个测试和参考数据集的相同大小的元胞数组。通过元胞数组输入,fit 返回一个拟合值数组。

示例

示例

全部折叠

找到测量输出数目据和估计模型的仿真输出之间的拟合优度。

获得测量的输出。

load iddata1 z1
yref = z1.y;

z1 是一个包含测量的输入-输出数目据的 iddata 对象。z1.y 是测量的输出。

估计二阶传递函数模型并仿真模型输出 y_est

sys = tfest(z1,2);
y_est = sim(sys,z1(:,[],:)); 

计算测量输出和估计输出之间的拟合优度或误差范数。将归一化均方根误差 (NRMSE) 指定为成本函数。

cost_func = 'NRMSE';
y = y_est.y;
fit = goodnessOfFit(y,yref,cost_func) 
fit = 
0.2943

或者,您可以使用compare来计算拟合度。compare 使用 NRMSE 成本函数,并使用误差范数的补码来表示拟合百分比。因此,comparegoodnessOfFit 之间的拟合关系是 fitcompare=(1-fitgof)*100compare 结果 100% 相当于 goodnessOfFit 结果 0。

指定初始条件为零,以匹配 goodnessOfFit 假设的初始条件。

opt = compareOptions('InitialCondition','z');
compare(z1,sys,opt);

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.57%.

拟合结果是等效的。

找出两个模型的测量输出和估计输出之间的拟合优度。

iddata2 获取输入-输出测量值 z2。将测量的输出复制到参考输出 yref

load iddata2 z2
yref = z2.y;

使用 z2 估计二阶和四阶传递函数模型。

sys2 = tfest(z2,2);
sys4 = tfest(z2,4);

仿真两个系统以获得估计输出。

y_sim2 = sim(sys2,z2(:,[],:));
y2 = y_sim2.y;
y_sim4 = sim(sys4,z2(:,[],:));
y4 = y_sim4.y;

根据参考和估计输出创建元胞数组。两个模型比较的参考数据集是相同的,因此创建相同的参考单元。

yrefc = {yref yref};
yc = {y2 y4};

计算三个成本函数的 fit 值。

fit_nrmse = goodnessOfFit(yc,yrefc,'NRMSE')
fit_nrmse = 1×2

    0.1429    0.1345

fit_nmse = goodnessOfFit(yc,yrefc,'NMSE')
fit_nmse = 1×2

    0.0204    0.0181

fit_mse = goodnessOfFit(yc,yrefc,'MSE')
fit_mse = 1×2

    1.0811    0.9586

拟合值 0 表示参考输出和估计输出之间完美拟合。随着拟合优度的降低,拟合值会上升。对于所有三个成本函数,四阶模型比二阶模型产生更好的拟合效果。

输入参数

全部折叠

要测试的数据,指定为矩阵或元胞数组。

  • 对于单个测试数据集,指定一个 Ns×N 矩阵,其中 Ns 是采样数,N 是通道数。您必须将 cost_fun 指定为 'NRMSE''NMSE' 才能使用多通道数据。

  • 对于多个测试数据集,指定长度为 Nd 的元胞数组,其中 Nd 是测试到参考对的数量,每个元胞都都包含一个数据矩阵。

x 不能包含任何 NaNInf 值。

用于与 x 进行比较的参考数据,指定为矩阵或元胞数组。

  • 对于单个参考数据集,指定一个 Ns×N 矩阵,其中 Ns 是采样数,N 是通道数。xref 的大小必须与 x 相同。您必须将 cost_fun 指定为 'NRMSE''NMSE' 才能使用多通道数据。

  • 对于多个参考数据集,指定长度为 Nd 的元胞数组,其中 Nd 是测试到参考对的数量,每个元胞都包含一个参考数据矩阵。与单个数据矩阵一样,xxref 的元胞数组大小必须匹配。fit 的每个第 i 个元素对应于 xxref 的第 i 个元胞对。

xref 不能包含任何 NaNInf 值。

用于确定拟合优度的成本函数,指定为以下值之一。在方程中,值 fit 适用于一对测试数据集和参考数据集。

描述方程注释
'MSE'均方误差

fit=xxref2Ns

其中 Ns 是采样数,‖表示向量的 2 范数。

fit 是标量。
'NRMSE'归一化均方根误差

fit(i)=xref(:,i)x(:,i)xref(:,i)mean(xref(:,i))

其中 ‖ 表示向量的 2 范数。fit 是长度为 N 的行向量,i = 1,...,N,其中 N 是通道数。

fit 是一个行向量。'NRMSE'compare 使用的成本函数。

'NMSE'归一化均方误差

fit(i)=xref(:,i)x(:,i)2xref(:,i)mean(xref(:,i))2

fit 是行向量。

输出参量

全部折叠

测试和参考数据集对之间的拟合优度,以标量、行向量或元胞数组的形式返回。

  • 对于单个测试和参考数据集对,fit 作为标量或行向量返回。

    • 如果 cost_fun'MSE',则 fit 是标量。

    • 如果 cost_fun'NRMSE''NMSE',则 fit 是长度为 N 的列向量,其中 N 是通道数。

  • 对于多个测试和参考数据集对,其中 xxref 是长度为 ND 的元胞数组,fit 作为向量或矩阵返回。

    • 如果 cost_fun'MSE',则 fit 是长度为 ND 的行向量。

    • 如果 cost_fun'NRMSE''NMSE',则 fit 是一个大小为 N×Nd 的矩阵,其中 N 是通道数(数据列),Nd 表示测试对的数量。

    fit 的每个元素都包含相应测试数据和参考对的拟合优度值。

各个拟合元素的可能值取决于 cost_func 的选择。

  • 如果 cost_func'MSE',则每个 fit 值都是一个正标量,它会随着测试数据和参考数据之间的误差而增长。fit0 表示测试数据和参考数据完全匹配。

  • 如果 cost_func'NRMSE''NMSE',则 fit 值在 -Inf 和 1 之间变化。

    • 0 - 与参考数据完美拟合(零误差)

    • -Inf - 不正确的拟合

    • 1 - x 在匹配 xref 方面并不比直线好

版本历史记录

在 R2012a 中推出

全部展开

另请参阅

| | |