估计非线性灰盒模型
指定非线性灰盒模型结构
你必须将你的系统表示为一阶非线性差分或微分方程的集合:
在哪里 对于连续时间表示和 用于离散时间表示Ts作为采样时间。F而且H任意的线性函数还是非线性函数Nx而且纽约组件,分别。Nx状态数和纽约是输出的数量。
在为系统建立方程式之后,创建一个函数或mexo文件。墨西哥文件,可以在C或Fortran中创建,是动态链接的子例程,可以由MATLAB加载和执行®.有关墨西哥文件的更多信息,请参见编写MATLAB可调用C函数(MEX文件).这个文件称为ODE文件或模型文件。
模型文件的目的是返回状态导数和模型输出作为时间、状态、输入和模型参数的函数,如下所示:
[dx,y] = MODFILENAME(t,x,u,p1,p2,...、pN FileArgument)
提示
用于编写C mex文件的模板文件,IDNLGREY_MODEL_TEMPLATE.c
,位于matlab工具箱/识别/ nlident
.
输出变量为:
dx
-表示状态空间方程的右侧。一个列向量Nx条目。对于静态模型,dx = []
.对于离散时间模型。
dx
状态值是下一个时间步的值吗x (t + Ts)
.对于连续时间模型。
dx
状态在时间上是导数吗t,或 .y
-表示输出方程的右侧。一个列向量纽约条目。
文件输入为:
t
-当前时间。x
-时间的状态向量t
.对于静态模型,等于[]
.u
-按时间输入矢量t
.对于时间序列模型,等于[]
.p1, p2,…,pN
—参数,可以是实标量、列向量或二维矩阵。N
参数对象的数目。对于标量参数,N
参数元素的总数。FileArgument
-包含用于更新状态方程常量的辅助变量。
提示
在创建模型文件后,使用合理的输入直接从MATLAB软件调用它,并验证输出值。还要检查对于预期输入和参数值范围,模型输出和导数保持有限。
例如,创建灰盒模型文件和idnlgrey
模型对象,请参见创建idnlgrey模型文件.
有关指定模型结构的代码文件和mexs文件的示例,请参见工具箱/识别/ iddemos /例子
文件夹中。例如,直流电机的型号在文件中描述dcmotor_m
而且dcmotor_c
.
构造idnlgrey对象
在使用模型结构创建函数或mexo文件之后,定义一个idnlgrey
对象。这个物体具有线性物体的许多特性idgrey
模型对象。
属性的通用语法idnlgrey
模型对象:
M = idnlgrey('文件名”,命令,参数,InitialStates)
的idnlgrey
参数定义如下:
'
-存储模型结构的函数或mexo文件的名称。当您使用此模型对象进行模型估计、预测或模拟时,此文件必须位于MATLAB路径上。文件名
'订单
-有三个分量的向量[Ny Nu Nx]
,指定模型输出的数量纽约
,输入的数量ν
,和状态数Nx
.参数
—参数,指定为结构体
数组、单元格数组或双数组。InitialStates
—与参数相同。必须是第四个输入idnlgrey
构造函数。
属性的附加属性idnlgrey
模型,包括仿真方法和相关选项。有关此对象及其属性的详细信息,请参见idnlgrey
参考页面。
使用nlgreyest
或pem
来估计灰盒模型。在估计之前,最好模拟模型以验证模型文件已经正确编码。例如,计算模型对估计数据输入信号的响应sim卡
:
Y = sim(模型,数据)
模型
是idnlgrey
对象,数据
估计数据是否为(iddata
对象)。
使用nlgreyest
估计非线性灰盒模型
您可以使用nlgreyest
命令来估计未知idnlgrey
利用测量数据建立模型参数和初始状态。
数据的输入-输出维度必须与指定的输入和输出顺序相兼容idnlgrey
模型。
使用以下通用估计语法:
M2 = nlgreyest(data,m)
在哪里数据
估计数据和米
是idnlgrey
您构建的模型对象。输出平方米
是一个idnlgrey
相同配置的型号米
,参数和初始状态更新以适应数据。有关估计的更多信息可从报告
财产。欲知更多有关报告
以及如何使用它,看输出参数在nlgreyest
参考页,或类型平方米。报告
在命令行中。
属性指定其他估计选项nlgreyestOptions
选项集,包括SearchMethod
而且SearchOption
.
有关验证模型的信息,请参见模型验证.
用MATLAB文件表示非线性动力学的灰盒估计
这个例子展示了如何构造、估计和分析非线性灰盒模型。
非线性灰盒(idnlgrey
)模型适用于估计连续时间或离散时间下由非线性状态空间结构描述的系统参数。两者都可以用idgrey
(线性灰盒模型)和idnlgrey
用于建模线性系统的对象。但是,您只能使用idnlgrey
表示非线性动力学。学习线性灰盒建模的使用idgrey
,请参阅使用系统识别工具箱构建结构化和用户定义的模型.
关于模型
在本例中,您将使用idnlgrey
对象。
图1:直流电机原理图。
如果你忽略干扰,选择y (1)
作为角位置[rad]和y (2)
作为电机的角速度[rad/s],可以建立如下形式的线性状态空间结构(参见Ljung, L. System Identification: Theory for the User, Upper Saddle River, NJ, Prentice-Hall PTR, 1999, 2nd ed., p. 95-97的推导):
1 d | 0 | | 0 |——x (t) = | | x (t) + | | u (t) dt | 0 1 /τ| | k /τ|
| 0 | y(t) = | | x(t) | 0 1 |
τ
电机的时间常数在[s]和k
为输入到角速度的静态增益,单位为[rad/(V*s)]。详见Ljung (1999)τ
而且k
与电机的物理参数有关。
关于输入输出数据
1.加载直流电机数据。
负载(fullfile (matlabroot“工具箱”,“识别”,“iddemos”,“数据”,“dcmotordata”));
2.将估计数据表示为iddata
对象。
Z = iddata(y, u, 0.1,“名字”,直流电机的);
3.指定输入和输出信号名称、开始时间和时间单位。
z.InputName =“电压”;z.InputUnit =“V”;z.OutputName = {角位置的,的角速度};z.OutputUnit = {rad的,“rad / s”};z.Tstart = 0;z.TimeUnit =“年代”;
4.绘制数据图。
数据显示在两个绘图窗口中。
图(“名字”[z。的名字':电压输入->角位置输出']);Plot (z(:, 1,1));绘制第一个输入输出对(电压->角位置)。图(“名字”[z。的名字':电压输入->角速度输出']);Plot (z(:, 2,1));绘制第二个输入输出对(电压->角速度)。
图2:直流电机的输入输出数据。
直流电机的线性建模
1.用函数表示直流电机的结构。
在本例中,您使用MATLAB®文件,但也可以使用C mexs文件(以获得计算速度)、p文件或函数句柄。有关更多信息,请参见创建IDNLGREY模型文件.
DC-motor函数被调用dcmotor_m.m
并如下所示。
函数[dx, y] = dcmotor_m(t, x, u, tau, k, varargin)
输出方程式。Y = [x(1);...%角位置。x(2)……%角速度。];
%状态方程。Dx = [x(2);...%角速度。-(1 /τ)* x (2) + (k /τ)* u(1)……%角加速度。];
该文件必须始终结构化以返回以下内容:
输出参数:
dx
在连续时间情况下为状态导数向量,在离散时间情况下为状态更新值向量。
y
是输出方程
输入参数:
前三个输入参数必须是:
t
(时间),x
(静态系统状态向量,[]),u
(输入向量,[]表示时间序列)。
下面是参数的有序列表。参数可以是标量、列向量或二维矩阵。
变长度输入宗量
用于辅助输入参数
2.表示直流电机的动态idnlgrey
对象。
该模型描述了输入如何使用状态方程产生输出。
文件名=“dcmotor_m”;描述模型结构的文件。Order = [2 1 2];%模型订单[ny nu nx]。参数= [1;0.28);初始参数。Np = 2。InitialStates = [0;0);初始状态。Ts = 0;%时间连续系统。nlgr = idnlgrey(文件名,顺序,参数,InitialStates, Ts,...“名字”,直流电机的);
在实践中,会有干扰影响输出。一个idnlgrey
模型没有显式地对扰动建模,而是假设这些扰动只是添加到输出中。因此,idnlgrey
模型等价于输出误差(OE)模型。如果没有噪声模型,过去的输出不会影响对未来输出的预测,这意味着任何预测视界k的预测输出都与模拟输出相吻合。
3.指定输入和输出名称以及单位。
集(nlgr,“InputName”,“电压”,“InputUnit”,“V”,...“OutputName”, {角位置的,的角速度},...“OutputUnit”, {rad的,“rad / s”},...“TimeUnit”,“年代”);
4.指定初始状态和参数的名称和单位。
NLGR = setinit(NLGR,“名字”, {角位置的的角速度});NLGR = setinit(NLGR,“单位”, {rad的“rad / s”});NLGR = setpar(NLGR,“名字”, {的时间常数“静态增益”});NLGR = setpar(NLGR,“单位”, {“年代”“rad / (V * s)”});
你也可以使用setinit
而且setpar
同时为所有初始状态或参数分配值、最小值、最大值和估计状态。
5.查看初始模型。
a.获取模型基本信息。
直流电机有2个(初始)状态和2个模型参数。
大小(nlgr)
2输出,1输入,2状态,2参数(2自由)的非线性灰盒模型。
b.查看初始状态和参数。
初始状态和参数都是结构数组。字段指定单个初始状态或参数的属性。类型帮助idnlgrey。InitialStates
而且帮助idnlgrey。参数
获取更多信息。
nlgr.Parameters nlgr.InitialStates (1) (2)
ans = struct with fields:名称:'角位置'单位:'rad'值:0最小值:-正负值最大值:正负值固定值:1 ans = struct with fields:名称:'静态增益'单位:'rad/(V*s)'值:0.2800最小值:-正负值最大值:正负值固定值:0
c.在一次调用中检索所有初始状态或模型参数的信息。
例如,获取固定的(未估计的)初始状态信息和所有模型参数的最小值。
getinit (nlgr“固定”) getpar (nlgr“最小值”)
ans = 2x1单元阵列{[1]}{[1]}ans = 2x1单元阵列{[-Inf]} {[-Inf]}
d.获取对象的基本信息。
nlgr
nlgr = 'dcmotor_m' (MATLAB文件)定义的连续时间非线性灰盒模型:dx/dt = F(t, u(t), x(t), p1, p2) y(t) = H(t, u(t), x(t), p1, p2) + e(t),具有1个输入(s), 2个状态(s), 2个输出(s)和2个自由参数(s)(出2)。名称:DC-motor状态:由直接构造或转换创建。不估计。
使用得到
获取关于模型属性的更多信息。的idnlgrey
对象具有参数化线性模型对象的许多属性。
get (nlgr)
FileName: 'dcmotor_m'顺序:[1x1 struct]参数:[2x1 struct] InitialStates: [2x1 struct] FileArgument: {} SimulationOptions: [1x1 struct] TimeVariable: 't' NoiseVariance: [2x2 double] Ts: 0 TimeUnit: 'seconds' InputName: {'Voltage'} InputUnit: {'V'} InputGroup: [1x1 struct] OutputName: {2x1 cell} OutputUnit: {2x1 cell} OutputGroup: [1x1 struct]备注:[0x1 string] UserData:[]名称:'DC-motor'报告:[1x1 idresults.nlgreyest]
直流电机初始模型的性能评价
在估计参数之前τ
而且k
,使用默认的微分方程求解器(带自适应步长调整的龙格-库塔45求解器)模拟系统的输出与参数猜测。模拟选项是使用“SimulationOptions”模型属性指定的。
1.将绝对和相对误差容差设置为较小的值(1 e-6
而且1 e-5
分别)。
nlgr.SimulationOptions.AbsTol = 1e-6;nlgr.SimulationOptions.RelTol = 1e-5;
2.将模拟输出与实测数据进行比较。
比较
显示一个或多个模型的测量和模拟输出,而预测
,使用相同的输入参数调用,显示模拟输出。
模拟和测量输出显示在一个绘图窗口中。
比较(z, nlgr);
图3:测量输出与初始直流电机模型模拟输出的比较。
参数估计
估计参数和初始状态nlgreyest
,这是一种非线性灰盒模型的预测误差最小化方法。评估选项,比如评估进度显示的选择,是使用"nlgreyestOptions"选项集指定的。
NLGR = setinit(NLGR,“固定”, {false false});估计初始状态。opt = nlgreyestOptions(“显示”,“上”);NLGR = nlgreyest(z, NLGR, opt);
估计直流电机模型的性能评价
1.回顾关于评估过程的信息。
此信息存储在报告
的属性idnlgrey
对象。该属性还包含关于如何估计模型的信息,例如求解器和搜索方法、数据集以及为什么终止估计。
nlgr。报告流(搜索终止条件:\n') nlgr.Report.Termination
ans =状态:'估计使用NLGREYEST'方法:'求解器:ode45;搜索:lsqnonlin' Fit: [1x1 struct]参数:[1x1 struct] OptionsUsed: [1x1 idoptions。nlgreyest] RandState: [] DataUsed: [1x1 struct] Termination: [1x1 struct] The search termination condition: ans = struct with fields: WhyStop: 'Change in cost was less than the specified tolerance.' Iterations: 5 FirstOrderOptimality: 1.4013e-04 FcnCount: 6 Algorithm: 'trust-region-reflective'
2.通过比较模拟输出和实测输出来评估模型质量。
拟合率分别为98%和84%,表明估计模型很好地捕捉了直流电机的动态特性。
比较(z, nlgr);
图4:IDNLGREY直流电机模型的实测输出与仿真输出的比较。
3.的性能比较idnlgrey
一个二阶ARX模型。
Na = [2 2;2 2];Nb = [2;2);Nk = [1;1);Dcarx = arx(z, [na nb nk]);比较(z, nlgr, dcarx);
图5:IDNLGREY和ARX直流电机模型的实测输出与模拟输出的比较。
4.检查预测误差。
得到的预测误差很小,并以零为中心(无偏倚)。
体育(z, nlgr);
图6:用估计的IDNLGREY直流电机模型得到的预测误差。
5.检查剩余(“剩余物”)。
残差表示模型未解释的部分,对于良好的模型质量残差较小。使用渣油
命令查看残差之间的相关性。图的第一列显示了两个输出的残差的自相关性。第二列显示了这些残差与输入“电压”的相互关联。相关性在可接受的范围内(蓝色区域)。
图(“名字”, [nlgr。的名字:估计模型的残差]);渣油(z, nlgr);
图7:用估计的IDNLGREY dc -电机模型得到的残差。
6.画出阶跃响应。
单位输入阶跃会导致角速度稳定在一个恒定水平上,角速度的位置显示出斜坡类型的行为。
图(“名字”, [nlgr。的名字:估计模型的阶跃响应]);步骤(nlgr);
图8:估计的IDNLGREY直流电机模型阶跃响应。
7.检验模型协方差。
您可以通过查看估计的协方差矩阵和估计的噪声方差在一定程度上评估估计模型的质量。的“小”值(我)
协方差矩阵的对角元素表示我
:当使用所选择的模型结构时,模型参数对于解释系统动力学是很重要的。小的噪声方差(多输出系统的协方差)元素也很好地表明模型以良好的方式捕获估计数据。
getcov nlgr (nlgr)。NoiseVariance
Ans = 1.0e-04 * 0.1573 0.0021 0.0021 0.0008 Ans = 0.0010 -0.0000 -0.0000 0.0110
有关估计模型的更多信息,请使用现在
显示初始状态和估计参数值,以及估计参数的不确定度(标准偏差)。
礼物(nlgr);
nlgr =连续时间非线性灰盒模型由'dcmotor_m' (MATLAB文件)定义:dx/dt = F(t, u(t), x(t), p1, p2) y(t) = H(t, u(t), x(t), p1, p2) + e(t)有1个输入(s), 2个状态(s), 2个输出(s),和2个自由参数(s) (out of 2)。输入:u(1)电压(t) [V]状态:初始值x(1)角位置(t) [rad] xinit@exp1 0.0302675(估计)在[-Inf, Inf] x(2)角速度(t) [rad/s] xinit@exp1 -0.133777(估计)在[-Inf, Inf]y(1)角位置(t) [rad] y(2)角速度(t) [rad/s]参数:值标准差p1时间常数[s] 0.243649 0.00396671(估计)在[-Inf, Inf] p2静态增益[rad/(V*s)] 0.249644 0.000284486(估计)在[-Inf, Inf]名称:直流电机状态:终止条件:成本变化小于规定公差。迭代次数:5,函数计算次数:6估计使用Solver: ode45;在时域数据“DC-motor”上搜索lsqnonlin。拟合估计数据:[98.34;84.47]% FPE: 0.001096, MSE: 0.1187更多信息在模型的“报告”属性。
结论
这个例子说明了执行非线性灰盒建模的基本工具。请参阅其他非线性灰盒示例了解:
在更高级的建模情况下使用非线性灰盒模型,例如建立非线性连续和离散时间,时间序列和静态模型。
编写和使用C MEX模型文件。
处理非标量参数。
某些算法选择的影响。
有关使用系统识别工具箱识别动态系统的更多信息,请访问系统识别工具箱产品信息页面。
非线性灰盒模型属性和估计选项
idnlgrey
基于模型结构和属性创建非线性灰盒模型。创建的参数和初始状态idnlgrey
对象的估计nlgreyest
.
以下模型属性和估计选项会影响模型创建和估计结果。
模拟方法
属性指定模拟方法SimulationOptions
(结构体
)性质idnlgrey
.
系统识别工具箱™软件提供了几个可变步长和固定步长的模拟求解器idnlgrey
模型。
对于离散时间系统,默认的解算器是“FixedStepDiscrete”
.对于连续时间系统,默认解算器为“数值”
.默认情况下,SimulationOptions。解算器
设置为“汽车”
,它会自动选择其中之一“数值”
或“FixedStepDiscrete”
在估计和模拟过程中——取决于系统在时间上是连续的还是离散的。
要查看可用求解器及其属性的列表,请参见SimulationOptions
中的模型属性idnlgrey
参考页面。
搜索方法
方法指定用于估计模型参数的搜索方法SearchMethod
选项nlgreyestOptions
选项设置。非线性灰盒建模有两类方法。
一类方法包括基于直线搜索方法的最小化方案,包括高斯-牛顿方法、最陡下降方法和Levenberg-Marquardt方法。
非线性最小二乘的信赖域反射牛顿法(lsqnonlin
),其中成本是测量输出与模拟输出之间的误差平方和,需要最优化工具箱™软件。当参数边界不同于默认的+/- Inf时,此搜索方法处理边界的效果比基于行搜索的方案更好。然而,与基于行搜索的方法不同,lsqnonlin
在多输出情况下,不能通过估计噪声方差的倒数来处理自动加权。有关更多信息,请参见OutputWeight
中的估计选项nlgreyestOptions
参考页面。
默认情况下,SearchMethod
设置为汽车
,它会自动从可用的最小化器中选择一个方法。如果已安装“优化工具箱”产品,SearchMethod
设置为“lsqnonlin”
.否则,SearchMethod
是基于行搜索的方案的组合。
有关此和其他的详细信息nlgreyest
估计选项,请参见nlgreyestOptions
.
梯度的选择
方法指定计算梯度的方法GradientOptions
选项nlgreyestOptions
选项设置。梯度是误差对未知参数和初始状态的导数。
梯度是通过数值扰动未知量和测量它们对模拟误差的影响来计算的。
梯度计算的选项包括差分方案的选择(向前、向后或中心),未知量的最小扰动的大小,以及梯度是同时计算还是单独计算。
有关此和其他的详细信息nlgreyest
估计选项,请参见nlgreyestOptions
.