主要内容

估计模拟已识别模型的初始条件

当您模拟一个不是从静止开始的动态系统时,您必须初始化该模拟以匹配启动条件。例如,您可以将您的模拟响应与实测数据或先前的模拟或计算进行比较。您可能希望在稳态条件下开始模拟,或者继续前一个模拟中的模拟。

初始条件估计方法综述

系统识别工具箱™为确定要使用的初始条件(ICs)提供了多种技术。这些技巧包括:

  • 模型识别结果

  • 当前或过去的输入/输出数据测量

  • 来自先前模拟的状态信息

下表总结了可用的方法以及何时使用它们。为了简洁起见,本表将术语“模拟”泛指“模拟或预测”。有关更多信息,请参见模拟和预测已识别的模型输出

估计初始条件的方法

什么时候使用 方法 方法总结
你在模拟一个中的难点idtfidprocidpoly,或idgrey使用您用来标识模型的相同输入数据对响应建模。

从模型识别结果(返回值或估计报告)中提取ic。估计以下列形式之一返回IC信息。

  • 初始状态向量(中的难点而且idgrey模型)

  • 一个initialCondition对象(idtfidproc,idpoly模型)

看到根据实测数据估计初始条件

[sys, x0] = ss (z, __)

[sys, x0] =老龄化最严重的(z, __)

x0 = sys.Report.Parameters.X0

(sys,冰)=特遣部队(z, __)

[sys, ~,冰]= proc (z, __)

(sys,冰)= idpoly (z, __)

例子:

解决模型识别与比较命令之间的拟合值差异

在模拟确定的线性模型时应用初始条件

您希望重新生成由比较(或由模型输出在应用程序中绘图)。

使用从比较

看到根据实测数据估计初始条件

[y,适合,x0] =比较(sys, z)

(y,健康,ic) =比较(sys, z)

例子:

比较命令与非线性ARX模型块的匹配输出

在模拟确定的线性模型时应用初始条件

您正在模拟模型对给定输入信号的响应,并希望从导致与给定输出信号最接近匹配的点开始模拟。

使用比较中的难点idtfidprocidpoly,或idgrey模型。

使用findstates返回的初始状态向量中的难点模型。

如果原始模型是idtfidproc,或idpoly,你可以使用findstates首先将模型转换为状态空间形式中的难点.看到线性模型模拟初始条件的估计

看到根据实测数据估计初始条件

[y,适合,x0] =比较(sys, z)

(y,健康,ic) =比较(sys, z)

x0 = findstates (sys_ss, z)

例子:

在模拟确定的线性模型时应用初始条件

利用实测数据估计线性模型初始条件

您正在继续模拟,例如在线处理。

您正在使用分割数据集,例如fornlarx模型时findstates在计算上太昂贵了。
data2state

如果原始型号是idtfidproc,或idpoly,转换为状态空间形式首先使用中的难点

你也可以用data2state隐式地通过指定您的过去数据作为初始条件的代理sim卡预测任何动态模型。

有关更多信息,请参见根据实测数据估计初始条件
sys_ss = ids(系统)
x0 = data2state (sys z_p)



IO =结构
(“输入”,zp。InputData,
“输出”,zp.OutputData);
opt = simOptions ('InitialCondition',IO)

opt = predictOptions ('InitialCondition',IO)

例子:一类非线性ARX模型的初始条件估计
理解模型仿真中历史数据的使用
您正在处理一个持续的模拟,并希望将当前模拟段的初始条件建立在前一段的基础上。

你打算在稳定状态下开始你的主模拟,你想要有一个模拟从休息到稳定状态的过程的前传。
使用来自以前模拟或预模拟的状态信息。

如果原始型号是idtfidproc,或idpoly,转换为状态空间形式首先使用中的难点

有关更多信息,请参见从过去状态信息中使用初始条件
sys_ss = ids(系统)
x0 = x(结束)(y y_sd x) = sim (sys_ss z_p)

例子:使用过去状态继续模拟已识别模型

至今评估技术

上表调用了初始条件估计的各种技术。下面几节根据估算数据源总结这些技术。

根据实测数据估计初始条件

从获取模拟输入的测量数据中估计初始条件。技术包括以下内容。

从过去的测量数据估计初始条件

根据模拟开始前的测量数据估计初始条件。技术包括以下内容。

从过去状态信息中使用初始条件

使用来自先前模拟或预模拟的状态信息。如果没有以前的模拟可用,您可以从休息或已知的初始条件到模拟开始点进行预模拟。过去模拟或预模拟的结束状态是要执行的模拟的开始状态。示例请参见使用过去状态继续模拟已识别模型

线性模型模拟初始条件的估计

findstates而且data2state函数是用于从输入/输出数据的任何测量中确定初始或结束状态的最通用工具。但是,要使用这些函数,必须有一个包含显式状态表示的模型结构。除线性模型外中的难点而且idgrey不要使用显式状态。为了找到等价的初始状态,您可以将这些模型转换为中的难点模型,并从中找到初始状态中的难点版本。作为替代方案findstates,你也可以用比较在不将模型转换为状态空间形式的情况下获得初始条件。对于这些模型,比较返回一个initialCondition对象,该对象包含关于无模型响应(以状态空间形式)和相应初始状态的信息。

在您估计初始条件之后,您可以将它们合并到您的命令行模拟语法,即您的Simulink中®模型中,或系统识别应用程序。

下面的例子说明了线性模型的初始条件估计。第一个示例使用findstates而且比较.第二个和第三个例子使用历史数据。也就是说,示例从模拟开始时间之前的数据确定初始条件。

利用实测数据估计线性模型初始条件

用不同的方法求得线性模型的初始条件,并对结果进行比较。

估计测量数据的传递函数。返回初始条件集成电路

负载iddata1z1;(sys, ic) =特遣部队(z1, 3);集成电路
ic = initialCondition属性:A: [3x3 double] X0: [3x1 double] C: [0.2303 5.9117 2.2283] Ts: 0
ic.X0
ans =3×1-1.7569 2.6195 -6.5177

sys为连续时间识别传递函数(idtf)模型。集成电路是一个initialCondition对象。一个initialCondition对象以状态空间形式表示系统的自由响应。对象包括转换后的一个而且C状态空间矩阵对应于sys和估计的初始状态向量X0

你也可以用findstates寻找线性模型的初始条件,但前提是中的难点idgrey的形式。

转换sys状态方程形式。

sys_ss = ids(系统);

使用findstates来估计初始状态。

X0 = findstates (sys_ss z1)
X0 =3×1-1.7569 2.6195 -6.5177

现在使用比较利用原始传递函数模型估计初始状态。

[y_tf,适合,ic2] =比较(z1, sys);ic2
ic2 = initialCondition属性:A: [3x3 double] X0: [3x1 double] C: [0.2303 5.9117 2.2283] Ts: 0
ic2。X0
ans =3×1-1.7569 2.6195 -6.5177

初始状态向量在三种情况下都是相同的。

理解模型仿真中历史数据的使用

在模拟模型时,使用历史输入输出数据作为初始条件的代理。首先使用sim卡命令并指定历史数据simOptions选项设置。然后通过手动将历史数据映射到初始状态来再现模拟输出。

加载一个两输入一输出的数据集。

负载iddata7z7

使用这些数据确定一个五阶状态空间模型。

sys = n4sid (z7 5);

将数据集分成两部分。

咱= z7 (1:15);zB = z7(16:结束);

用输入信号对模型进行仿真zB

uSim = zB;

模拟需要初始条件。的信号值历史数据,也就是说,它们是紧接数据之前的时间的输入和输出值吗zB.使用作为所需初始条件的代理。

IO =结构(“输入”,咱。InputData,“输出”, zA.OutputData);选择= simOptions (“InitialCondition”IO);

模拟模型。

ysim = sim (sys、uSim选择);

的初始状态手动映射历史数据,从而重新生成输出sys.要做到这一点,请使用data2state命令。

xf = data2state (sys,咱);

xf的状态值sys在时间瞬间后立即将最近的数据抽样了进去

使用以下命令模拟系统xf作为初始状态。

opt2 = simOptions (“InitialCondition”、xf);ysim2 = sim (sys、uSim opt2);

的输出sim卡命令ysim以及手工计算的结果ysim2.

情节(ysim“b”ysim2,“——r”

图中包含一个axes对象。标题为y1的axes对象包含两个类型为line的对象。这些对象表示sys。

ysim2ysim

使用过去状态继续模拟已识别模型

通过使用前一个仿真段的结束状态,估计已识别模型的一个仿真段的初始条件。

加载数据z1,这是一个iddata对象,它包含输入和输出数据。根据数据估计一个五阶线性模型。

负载iddata1z1情节(z1)

图中包含2个轴对象。标题为y1的Axes对象1包含一个类型为line的对象。该对象表示z1。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1。

sys = n4sid (z1, 5);

把数据分成两部分。一个段z1past表示过去模拟的数据,并从静止状态开始。第二段z1next表示后续模拟的数据。

z1past = z1 (1:15);z1next = z1 (150:300);

中的输入数据的响应z1next不指定初始条件。

ynext_no_ic = sim (z1next sys);情节(ynext_no_ic z1next)传说标题(“不设置ic的模拟继续”

图中包含2个轴对象。标题为y1的axis对象1包含两个类型为line的对象。这些对象表示模型z1next。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1next。

现在确定最终状态,x0的响应z1past输入

[ypast, y_sd xpast] = sim (z1past sys);x0 = xpast(最终:)”;

使用结束状态指定后续响应的初始状态z1next

选择= simOptions (“InitialCondition”, x0);ynext_ic = sim (sys, z1next选择);图图(ynext_ic,z1next)传说标题(“用同步ic继续模拟”

图中包含2个轴对象。标题为y1的axis对象1包含两个类型为line的对象。这些对象表示模型z1next。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1next。

模拟Hammerstein-Wiener和非线性灰盒模型的初始条件估计

当您在模拟Hammerstein-Wiener或非线性灰盒模型并希望使用与测量数据集一致的初始条件时z,使用findstates

在Simulink中模拟Hammerstein-Wiener模型

将Hammerstein-Wiener模型块的模拟输出与系统的实测输出进行比较。通过估计初始状态值,可以改进测量响应和模拟响应之间的一致性。

加载样例数据。

负载twotankdata

创建一个iddata对象从示例数据中获取。集“Tstart”0,使数据开始时间与Simulink开始时间0f 0 s相匹配。

z1 = iddata (y, u, 0.2,“Tstart”0,“名字”“两舱系统”);

使用数据估计Hammerstein-Wiener模型。

mw1 = nlhw(z1,[1 5 3], idpiecewislinear, idpiecewislinear);

的输入数据,您现在可以在Simulink中模拟估计模型的输出z1.为此,打开一个预先配置的Simulink模型。

模型=“ex_idnlhw_block”;open_system(模型);

该模型使用Iddata Source、Hammerstein-Wiener模型和Scope块。以下块参数已预先配置,以指定估计数据、估计模型和初始条件:

Iddata源块参数:

  • IDDATA对象-z1

Hammerstein-Wiener模型块参数:

  • 模型-mw1

  • 初始条件-(默认)

运行仿真。

通过使用Scope块查看测量输出和模型输出之间的差异。

simOut = sim(模型);open_system([模型/范围的])

为了提高测量响应与模拟响应之间的一致性,从估计数据中估计模型的初始状态向量z1,使用findstates.指定估计的最大迭代次数为100。将预测水平指定为,使算法计算出仿真误差最小的初始状态。

选择= findstatesOptions;opt.SearchOptions.MaxIterations = 100;x0 = findstates (mw1 z1,正无穷,选择);

设置初始条件块参数的值状态值.默认的初始状态是x0

set_param([模型“/ Hammerstein-Wiener模型”),“集成电路”“国家价值观”);

再次运行模拟,并在Scope块中查看测量输出和模型输出之间的差异。测量的响应和模拟的响应之间的差异现在减小了。

simOut = sim(模型);

非线性ARX模型的初始条件估计

当您在模拟一个非线性ARX模型并希望使用与测量数据集一致的初始条件时z,你可以选择采取哪种方法。

  • 您可以使用findstates.然而,对于非线性ARX模型,如果数据集很大,这种方法有计算成本高的代价。

    X0 = findstates (m, z,正);
  • 您可以将数据集分成两部分。使用第一个nx输入/输出数据的样本作为过去的数据,其中nx是模型中最大的回归延迟。然后使用data2state计算“过去数据”的结束状态。然后,您就可以为剩下的部分模拟模型nx + 1:结束用您选择的任何模拟方法输入数据。这两个比较系统识别app使用这种方法自动为非线性ARX模型。

    nx = max (getDelayInfo (m));找出最大的回归滞后past_data = z1 (1: nx);X0 = data2state (mw1 z1 (1: nx));

    下面的例子说明了在一个非线性ARX模型中使用分割数据技术。

一类非线性ARX模型的初始条件估计

使用两种不同的技术来估计非线性ARX模型的初始条件。模拟每个测量数据,并与静止时初始化的模拟进行比较。

加载输入/输出数据z和情节。的前1000点z估计一个非线性ARX模型。

负载twotankdataz = iddata (y、u, 0.2);z1 = z (1:1000);情节(z1)标题(“估计数据”

图中包含2个轴对象。标题为y1的Axes对象1包含一个类型为line的对象。该对象表示z1。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1。

mdlnlarx = nlarx(z1,[5 1 3],idWaveletNetwork);

提取z1的前250点(50秒)作为z1sim比较模拟。模拟mdlarx在不设置初始条件的情况下,将响应与实测输出绘制在z1sim

z1sim = z1(摘要);data_no_ic = sim (mdlnlarx z1sim);情节(data_no_ic z1sim)标题(“无初始条件设置的非线性ARX模型”网格)传奇(“位置”“本身”

图中包含2个轴对象。标题为y1的axis对象1包含两个类型为line的对象。这些对象表示mdlnlarx, z1sim。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1sim。

使用findstates来估计初始条件。为了使模拟误差最小化,指定对于预测视界。然后设置sim卡选择InitialConditionfindstates结果。将响应与测量输出绘制在一起。

x0f = findstates (mdlnlarx z1sim,正无穷);选择= simOptions (“InitialCondition”, x0f);data_fs = sim (mdlnlarx z1sim,选择);图绘制(data_fs z1sim)标题(“利用findstates进行IC估计的非线性ARX模型”网格)传奇(“位置”“本身”

图中包含2个轴对象。标题为y1的axis对象1包含两个类型为line的对象。这些对象表示mdlnlarx, z1sim。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1sim。

现在,响应和测量输出的起点大致相同。

现在使用的data2states初始条件的估计方法。首先,将数据集分成两部分。使用第一个nx的样本z1sim作为“过去的数据”,其中nx是模型中最大的回归延迟。

nx = max (getDelayInfo (mdlnlarx))
nx = 5
z1past = z1sim (1: nx);z1sim2 = z1sim (nx + 1:结束);

使用data2state计算“过去数据”的结束状态。使用从处开始的输入模拟响应z1sim (nx + 1).把回答和全文画在一起z1sim测量数据,使您可以与findstates情节。

x0d2s = data2state (mdlnlarx z1past);选择= simOptions (“InitialCondition”, x0d2s);data_d2s = sim (mdlnlarx z1sim2,选择);图绘制(data_d2s z1sim)标题(“利用data2state进行IC估计的非线性ARX模型”网格)传奇(“位置”“本身”

图中包含2个轴对象。标题为y1的axis对象1包含两个类型为line的对象。这些对象表示mdlnlarx, z1sim。标题为u1的Axes对象2包含一个类型为line的对象。该对象表示z1sim。

如果您分别执行每个部分,您可能会发现data2states方法完成的速度比findstates方法。

现在比较所有三种初始条件的响应。

情节(data_fs data_d2s data_no_ic)标题(“比较三种集成电路方法的非线性ARX模型响应”)传说(“位置”“本身”

图中包含一个axes对象。标题为y1的axes对象包含3个类型为line的对象。这些对象代表mdlnlarx。

使用案例的响应findstates而且data2state几乎是一样的。对于初始条件未设置的情况,响应最终会收敛,但直到30秒后才会收敛。

另请参阅

|||||||

相关的话题

Baidu
map