主要内容

估计非线性灰色矩形模型

指定非线性灰色矩形模型结构

你必须代表系统的一阶非线性差分或微分方程:

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样品时间。FH是任意的线性或非线性函数Nx纽约组件,分别。Nx的状态和数量吗纽约是输出的数量。

建立系统的方程后,创建一个函数或MEX-file。mex files,可以创建在C或Fortran,都是动态链接的子程序可以加载和执行由MATLAB®。关于mex files的更多信息,请参阅从MATLAB编写C函数调用(墨西哥人文件)。这个文件称为一个ODE文件或一个模型文件。

模型文件的目的是返回状态衍生品和模型的输出作为时间的函数,输入和模型参数,如下:

(dx, y) = MODFILENAME (t, x, u, p1, p2,、pN FileArgument)

提示

编写C MEX-file的模板文件,IDNLGREY_MODEL_TEMPLATE.c,位于matlab工具箱/识别/ nlident

输出变量有:

  • dx——代表了状态方程的右边(s)(年代)。一个列向量,Nx条目。静态模型,dx = []

    对于离散时间模型。dx的值是美国下一个时间步x (t + Ts)

    对连续时间模型。dx在时间是衍生品吗t,或 d x d t

  • y——代表右侧(s)的输出方程(s)。一个列向量,纽约条目。

文件的输入:

  • t——当前时间。

  • x——状态向量t。静态模型,=[]

  • u——输入向量t。时间序列模型,=[]

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

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

提示

创建一个模型文件后,称之为直接从MATLAB软件与合理的输入和验证输出值。也为预期的输入和检查参数值范围,模型的输出和衍生品仍然有限。

为创建灰色矩形模型文件和的一个例子idnlgrey模型对象,看创建idnlgrey模型文件

的例子代码文件和mex files指定模型结构,看到工具箱/识别/ iddemos /例子文件夹中。例如,直流电机的模型中描述文件dcmotor_mdcmotor_c

构建idnlgrey对象

在您创建的函数或MEX-file模型结构,定义一个idnlgrey对象。这个对象的线性股票的许多属性idgrey模型对象。

一般使用以下语法来定义idnlgrey模型对象:

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

idnlgrey参数定义如下:

  • 文件名的函数的名称或MEX-file存储模型结构。这个文件必须在MATLAB路径时使用这个模型对象模型估计,预测或模拟。

  • 订单——矢量和三个条目(纽约νNx),指定输出的数量模型纽约输入的数量ν和的状态数Nx

  • 参数——指定为参数结构体数组、细胞数组或数组的两倍。

  • InitialStates——以同样的方式作为参数指定。一定是第四的输入idnlgrey构造函数。

您还可以指定额外的属性idnlgrey模型,包括模拟方法和相关的选项。对于这个对象及其属性的详细信息,查看idnlgrey参考页面。

使用nlgreyestpem估计你的灰色矩形模型。估计之前,建议模拟模型来验证该模型文件已经正确编码。例如,计算模型对评估数据的输入信号使用sim卡:

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

使用nlgreyest估计非线性灰色矩形模型

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

数据的输入输出尺寸必须符合您指定输入和输出命令的idnlgrey模型。

使用下面的一般估计的语法:

m2 = nlgreyest(数据、米)

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

您可以指定额外的评估选择使用nlgreyestOptions选项设置,包括SearchMethodSearchOption

验证模型的信息,请参阅模型验证

使用MATLAB文件代表非线性动力学的方框估计

这个例子展示了如何构建,估计和分析非线性灰色矩形模型。

非线性灰色矩形(idnlgrey)模型适用于估算参数描述的系统在连续或离散时间状态空间结构非线性。您可以使用两个idgrey(线性灰色矩形模型)和idnlgrey线性系统对象模型。然而,您可以只使用idnlgrey代表非线性动力学。了解线性灰色矩形建模使用idgrey,请参阅使用系统辨识工具箱构建结构化和用户定义的模型

对该模型

在本例中,您的动力学模型线性直流电机使用idnlgrey对象。

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

如果你忽略干扰和选择y (1)随着角位置(rad)y (2)随着角速度(rad / s)的电机,您可以设置一个线性状态空间结构的形式(见Ljung, l系统识别:理论为用户,鞍上游,新泽西,新世纪PTR, 1999年,第二版,推导p。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。Tst一个rt=0;z。T我米eUnit =“年代”;

4所示。图数据。

两个情节窗口所示的数据。

图(“名字”,(z.Name:电压输入- >角位置输出的]);情节(z (:, 1,1));%情节首先输入-输出(电压- >角位置)。图(“名字”,(z.Name:电压输入- >角速度输出的]);情节(z (: 2 1));%绘制第二输入-输出(电压- >角速度)。

图2:从一个直流电机的输入-输出数据。

直流电机的线性建模

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

在本例中,您使用MATLAB®文件,但是您还可以使用C mex files(获得计算速度),档案或函数句柄。有关更多信息,请参见创建IDNLGREY模型文件

直流电机的功能dcmotor_m.m,如下所示。

函数(dx, y) = dcmotor_m (t, x, u,τ,k,变长度输入宗量)
%输出方程。y = [x (1);…%角位置。x (2)……%角速度。];
%状态方程。dx = [x (2);…%角速度。-(1 /τ)* x (2) + (k /τ)* u (1)……%角加速度。];

文件必须始终返回以下结构:

输出参数:

  • dx是向量的衍生品在连续时间情况下,在离散情况下,状态更新值。

  • y是输出方程

输入参数:

  • 前三个输入参数必须:t(时间),x(静态系统状态向量,[]),u时间序列(输入向量,[])。

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

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

2。代表了使用一个直流电机动力学idnlgrey对象。

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

文件名=“dcmotor_m”;%文件描述模型结构。订单= (2 1 2);%模型[纽约νnx]命令。参数= [1;0.28);%初始参数。Np = 2。InitialStates = [0;0);%初始初始状态。t = 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)”});

您还可以使用setinitsetpar赋值、最小值、最大值,同时估计状态为初始状态或参数。

5。查看初始模型。

一。基本信息模型。

直流电机有2个(最初的)州和2模型参数。

大小(nlgr)
非线性灰色矩形模型2输出,1输入,2和2参数(2免费)。

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

初始状态和参数结构数组。字段指定一个初始状态或参数的属性。类型帮助idnlgrey.InitialStates帮助idnlgrey.Parameters为更多的信息。

nlgr.Parameters nlgr.InitialStates (1) (2)
ans =结构体字段:名称:角位置的单元:rad的值:0最低:负最大:正固定:1 ans =结构体字段:名称:“静态增益”单元:rad / (V * s)的值:0.2800最低:负最大:正固定:0

c。检索信息对所有初始状态或在一个调用模型参数。

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

getinit (nlgr“固定”)getpar (nlgr“最小值”)
ans = 2 x1单元阵列{[1]}{[1]}ans = 2 x1单元阵列{(负)}{(负)}

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)。名称:直流电机状态:由直接建设或转换。不估计。

使用得到获得更多关于模型属性的信息。的idnlgrey对象股票的许多特性参数线性模型对象。

get (nlgr)
文件名:“dcmotor_m”顺序:[1 x1 struct]参数:[2 x1 struct] InitialStates: [2 x1 struct] FileArgument: {} SimulationOptions: [1 x1 struct] TimeVariable:“t”NoiseVariance: [2 x2双]InputName:{“电压”}InputUnit: {“V”} InputGroup: [1 x1 struct] OutputName: {2 x1细胞}OutputUnit: {2 x1细胞}OutputGroup: [1 x1 struct]指出:[0 x1字符串]用户数据:[]的名字:直流电机的Ts: 0 TimeUnit:“秒”报告:[1 x1 idresults.nlgreyest]

最初的直流电机模型的绩效评估

之前估计的参数τk模拟系统的输出参数估计使用默认的微分方程解算器(龙格-库塔45解决自适应步长调整)。模拟选项指定使用“SimulationOptions”模型属性。

1。设置绝对和相对误差公差小值(1 e-61 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,选择);

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

1。审核信息估计的过程。

这些信息存储在报告财产的idnlgrey对象。房地产还包含信息如何估计模型,解算器和搜索等方法,数据集,估计是终止的原因。

nlgr。报告流(' \ n \ nThe搜索终止条件:\ n”)nlgr.Report.Termination
ans =状态:“估计使用NLGREYEST”方法:“解决者:数值;搜索:lsqnonlin适合:[1 x1 struct]参数:[1 x1 struct] OptionsUsed: [1 x1 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.Name:估计模型的残差的]);渣油(z, nlgr);

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

6。绘制阶跃响应。

单位输入步骤结果在一个角位置显示斜缓行为和的角速度稳定在一个恒定的水平。

图(“名字”,(nlgr.Name:估计模型的阶跃响应的]);步骤(nlgr);

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

7所示。检查模型协方差。

你可以评估的质量估计模型在一定程度上通过查看估计协方差矩阵估计噪声方差。一个“小”的价值(我)协方差矩阵的对角元素表示:th模型参数是重要的解释了系统动力学在使用所选的模型结构。小噪声方差协方差的多输出系统)元素也是很好的表明模型捕获估计数据的一个好方法。

getcov nlgr.NoiseVariance (nlgr)
= 1.0 e-04 * 0.1573 0.0021 0.0021 0.0008岁= 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)(2)。输入:u(1)电压(t) [V]状态:初始值x(1)角位置(t) (rad) xinit@exp1 0.0302675(估计)(负无穷,正无穷)x(2)角速度(t) (rad / s) xinit@exp1 -0.133777(估计)[无穷,正]输出:y(1)角位置(t) (rad) y(2)角速度(t) (rad / s)参数:标准差值p1时间常数[s] 0.243649 - 0.00396671(估计)[无穷,正]p2静态增益(rad / (V * s)) 0.249644 - 0.000284486(估计)(负无穷,正无穷)名称:直流电机状态:终止条件:改变成本小于指定的公差。迭代次数:5、功能评估:6估计使用解算器:数值;搜索:lsqnonlin时域数据“直流电机”。适合估算数据:[98.34,84.47]%消防工程:0.001096,MSE: 0.1187在模型的“报告”属性的更多信息。< a href = " matlab:如果存在(“nlgr”、“var”),如果isa (nlgr idnlgrey”), disp (' ');disp (get (nlgr)),否则disp (' ');disp(“无法显示属性变量nlgr因为它不再是一个/一个idnlgrey对象。”);,,其他matlab.graphics.internal.getForDisplay (“nlgr”),结束" >模型属性< / >

结论

这个例子演示了基本的工具来执行非线性灰色矩形建模。看到其他非线性灰色矩形例子来了解:

  • 利用非线性灰色矩形模型在更先进的建模情况下,如建立非线性连续和离散时间、时间序列和静态模型。

  • 使用C编写和墨西哥人模型文件。

  • 处理nonscalar参数。

  • 某些算法选择的影响。

更多信息的识别与系统辨识工具箱动态系统,访问系统辨识工具箱产品信息页面。

非线性灰色矩形模型属性和评估选择

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

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

模拟方法

您指定使用的模拟方法SimulationOptions(结构体)的属性idnlgrey

系统辨识工具箱™软件提供了几个变步和固定的动力学模拟idnlgrey模型。

离散时间系统默认的能手“FixedStepDiscrete”。连续时间系统默认的能手“数值”。默认情况下,SimulationOptions.Solver被设置为“汽车”,它会自动选择“数值”“FixedStepDiscrete”在估计和simulation-depending是否连续或离散时间系统。

查看可用动力学及其属性的列表,查看SimulationOptions模型属性idnlgrey参考页面。

搜索方法

您指定的搜索方法估计模型参数使用SearchMethod选择的nlgreyestOptions选项组。两种方法可用于非线性灰色矩形建模。

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

非线性最小二乘的信赖域反射牛顿法(lsqnonlin),成本是错误的平方和之间的测量和模拟输出,需要优化工具箱™软件。当参数范围不同于默认的+ / - Inf,这种搜索方法处理边界比基于线搜索计划。然而,与line-search-based方法不同,lsqnonlin不能处理自动估计噪声方差的倒数加权的多输出情况。有关更多信息,请参见OutputWeight估计选项nlgreyestOptions参考页面。

默认情况下,SearchMethod被设置为汽车从可用的解,自动选择一个方法。如果优化工具箱安装产品,SearchMethod被设置为“lsqnonlin”。否则,SearchMethod是基于线搜索的组合方案。

这个和其他的详细信息nlgreyest估计选项,请参阅nlgreyestOptions

梯度的选择

您指定的方法计算梯度使用GradientOptions选择的nlgreyestOptions选项设置。梯度是错误的衍生品对未知参数和初始状态。

梯度是由数值计算未知扰动量和测量他们对模拟误差的影响。

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

这个和其他的详细信息nlgreyest估计选项,请参阅nlgreyestOptions

另请参阅

|

相关的例子

更多关于