此示例展示了在模拟模型以根据测量数据验证模型性能时获取和使用估计初始条件的工作流。
当您想要模拟一个模型时,请使用初始条件(ICs),以便通过比较模拟响应与测量数据来验证模型性能。如果您的测量数据对应的系统不是在静止状态下开始的,那么假设一个静止的起始点的模拟将导致不匹配。模拟和测量的响应在模拟开始时不一致。
对于状态空间模型,初始状态向量是描述初始条件的充分条件。对于其他的LTI模型initialCondition
对象允许您以模型对初始条件的自由响应的形式表示集成电路。该表示为状态空间形式,如下式所示:
在这里,
这是自由反应吗initialCondition
封装。
和
是一个
和C
模型的状态空间形式的矩阵。
为对应的初始状态向量。自由响应不包括在内B
和D
因为无IC响应与输入信号无关。虽然initialCondition
对象封装状态空间形式,您可以使用该信息为任何LTI系统的自由响应建模。仿真软件分别计算自由响应和强迫响应,然后将它们加在一起得到总响应。
加载数据并将其分解为估计和验证数据集。对于本例,分割发生在输出数据具有明显非零起点的地方。
负载iddata2z2z2e = z2 (10:210);z2v = z2 (210:400);情节(z2e z2v)
显示每个数据集的第一个输出示例。
z2e.y (1)
ans = -5.9588
z2v.y (1)
ans = -9.2141
利用估计数据,估计二阶传递函数模型并返回初始条件集成电路
.显示集成电路
.
np = 2;新西兰= 1;(sys_tf, ic) =特遣部队(z2e、np、新西兰);集成电路
A: [2x2 double] X0: [2x1 double] C: [-1.6158 5.1969] Ts: 0
集成电路
表示传递函数模型在状态空间形式下对初始条件的自由响应。
一个= ic.A
一个=2×2-3.4145 -5.6635 4.0000 0
C = ic.C
C =1×2-1.6158 - 5.1969
的X0
属性包含初始状态向量。
X0 = ic.X0
X0 =2×1-0.5053 - -1.2941
模拟模型。首先,作为参考,模拟模型不合并集成电路
.用估计数据绘制模拟响应图。
y_no_ic = sim (sys_tf z2e);情节(y_no_ic z2e)传说(“模型响应”,的输出数据)标题(“传递函数模型-无IC规格”)
模拟和测量的响应在模拟开始时不一致。
合并集成电路
.要做到这一点,首先进行初始化选择
到选项集simOptions
.指定集成电路
随着“InitialCondition”
设置。模拟模型并绘制结果。
选择= simOptions;opt.InitialCondition = ic;y_ic = sim (sys_tf z2e,选择);情节(y_ic z2e)传说(“模型响应”,的输出数据)标题(“传递函数模型-指定ICs”)
现在,在模拟开始时,各方的反应更加一致。
集成电路
表示仅用于估计数据集的ICs。如果希望使用验证输入运行模拟,并将结果与验证输出进行比较,则必须获得验证数据集的ICs。要做到这一点,使用比较
.您可以使用比较
以估计模型和测量数据的任何组合的集成电路。
[青年志愿,fitv, icv] =比较(z2v sys_tf);icv
icv = initialCondition with properties: A: [2x2 double] X0: [2x1 double] C: [-1.6158 5.1969] Ts: 0
显示一个
,C
, X0
的属性icv
.
Av = icv。一个
Av =2×2-3.4145 -5.6635 4.0000 0
简历= icv.C
简历=1×2-1.6158 - 5.1969
X0v = icv。X0
X0v =2×10.4512 - -1.5068
在这种情况下一个
和C
表示自由响应模型的矩阵与ic.A
和ic.C
值的原始估计。但是,初始状态向量X0v
不同于ic.X0
.
指定icv
“InitialCondition”
设置在选择
并使用验证数据模拟模型。绘制模拟和测量的响应。
opt.InitialCondition = icv;y_ic = sim (sys_tf z2v,选择);情节(y_ic (:,: []), z2v (:,:,[])) 传奇(“模型响应”,的输出数据)标题(“验证数据的传递函数模型响应”)
在模拟开始时,模拟响应与实测响应具有很好的一致性。
您可以在将模型转换为另一种形式时应用ICs。
转换sys_tf
到一个idpoly
模型。模拟转换后的模型,保留电流SimOptions
“InitialCondition”
设置,icv
,在选择
.
sys_poly = idpoly (sys_tf);y_poly = sim (sys_poly z2v,选择);情节(y_poly (:,: []), y_ic (:,: []), z2v (:,:,[])) 传奇(“idpoly模型响应”,“idtf模型响应”,的输出数据)标题(多项式模型转换的)
的sys_tf
和sys_poly
出现相同的反应。
状态空间模型可以使用由单个数值初始状态向量表示的初始条件或由initialCondition
对象。
当你转换sys_tf
到一个中的难点
型号,可以再次使用icv
通过保留icv
设置在选择
.
sys_ss = ids (sys_tf);y_ss = sim (sys_ss z2v,选择);情节(y_ss (:,: []), z2v (:,:,[])) 传奇(“模型响应”,的输出数据)标题(状态空间模型转换的)
当你使用比较
或者状态空间估计函数党卫军
,函数返回初始状态向量x0
.估计状态空间模型sys_ss2
使用z2e
和使用比较
,获取对应的icz2v
.
sys_ss2 = ss (z2e 2);[yvss fitvss, x0] =比较(z2v sys_ss2);x0
x0 =2×1-0.1061 - 0.0097
x0
是一个数字向量。指定x0
随着“InitialCondition”
设置在选择
并模拟响应。
opt.InitialCondition = x0;y_ss2 = sim (sys_ss2 z2v,选择);情节(y_ss2 (:,: []), z2v (:,:,[])) 传奇(“模型响应”,的输出数据)标题(“用初始状态向量模拟的状态空间模型”)
initialCondition
对象如果你的原始模型是一个状态空间模型,你想把模型转换成一个多项式或传递函数模型,并应用相同的初始条件,你必须把初始状态向量转换成initialCondition
对象。
提取并显示一个
,C
,Ts
属性从sys_ss2
.
= sys_ss2。一个
是=2×25.2918 -1.7327
c = sys_ss2.C
c =1×282.9765 - 25.5146
Tss = sys_ss2。Ts
Tss = 0
的一个
和C
矩阵估计使用党卫军
有不同的值一个
和C
矩阵估计icv
使用特遣部队
.一个给定的线性模型有无穷多个状态空间表示。这两对矩阵,连同相关的初始状态向量,是等价的,并产生相同的自由响应。
创建initialCondition
对象ic_ss2
使用sys_ss2
模型属性和初始状态向量x0
你使用的时候得到的比较
.
ic_ss2 = initialCondition (x0, Cs, Tss)
ic_ss2 = initialCondition with properties: A: [2x2 double] X0: [2x1 double] C: [82.9765 25.5146] Ts: 0
转换sys_ss2
转化为传递函数模型,并用转换后的模型进行仿真ic_ss2
随着“InitialCondition”
设置。
sys_tf2 = idtf (sys_ss2);opt.InitialCondition = ic_ss2;y_tf2 = sim (sys_tf2 z2v,选择);情节(y_tf2 (:,: []), z2v (:,:,[])) 传奇(“模型响应”,的输出数据)标题(“由状态空间模型转换而来的传递函数模型”)
使用构造initialCondition
对象ic_ss2
产生与使用直接估计的模拟响应相似的响应initialCondition
对象。
比较
|idpoly
|中的难点
|initialCondition
|sim卡
|simOptions
|党卫军
|特遣部队