主要内容

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

该实例说明了如何构建、估计和分析非线性灰箱模型。

非线性灰色矩形(idnlgrey.)模型适用于估计由非线性状态空间结构在连续或离散时间中描述的系统的参数。你可以使用两者idgrey(线性灰箱模型)和idnlgrey.建模线性系统的对象。但是,您只能使用idnlgrey.代表非线性动力学。了解使用线性灰度盒建模idgrey看见使用系统识别工具箱™构建结构化和用户定义模型.

对该模型

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

图1:直流电机的原理图。

如果你忽略了干扰并选择Y(1)作为角度位置[rad]和y(2)作为电机的角速度[rad/s],您可以建立以下形式的线性状态空间结构(参见Ljung,L.系统识别:用户理论,新泽西州上鞍河,普伦蒂斯霍尔PTR,1999年,第2版,第95-97页的推导):

1 d | 0 | | 0 |——x (t) = | | x (t) + | | u (t) dt | 0 1 /τ| | k /τ|
|10 | 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 ='s'

4.绘制数据。

数据显示在两个绘图窗口中。

数字(“姓名”[z。的名字':电压输入 - >角位置输出']);情节(z (:, 1,1));绘制第一输入-输出对(电压->角位置)。数字(“姓名”[z。的名字':电压输入->角速度输出']);情节(z (: 2 1));%绘制第二输入输出对(电压 - >角速度)。

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

直流电机的线性建模

1.代表功能中的直流电机结构。

在本例中,您使用MATLAB®文件,但也可以使用C MEX文件(以提高计算速度)、P文件或函数句柄。有关更多信息,请参阅创建IDNLGREY模型文件.

调用DC电机功能dcmotor_m.m并且如下所示。

函数[dx,y]=dcmotor_m(t,x,u,tau,k,varargin)
%输出方程。Y = [x(1);...%角度位置。x(2)...%角速度。];
%状态方程.dx=[x(2);…%角速度。-(1/tau)*x(2)+(k/tau)*u(1)…%角加速度。];

文件的结构必须总是返回以下内容:

输出参数:

  • dx是连续时间情况下的状态导数向量,离散时间情况下的状态更新值向量。

  • Y为输出方程

输入参数:

  • 前三个输入参数必须为:T(时间),x(状态向量,[]对于静态系统),U(输入载体,[]时间序列)。

  • 下面是有序的参数列表。参数可以是标量、列向量或二维矩阵。

  • varargin.用于辅助输入参数

2.表示直流电机的动力学使用idnlgrey.对象。

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

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

在实践中,存在影响输出的干扰。一个idnlgrey.模型没有明确地对扰动进行建模,但假设这些扰动只是添加到输出中。因此,idnlgrey.模型相当于输出误差(OE)模型。如果没有噪声模型,过去的输出不会影响未来输出的预测,这意味着任何预测范围k的预测输出与模拟输出一致。

3.指定输入和输出名称以及单位。

集合(nlgr,“InputName”,“电压”,“InputUnit”,“V”,...“OutputName”,{角位置的,的角速度},...'OutputUnit',{'rad','rad / s'},...“TimeUnit”,'s');

4.指定初始状态和参数的名称和单位。

nlgr=setinit(nlgr,“姓名”,{角位置的的角速度});nlgr=setinit(nlgr,“单位”,{'rad''rad / s'}); nlgr=setpar(nlgr,“姓名”,{的时间常数'静态增益'}); nlgr=setpar(nlgr,“单位”,{'s''rad /(v * s)'});

你也可以用setInit.setpar同时为所有初始状态或参数指定值、最小值、最大值和估计状态。

5.查看初始模型。

a.获取模型的基本信息。

DC电机具有2个(初始)状态和2个模型参数。

尺寸(nlgr)
具有2个输出、1个输入、2个状态和2个参数(2个自由)的非线性灰箱模型。

b.查看初始状态和参数。

初始状态和参数都是结构阵列。字段指定单个初始状态或参数的属性。类型帮助Idnlgrey.initialstates.帮助idnlgrey。参数为更多的信息。

nlgr.Parameters nlgr.InitialStates (1) (2)
ans = struct with字段:名称:'角位置'单元:'rad'值:0最小值:-inf最大值:inf固定:1 ans = struct with字段:名称:'静态增益单元:'rad /(v *s)'值:0.2800最小值:-INF最大值:INF固定:0

C。在一个呼叫中检索所有初始状态或模型参数的信息。

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

getinit (nlgr“固定”) getpar (nlgr“最小值”)
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个输入,2个状态,2个输出和2个自由参数(2/2))。名称:DC电机状态:通过直接构建或转换创建。未估计。

得到以获取有关模型属性的更多信息。的idnlgrey.对象共享参数线性模型对象的许多属性。

get (nlgr)
filename:'dcmotor_m'顺序:[1x1 struct]参数:[2x1 struct] initialstates:[2x1 struct] fileargument:{}仿真选项:[1x1 struct] timevariable:'t'noisevariance:[2x2 double] ts:0 oneunir:'秒'输入名称:{'电压'} InputUnit:{'v'} InputGroup:{2x1 Cell} OutputNIT:{2x1 Cell} OutputUnit:{2x1 Cell} OutputGroup:[1x1 struct]注意:[0x1字符串] UserData:[]名称:'DC-MOTOR'报告:[1x1 idresults.nlgreyest]

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

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

1.将绝对和相对误差公差设置为小值(1 e-61 e-5分别为)。

nlgr.simulationOptions.abstol = 1E-6;nlgr.simulationOptions.reltol = 1e-5;

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

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

模拟输出和测量输出显示在绘图窗口中。

比较(z,nlgr);

图3:直流电机初始模型的实测输出与仿真输出比较。

参数估计

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

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

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

1.审查有关估算过程的信息。

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

nlgr。报告流(“\n\n搜索终止条件:\n”)nlgr.report.Termination.
ans = Status: 'Estimated using NLGREYEST'方法:'Solver: ode45;搜索:lsqnonlin' Fit: [1x1 struct] Parameters: [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 DC电动机模型的模拟输出之间的比较。

3.比较表现的idnlgrey.模型采用二阶ARX模型。

Na = [2 2;2 2];nb = [2;2);nk = [1;1);Dcarx = arx(z, [na nb nk]);比较(z, nlgr, dcarx);

图5:测量输出与估计的IDNLGRY和ARX直流电机模型的模拟输出之间的比较。

4.检查预测错误。

获得的预测误差很小,且集中在零附近(无偏差)。

体育(z, nlgr);

图6:用估计的IDNLGREY直流电机模型得到的预测误差。

5.检查残差(“剩余物”)。

残差表示模型未解释的部分,对于良好的模型质量残差较小。使用渣油命令查看残差之间的相关性。图的第一列显示了两个输出的残差的自相关性。第二列显示了这些残差与输入“电压”的相互关系。相关性在可接受范围内(蓝色区域)。

数字(“姓名”,[nlgr.name.':估计模型的残差']);羟(Z,NLGR);

图7:用估计的直流电机模型获得的残差。

6.绘制阶跃响应。

单元输入步骤导致角度位置,示出了斜坡型行为和以恒定水平稳定的角速度。

数字(“姓名”, [nlgr。的名字':估计模型的步骤响应']);步骤(nlgr);

图8:估计IDNLGREY DC电机模型的步骤响应。

7.检查模型协方差。

你可以通过估计协方差矩阵和估计噪声方差来评估估计模型的质量。一个“小”值(一、一)协方差矩阵的对角元素表示:Th模型参数对于使用所选模型结构进行解释系统动态非常重要。小型噪声方差(多输出系统的协方差)元素也是良好的指示,即该模型以良好的方式捕获估计数据。

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个输入,2个状态,2个输出和2个自由参数(共2个)。输入:u(1)电压(t)[V]状态:初始值x(1)角位置(t)[radxinit@exp10.0302675(估计)in[-Inf,Inf]x(2)角速度(t)[rad/s]xinit@exp1[Inf,Inf]中的-0.133777(估计值)输出: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]名称:直流电机状态:终止条件:成本变化小于指定公差..迭代次数:5,功能评估次数:6使用解算器估计:ode45;搜索:时域数据“直流电机”上的lsqnonlin。适合估计数据:[98.34;84.47]%FPE:0.001096,MSE:0.1187模型“报告”中的更多信息所有物

结论

此示例说明了执行非线性灰度盒建模的基本工具。查看其他非线性灰盒示例以了解:

  • 在更先进的建模情况下使用非线性灰度盒式型号,如构建非线性连续和离散时间,时间序列和静态模型。

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

  • 处理nonscalar参数。

  • 某些算法选择对影响。

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