主要内容

非线性灰盒模型的估计

指定非线性灰盒模型结构

你必须将你的系统表示为一组一阶非线性差分或微分方程:

x __ t F t x t u t p 一个 r 1 p 一个 r 2 ... p 一个 r N y t H t x t u t p 一个 r 1 p 一个 r 2 ... p 一个 r N + e t x 0 x 0

在哪里 x __ t d x t d t 对于连续时间表示和 x __ t x t + T 年代 离散时间表示用Ts作为采样时间。F而且H是任意线性函数还是非线性函数Nx而且纽约组件,分别。Nx状态的个数和纽约是输出的数量。

在为系统建立方程式之后,创建一个函数或mex文件。墨西哥文件,可以用C或Fortran创建,是可由MATLAB加载和执行的动态链接子程序®.有关mex文件的更多信息,请参见编写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,或 d x d t

  • y-表示输出方程的右边。一个列向量纽约条目。

文件输入如下:

  • t——当前时间。

  • x-时间状态向量t.对于静态模型,等于[]

  • u-按时间输入矢量t.对于时间序列模型,等于[]

  • p1, p2,…,pN-参数,可以是实标量、列向量或二维矩阵。N参数对象的数量。对于标量参数,N参数元素的总数。

  • FileArgument—包含更新状态方程中的常数可能需要的辅助变量。

提示

在创建模型文件后,直接从MATLAB软件调用合理的输入并验证输出值。还要检查对于期望的输入和参数值范围,模型输出和导数保持有限。

对于创建灰盒模型文件和的示例idnlgrey模型对象,看创建idnlgrey模型文件

有关指定模型结构的代码文件和mex文件的示例,请参见工具箱/识别/ iddemos /例子文件夹中。例如,直流电机的模型在文件中有描述dcmotor_m而且dcmotor_c

构造idnlgrey对象

在使用模型结构创建函数或mex文件之后,定义一个idnlgrey对象。这个对象有许多线性的特性idgrey模型对象。

使用以下通用语法定义idnlgrey模型对象:

m = idnlgrey ('文件名”,命令,参数,InitialStates)

idnlgrey参数定义如下:

  • 文件名-存储模型结构的函数或墨西哥文件的名称。当您使用此模型对象进行模型估计、预测或模拟时,此文件必须在MATLAB路径中。

  • 订单-有三个分量的向量(纽约νNx),指定模型输出的数量纽约,输入的数量ν,和状态数Nx

  • 参数—参数,指定为结构体数组、单元格数组或双数组。

  • InitialStates—和参数设置一样。必须是第四个输入idnlgrey构造函数。

属性的其他属性也可以指定idnlgrey模型,包括仿真方法和相关选项。有关此对象及其属性的详细信息,请参见idnlgrey参考页面。

使用nlgreyestpem来估计灰盒模型。在进行估计之前,建议对模型进行模拟,以验证模型文件已被正确编码。例如,计算模型对估计数据输入信号的响应sim卡

y = sim(模型、数据)
在那里,模型idnlgrey对象,数据是估算数据(iddata对象)。

使用nlgreyest非线性灰盒模型的估计

您可以使用nlgreyest命令来估计未知idnlgrey利用测量数据建模参数和初始状态。

数据的输入-输出维度必须与为对象指定的输入和输出顺序兼容idnlgrey模型。

使用以下通用估计语法:

m2 = nlgreyest(数据、米)

在哪里数据是估计数据和idnlgrey您构建的模型对象。输出平方米是一个idnlgrey相同配置的型号,并更新参数和初始状态以适应数据。关于评估的更多信息可以从报告财产。如欲了解更多有关报告怎么用呢,看输出参数nlgreyest参考页,或类型平方米。报告在命令行上。

方法可以指定其他估计选项nlgreyestOptions选项设置,包括SearchMethod而且SearchOption

有关验证模型的信息,请参见模型验证

用MATLAB文件表示非线性动力学灰盒估计

这个例子展示了如何构造、估计和分析非线性灰盒模型。

非线性灰色矩形(idnlgrey)模型适用于估计由连续或离散时间的非线性状态空间结构描述的系统的参数。两种都可以idgrey(线性灰盒模型)和idnlgrey对象来建模线性系统。但是,你只能用idnlgrey表示非线性动力学。学习线性灰盒建模的使用idgrey,请参阅使用系统识别工具箱构建结构化和用户定义的模型

对该模型

在本例中,您将使用idnlgrey对象。

图1:直流电机原理图。

如果你忽略干扰并选择y (1)作为角位置[rad]和y (2)作为电机的角速度[rad/s],可以建立如下形式的线性状态空间结构(推导参见Ljung, L.系统识别:用户的理论,Upper Saddle River, NJ, Prentice-Hall PTR, 1999,第2版,第95-97页):

1 d | 0 | | 0 |——x (t) = | | x (t) + | | u (t) dt | 0 1 /τ| | k /τ|
| 1 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。的名字':电压输入->角位置输出']);情节(z (:, 1,1));绘制第一个输入输出对(电压->角位置)。图(“名字”[z。的名字':电压输入->角速度输出']);情节(z (: 2 1));绘制第二个输入输出对(电压->角速度)。

图2:直流电机的输入输出数据。

直流电机的线性建模

1.用函数表示直流电机的结构。

在本例中,您使用MATLAB®文件,但您也可以使用C mex文件(以获得计算速度)、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维矩阵。

  • 变长度输入宗量辅助输入参数

2.表示直流电机的动态idnlgrey对象。

该模型描述了输入如何使用状态方程生成输出。

文件名=“dcmotor_m”描述模型结构的文件。Order = [2 1 2];模型订单[ny nu nx]。参数= [1;0.28);%初始参数。Np = 2。InitialStates = [0;0);初始初始状态。t = 0;%的时间连续系统。nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts,...“名字”直流电机的);

在实践中,有干扰会影响输出。一个idnlgreyModel没有显式地对干扰进行建模,而是假设这些干扰只是被添加到输出中。因此,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: Name: 'Angular position'单位:'rad'值:0最小值:-Inf最大值:Inf固定:1 ans = struct with fields: Name: 'Static gain'单位:'rad/(V*s)'值:0.2800最小值:-Inf最大值:Inf固定:0

c.在一次调用中检索所有初始状态或模型参数的信息。

例如,获取固定的(非估计的)初始状态的信息和所有模型参数的最小值。

getinit (nlgr“固定”) getpar (nlgr“最小值”
ans = 2x1 cell array {[1]} {[1]} ans = 2x1 cell array {[-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' Order: [1x1 struct] Parameters: [2x1 struct] InitialStates: [2x1 struct] FileArgument: {} SimulationOptions: [1x1 struct] TimeVariable: 't' NoiseVariance: [2x2 double] InputName: {'Voltage'} InputUnit: {'V'} InputGroup: [1x1 struct] OutputName: {2x1 cell} OutputUnit: {2x1 cell} OutputGroup: [1x1 struct]注释:[0x1 string] UserData: [] Name: 'DC-motor' Ts: 0 TimeUnit: 'seconds'报告:[1x1 idresults.nlgreyest]

初始直流电机模型的性能评价

在估计参数之前τ而且k,使用默认的微分方程求解器(具有自适应步长调整的龙格-库塔45求解器),模拟带有参数猜测的系统输出。模拟选项是使用“SimulationOptions”模型属性指定的。

1.将绝对和相对误差容差设置为较小的值(1 e-6而且1 e-5分别)。

nlgr.SimulationOptions.AbsTol = 1 e-6;nlgr.SimulationOptions.RelTol = 1 e-5;

2.将模拟输出与实测数据进行比较。

比较显示一个或多个模型的测量和模拟输出,而预测,用相同的输入参数调用,显示模拟的输出。

模拟和测量输出显示在一个图形窗口。

比较(z, nlgr);

图3:测量输出与初始直流电机模型模拟输出的比较。

参数估计

估计参数和初始状态使用nlgreyest,是一种非线性灰盒模型的预测误差最小化方法。评估选项,例如评估进度显示的选择,是使用“nlgreyestOptions”选项集指定的。

nlgr = setinit (nlgr,“固定”,{假假});估计初始状态。选择= nlgreyestOptions (“显示”“上”);NLGR = nlgreyest(z, NLGR, opt);

估计直流电机模型的性能评价

1.回顾关于评估过程的信息。

该信息存储在报告财产的idnlgrey对象。该属性还包含关于如何估计模型的信息,例如求解器和搜索方法、数据集,以及为什么终止估计。

nlgr。报告流(\n\n搜索终止条件:\n') nlgr.Report.Termination
ans = Status: 'Estimated using NLGREYEST' Method: 'Solver: 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直流电机模型得到的残差。

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)。输入:u(1)电压(t) [V]状态:初始值x(1)角位置(t) [rad] xinit@exp1 0.0302675(估计)in [-Inf, Inf] x(2)角速度(t) [rad/s] xinit@exp1 -0.133777(估计)in [-Inf, Inf]输出:y(1)角位置(t) [rad] y(2)角速度(t) [rad/s]参数:值标准差p1时间常数[s] 0.243649 0.00396671(估计)in [-Inf, Inf] p2静态增益[rad/(V*s)] 0.249644 0.000284486(估计)in [-Inf, Inf]名称:dc -电机状态:终止条件:成本变化小于规定公差。迭代次数:5,函数计算次数:6使用Solver: ode45估计;在时域数据“DC-motor”上搜索lsqnonlin。拟合估计数据:[98.34;84.47]% FPE: 0.001096, MSE: 0.1187模型“报告”属性中的更多信息。< a href = " matlab:如果存在(“nlgr”、“var”),如果isa (nlgr idnlgrey”),disp (' ');Disp (get(nlgr)),否则Disp (' ');disp('无法显示变量nlgr的属性,因为它不再是/一个idnlgrey对象。');,end, else matlab.graphics.internal.getForDisplay('nlgr'), end">模型属性 . properties

结论

这个例子说明了执行非线性灰盒建模的基本工具。参见其他非线性灰盒示例了解:

  • 在更高级的建模情况下使用非线性灰盒模型,如建立非线性连续和离散时间、时间序列和静态模型。

  • 编写和使用C MEX模型文件。

  • 处理nonscalar参数。

  • 某些算法选择的影响。

有关使用系统识别工具箱识别动态系统的更多信息,请访问系统辨识工具箱产品信息页面。

非线性灰盒模型的性质和估计选项

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

另请参阅

|

相关的例子

更多关于

Baidu
map