主要内容

估计非线性灰度箱型号

指定非线性灰盒模型结构

您必须代表您的系统作为一组一阶非线性差异或微分方程:

X T. = F T. X T. T. P. 一种 R. 1 P. 一种 R. 2 ...... P. 一种 R. N y T. = H T. X T. 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. S. 用于离散时间表示TS.作为采样时间。FH是任意线性或非线性功能NX.纽约分别组件。NX.是州的数量和纽约是输出的数量。

建立系统的方程后,创建函数或MEX文件。MEX-FILES,可以在C或FORTRAN中创建,是可以由MATLAB加载和执行的动态链接子程序®.有关mex -文件的更多信息,请参见C MEX文件应用程序.此文件称为ode文件或模型文件。

模型文件的目的是作为时间,状态,输入和型号参数返回状态衍生工具和模型输出,如下所示:

[dx,y] = modfilename(t,x,u,p1,p2,......、pN FileArgument)

小费

用于编写C MEX文件的模板文件,idnlgrey_model_template.c., 位于MATLAB / TOOLBOX / IDEN / NLIDID

输出变量是:

  • DX.-状态空间方程右侧s。列向量NX.参赛作品。对于静态模型,dx = []

    用于离散时间模型。DX.是下一个时间步的状态值吗x (t + Ts)

    对于连续时间模型。DX.是时刻的状态导数吗T., 或者 D. X D. T.

  • y-表示输出方程的右侧(s)。列向量纽约参赛作品。

文件输入是:

  • T.- 当前时间。

  • X- 时间向量时T..对于静态模型,等于[]

  • —输入矢量“时刻”T..对于时间序列模型,等于[]

  • p1,p2,...,pn- 参数,可以是真正的标量,列向量或二维矩阵。N参数对象的数量。对于标量参数,N是参数元素的总数。

  • fileargument.- 包含可能需要更新状态方程中的常量所需的辅助变量。

小费

创建模型文件后,直接从MATLAB软件调用合理输入并验证输出值。另外检查有关预期的输入和参数值范围,模型输出和衍生物仍然有限。

有关创建灰度框模型文件的示例和idnlgrey模型对象,见创建IDNLGREY模型文件

有关指定模型结构的代码文件和MEX文件的示例,请参阅工具箱/标识/ IDDEMOS /示例文件夹。例如,文件中描述了DC电机的模型dcmotor_mdcmotor_c

构建idnlgrey对象

使用模型结构创建函数或MEX文件后,定义一个idnlgrey目的。此对象共享线性的许多属性idgrey.模型对象。

使用以下常规语法来定义idnlgrey模型对象:

m = idnlgrey('文件名',订单,参数,initialStates)

idnlgrey参数的定义如下:

  • '文件名'- 存储模型结构的函数或MEX文件的名称。当您使用此模型对象进行模型估计,预测或模拟时,此文件必须位于MATLAB路径上。

  • 命令- 矢量与三个条目[ny nu nx],指定模型输出的数量纽约,输入的数量nu.,以及州的数量NX.

  • 参数- 参数,指定为结构体阵列,单元格阵列或双数组。

  • initialstates.-与参数相同。一定是?的第四个输入idnlgrey构造函数。

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

使用nlgreyest或者pem估计您的灰色盒式模型。在估算之前,建议模拟模型以验证模型文件是否已正确编码。例如,计算使用估计数据的输入信号的模型响应sim卡

Y = SIM(模型,数据)
在那里,模型是个idnlgrey对象,数据是估计数据(iddata.目的)。

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

你可以使用nlgreyest命令去估计未知情况idnlgrey使用测量数据模型参数和初始状态。

数据的输入输出尺寸必须与您为其指定的输入和输出订单兼容idnlgrey模型。

使用以下常规估计语法:

m2 = nlgreyest(数据、米)

在哪里数据估计数据是否和m是个idnlgrey您构建的模型对象。输出平方米是一个idnlgrey相同配置的模型m,更新参数和初始状态以适应数据。可以从报告财产。有关的更多信息报告如何使用它,看输出参数在里面nlgreyest引用页或类型m2.report.在命令行上。

您可以使用该方法指定其他估计选项nlgreyestoptions.选项集,包括SearchMethodsearchOption.

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

代表使用MATLAB文件进行灰度框估计的非线性动态

此示例显示如何构建,估计和分析非线性灰度盒模型。

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

关于模型

在此示例中,使用使用的线性DC电机的动态模拟idnlgrey目的。

图1:DC电动机的示意图。

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

D |0 1 ||0 |-  x(t)= ||x(t)+ ||U(t)dt |0 -1 / TAU | | k/tau |
|1 0 |Y(t)= ||x(t)|0 1 |

TAU电机的时间常数在[s]和中吗K.是[rad /(v * s)]中的输入到角速度的静态增益。查看ljung(1999)的方式TAUK.涉及电机的物理参数。

关于输入输出数据

1.加载直流电机数据。

加载(全氟(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.name.':电压输入 - >角位置输出']);绘图(Z(:,1,1));%绘制第一输入输出对(电压 - >角位置)。图('名称',[z.name.':电压输入 - >角速度输出']);绘图(Z(:,2,1));%绘制第二输入输出对(电压 - >角速度)。

图2:来自DC电机的输入输出数据。

直流电动机的线性建模

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(静态系统状态向量,[]),(输入载体,[]时间序列)。

  • 订购的参数列表随后。参数可以是标量,列向量或二维矩阵。

  • varargin.对于辅助输入参数

2.使用一个代表直流电机动态idnlgrey目的。

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

filename =.'dcmotor_m';%文件描述模型结构。订单= [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.指定输入和输出名称和单位。

set(nlgr,'InputName''电压''Inputunit'“V”......'outputname',{'角度位置''角速度'},......'OutputUnit',{rad的'rad / s'},......'不时'');

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

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

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

5.查看初始模型。

一种。获取有关该模型的基本信息。

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

尺寸(nlgr)
非线性灰度箱模型,具有2个输出,1个输入,2个状态和2个参数(2个免费)。

湾查看初始状态和参数。

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

nlgr.initialstates(1)nlgr.parameters(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,'min'
ans = 2x1单元阵列{[1]} {[1]} ans = 2x1单元阵列{[-inf]} {[-inf]}

天。获取有关该对象的基本信息:

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' Order: [1x1 struct] Parameters: [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: [] Name: 'DC-motor' Report: [1x1 idresults.nlgreyest]

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

在估计参数之前TAUK.,使用默认差分方程求解器(具有自适应步长调整的Runge-Kutta 45求解器的参数猜测,模拟系统的输出。使用“SimulationOptions”Model属性指定模拟选项。

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

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

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

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

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

比较(z, nlgr);

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

参数估计

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

nlgr = setInit(nlgr,'固定的',{假假});%估计初始状态。opt = nlgreyestoptions('展示''上');nlgr = nlgreyest(z,nlgr,选择);

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

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

此信息存储在报告财产的财产idnlgrey目的。该属性还包含有关如何估计模型的信息,例如求解器和搜索方法,数据集以及估计终止的原因。

nlgr.report fprintf('\ n \ n \ n搜索终止条件:\ n') nlgr.Report.Termination
ans =状态:'使用nlgreyest'估计方法:'求解器:ode45;搜索:lsqnonlin'fit:[1x1 struct]参数:[1x1 struct]选项已使用:[1x1 idoptions.nlgreyest] randstate:[] dataused:[1x1 struct]终止:[1x1 struct]搜索终止条件:ans = struct fields:Whystop:'成本的变化小于指定的公差。迭代:5:1.4013E-04 FCNCOUNT:6算法:“信任区域反光”

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.检查预测错误。

所获得的预测误差是小的,并且以零(非偏置)为中心。

pe(z,nlgr);

图6:用估计的IDNLGREY DC电动机模型获得的预测误差。

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

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

图('名称',[nlgr.name.':估计模型的残差']);渣油(z, nlgr);

图7:用估计的IDNLGREY DC电动机模型获得的残差。

6.绘制阶跃响应。

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

图('名称',[nlgr.name.':估计模型的步骤响应']);步骤(nlgr);

图8:阶跃响应与估计的IDNLGREY直流电机模型。

7.检查模型协方差。

您可以通过查看估计的协方差矩阵和估计的噪声方差来评估估计模型的质量。一个“小”价值(我,我)协方差矩阵的对角元素表示一世:当使用所选择的模型结构时,模型参数对于解释系统动力学很重要。小的噪声方差(多输出系统的协方差)也很好地表明了该模型能够很好地捕获估计数据。

getcov(nlgr)nlgr.noisevariance
Ans = 1.00e -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/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使用求解器估计:ODE45;搜索:LSQNONLIN在时域数据“DC-MOTOR”。适合估计数据:[98.34; 84.47]%FPE:0.001096,MSE:0.1187在模型的“报告”属性中的更多信息。

结论

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

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

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

  • 处理非卡尔参数。

  • 某些算法选择对影响。

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

非线性灰度框模型属性和估算选项

idnlgrey基于模型结构和属性创建非线性灰度框模型。创建的参数和初始状态idnlgrey估计对象使用nlgreyest

下面的模型属性和评估选项会影响模型的创建和评估结果。

仿真方法

您使用的是使用仿真方法模拟选项结构体)属性idnlgrey

系统识别工具箱™软件提供了用于模拟的多个可变步骤和固定步骤求解器idnlgrey楷模。

对于离散时间系统,默认解算器是'fixedstepddiscrete'.对于连续时间系统,默认求解器是'ode45'.默认,simulationOptions.Solver.设定为'汽车',它会自动选择'ode45'或者'fixedstepddiscrete'在估计和仿真期间 - 取决于系统是否连续或正在离散。

要查看可用的索盘列表及其属性,请参阅模拟选项模型物业idnlgrey参考页面。

搜索方法

您可以使用该方法指定用于估计模型参数的搜索方法SearchMethod选项nlgreyestoptions.选项集。两类方法可用于非线性灰度盒建模。

一类方法包括基于线搜索方法的最小化方案,包括高斯-牛顿型方法、最陡下降方法和Levenberg-Marquardt方法。

非线性最小二乘的信任区域反射牛顿方法(lsqnonlin.),成本是测量和模拟输出之间错误的平方和,需要优化工具箱™软件。当参数界限与默认+/- INF不同时,此搜索方法基于行搜索处理比方案更好的界限。但是,与基于线路搜索的方法不同,lsqnonlin.通过多输出案例中的估计噪声方差的反比无法处理自动加权。有关更多信息,请参阅产量评估选项中的nlgreyestoptions.参考页面。

默认,SearchMethod设定为汽车,它自动从可用的最小化器中选择方法。如果安装了优化工具箱产品,SearchMethod设定为'lsqnonlin'.除此以外,SearchMethod是基于线路搜索的方案的组合。

有关此和其他的详细信息nlgreyest估算选项,见nlgreyestoptions.

梯度的选择

您指定了使用该方法计算渐变的方法毕业选项选项nlgreyestoptions.选项集。梯度是关于未知参数和初始状态的错误的衍生物。

通过数值扰动未知数量并测量它们对模拟误差的影响来计算梯度。

梯度计算的选项包括差分格式的选择(前向、后向或中心),未知量的最小扰动的大小,以及梯度是同时计算还是单独计算。

有关此和其他的详细信息nlgreyest估算选项,见nlgreyestoptions.

也可以看看

|

相关例子

更多关于