Narendra-Li基准系统:离散时间系统的非线性灰盒建模
这个例子展示了如何识别具有一个输入和一个输出的复杂的人工非线性离散时间系统的参数。该系统最初是由Narendra和Li在文中提出和讨论的
纳伦德拉和s.m.。李。“控制系统中的神经网络”。《神经网络的数学视角》(P. Smolensky, M. C. Mozer, D. E. Rumelhard,编),第11章,第347-394页,Lawrence Erlbaum Associates, Hillsdale, NJ, 1996年。
已经在很多离散时间识别的例子中被考虑过。
离散时间的Narendra-Li基准系统
Narendra-Li系统的离散时间方程为:
x1 (t + Ts) = (x1 (t) / (1 + x1 (t) ^ 2) + p(1)) *罪(x2 (t)) x2 (t + Ts) = x2 (t) * cos (x2 (t)) + x1 (t) * exp (- (x1 (t) ^ 2 + x2 (t) ^ 2) / p (2)) + u (t) ^ 3 / (1 + u (t) ^ 2 + p (3) * cos (x1 (t) + x2 (t))
Y (t) = x1(t)/(1+p(4)*sin(x2(t))+p(5)*sin(x1(t)))
其中x1(t)和x2(t)是状态,u(t)是输入信号,y(t)是输出信号,p是有5个元素的参数向量。
IDNLGREY离散时间Narendra-Li模型
从IDNLGREY模型文件的角度来看,连续时间系统和离散时间系统之间没有区别。因此,Narendra-Li模型文件必须返回状态更新向量dx和输出y,并且应该将t(时间)、x(状态向量)、u(输入)、p(参数(s))和varargin作为输入参数:
function [dx, y] = narendrali_m(t, x, u, p, varargin) % narendrali_m一个离散时间的Narendra-Li基准系统。
%输出方程。y = x (1) / (1 + p (4) * sin (x (2))) + x (2) / (1 + p (5) * sin (x (1)));
状态方程。Dx = [(x(1)/(1+x(1)^2)+p(1))*sin(x(2));...%状态1。x (2) * cos (x (2)) + x (1) * exp (- x (x (1) ^ 2 + (2) ^ 2) / p(2))…%状态2。+u(1)^ 3/(1+u(1)^2+p(3)*cos(x(1)+x(2)))…];
注意,我们在这里选择将所有5个参数压缩为一个参数向量,其中第i:th元素以通常的MATLAB方式引用,即通过p(i)。
以这个模型文件为基础,我们接下来创建一个反映建模情况的IDNLGREY对象。这里值得强调的是,模型的离散性是通过Ts的正值(= 1秒)来指定的。还要注意,Parameters只包含一个元素,即一个5乘1的参数向量,并且使用SETPAR指定该向量的所有组件都是严格正的。
文件名=“narendrali_m”;描述模型结构的文件。Order = [1 1 2];模型订单[ny nu nx]。参数= {[1.05;7.00;0.52;0.52;0.48)};True初始参数(一个向量)。InitialStates = 0 (2,1);初始状态的初始值。Ts = 1;时间离散系统,Ts = 1s。nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts,“名字”,...“独立的印度基准体系”,...“TimeUnit”,“年代”);NLGR = setpar(NLGR,“最低”, {eps(0)*ones(5, 1)});
输入的Narendra-Li模型结构可以通过PRESENT命令得到:
礼物(nlgr);
nlgr = 'narendrali_m' (MATLAB文件)定义的离散时间非线性灰盒模型:x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t), 1个输入(s), 2个状态(s), 1个输出(s), 5个自由参数(s)。输入:u(1) (t)状态:初值x(1) x1(t) xinit@exp1 0(固定)in [-Inf, Inf] x(2) x2(t) xinit@exp1 0(固定)in [-Inf, Inf]输出:y(1) (t)参数:值p1(1) p1 1.05(估计)in]0, Inf] p1(2) 7(估计)in]0, Inf] p1(3) 0.52(估计)in]0, Inf] p1(4) 0.52(估计)in]0, Inf] p1(5) 0.48(估计)in]0, Inf]名称:离散时间Narendra-Li基准系统采样时间:1秒状态:通过直接构建或转换创建。不估计。更多信息见模型的“Report”属性。< 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
输入输出数据
有两个输入-输出数据记录,每个记录有300个样本,一个用于估计,一个用于验证。用于这两个记录的输入向量是相同的,并且被选择为两个正弦信号的和:
U (t) = sin(2* t/10) + sin(2* t/25)
对于t = 0,1,…, 299秒。我们创建两个不同的IDDATA对象来保存两个数据记录,ze用于估计,zv用于验证。
负载(fullfile (matlabroot“工具箱”,“识别”,“iddemos”,“数据”,“narendralidata”));ze = iddata(y1, u, Ts,“Tstart”0,“名字”,“莫迪估计数据”,...“ExperimentName”,“泽”);zv = iddata(y2, u, Ts,“Tstart”0,“名字”,“莫迪的验证数据”,...“ExperimentName”,“zv”);
用于估计的输入输出数据显示在一个图窗口中。
图(“名字”, ze.Name);情节(泽);
图1:来自Narendra-Li基准系统的投入产出数据。
最初Narendra-Li模型的表现
现在让我们用COMPARE来研究最初的Narendra-Li模型的性能。的模拟和测量输出泽
而且zv
是生成的,适合吗泽
默认情况下显示。使用图上下文菜单切换数据实验为zv
.这两个数据集的适合度都不是很差(约74%)。这里我们应该指出,COMPARE在默认情况下估计初始状态向量,在这种情况下,一个初始状态向量泽
另一个是zv
.
比较(merge(ze, zv), nlgr);
图2:初始Narendra-Li模型的真实输出与模拟输出的比较。
% % 4通过观察PE得到的预测误差,我们认识到%的初始Narendra-Li模型显示出一些系统性和周期性的差异%与实际输出比较。Pe (merge(ze, zv), nlgr);
图3:用最初的Narendra-Li模型得到的预测误差。使用上下文菜单在实验之间切换。
参数估计
为了减少系统差异,我们使用NLGREYEST对Narendra-Li模型结构的所有5个参数进行了估计。该估计仅基于估计数据集进行。
opt = nlgreyestOptions(“显示”,“上”);NLGR = nlgreyest(ze, NLGR, opt);
估计Narendra-Li模型的性能
COMPARE再次被用于调查估计模型的性能,但这一次我们使用模型内部存储的初始状态向量([0;0]对两个实验)没有任何初始状态向量估计。
clf opt = compareOptions(“InitialCondition”,“米”);比较(merge(ze, zv), nlgr, opt);
图4:估计的Narendra-Li模型的真实输出与模拟输出的比较。
估计后的改进是显著的,这也许可以通过预测误差图来最好地说明:
图;Pe (merge(ze, zv), nlgr);
图5:用估计的Narendra-Li模型得到的预测误差。
通过RESID提供的相关分析,也确认了估计的Narendra-Li模型的建模能力:
图(“名字”, [nlgr。的名字“:估计模型的残差”]);渣油(zv nlgr);
图6:用估计的Narendra-Li模型得到的残差。
事实上,得到的模型参数也非常接近于用于生成真实模型输出的参数:
disp (' True估计参数向量');Ptrue = [1];8;0.5;0.5;0.5);流(' %1.4f %1.4f\n'[ptrue ';getpvec (nlgr) '));
True估计参数向量1.0000 1.0000 8.0000 8.0082 0.5000 0.5003 0.5000 0.4988 0.5000 0.5018
接下来通过PRESENT命令提供一些附加的模型质量结果(损失函数,Akaike的FPE和模型参数的估计标准差):
礼物(nlgr);
nlgr = 'narendrali_m' (MATLAB文件)定义的离散时间非线性灰盒模型:x(t+Ts) = F(t, u(t), x(t), p1) y(t) = H(t, u(t), x(t), p1) + e(t), 1个输入(s), 2个状态(s), 1个输出(s), 5个自由参数(s)。输入:u(1) u1(t)状态:初始值x(1) x1(t) xinit@exp1 0(固定)in [-Inf, Inf] x(2) x2(t) xinit@exp1 0(固定)in [-Inf, Inf]输出:y(1) y1(t)参数:值标准差p1(1) p1 0.999993 0.0117615(估计)in]0, Inf] p1(2) 8.00821 0.885988(估计)in]0, Inf] p1(3) 0.500319 0.0313092(估计)in]0, Inf] p1(4) 0.498842 0.264806(估计)in]0, Inf] p1(5) 0.501761 0.30998(估计)in]0, Inf]名称:分离时间narendrali基准系统采样时间:1秒状态:终止条件:参数变化小于指定的容忍。迭代次数:16,函数计算次数:17估计使用求解器:FixedStepDiscrete;在时域数据“Narendra-Li估计数据”上搜索lsqnonlin。拟合估计数据:99.44% FPE: 9.23e-05, MSE: 8.927e-05更多信息在模型的“报告”属性。< 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
对于连续时间输入输出系统,也可以将STEP用于离散时间输入输出系统。让我们对两个不同的步骤级别(1和2)这样做:
图(“名字”, [nlgr。的名字':估计模型的阶跃响应']);T = (-5:50)';步骤(nlgr,“b”, t, stepDataOptions(“StepAmplitude”1));line(t, step(nlgr, t, stepDataOptions)“StepAmplitude”2)),“颜色”,‘g’);网格在;传奇('0 -> 1','0 -> 2',“位置”,“西北”);
图7:用估计的Narendra-Li模型得到的阶跃响应。
我们通过比较估计的IDNLGREY Narendra-Li模型与一些基本线性模型的性能来结束这个例子。后者模型获得的拟合比估计的IDNLGREY模型返回的拟合要低得多。
Nk = delay (ze);Arx22 = arx(ze, [2 2 nk]);二阶线性ARX模型。Arx33 = arx(ze, [3 3 nk]);三阶线性ARX模型。Arx44 = arx(ze, [4 4 nk]);四阶线性ARX模型。Oe22 = oe(ze, [2 2 nk]);二阶线性OE模型。Oe33 = oe(ze, [3 3 nk]);三阶线性OE模型。Oe44 = oe(ze, [4 4 nk]);四阶线性OE模型。CLF图= gcf;Pos = fig.位置;fig.Position = [Pos (1:2) * 0.7, Pos (3) * 1.3, Pos (4) * 1.3);比较(zv nlgr,“b”arx22,“m -”arx33,”男:“arx44,“m——”,...oe22,“g -”oe33,“旅客:”oe44,“g——”);
图8:许多估计的Narendra-Li模型的真实输出与模拟输出的比较。
结论
在这个例子中,我们使用了一个虚构的离散时间Narendra-Li基准系统来演示执行离散时间IDNLGREY建模的基础知识。