主要内容

教程识别非线性ARX和Hammerstein-Wiener模型

这个例子展示了识别single-input-single-output非线性黑盒模型的输出使用测量输入输出数据。示例使用测量数据从槽式系统探索各种模型结构和识别的选择。

输入-输出数据集

在这个示例中,变量中存储的数据twotankdata.mat文件将被使用。它包含3000年投入产出数据样本的槽式系统使用一个示例生成时间0.2秒。输入电压u (t)是[V]应用于泵,它生成一个流入到上面的坦克。的底部,而小洞上坦克收益率流出,进入低柜,和输出y (t)的两个柜系统然后下水箱的液位[m]。我们创建一个IDDATA对象z将加载数据:

这个数据集也是非线性灰色框示例中使用“两舱系统:C MEX-File建模的时间连续的输出系统”物理方程描述系统的假设。这个例子是关于黑盒模型,因此不知道实际的物理定律。

负载twotankdataz = iddata (y, u, 0.2,“名字”,“两舱系统”);

把数据和绘制

这个数据集分割成3个相等大小的子集,每个都包含1000个样本。

我们将估算模型z1,并评估他们z2z3z1类似于z2,但不z3。因此在某种意义上,z2可以帮助我们评估模型的插值能力,而z3可以帮助我们评估他们的推断能力。

z1 = z (1:1000);z2 = z (1001:2000);z3 = z (2001:3000);情节(z1、z2 z3)传说(“估计”,“验证1”,《验证2》)

回归量选择

估计非线性黑盒模型的第一步是选择回归量集。解释很简单公式基于时滞输入/输出变量,最简单的情况下被少量的连续变量滞后值。例如,如果“u”是一个输入变量的名字,和“y”一个输出变量的名称,然后一个例子解释变量集可以{y y (t - 1), (2), u (t), u (t - 1), u (2)},“t”表示时间变量的地方。另一个例子包括多项式条款可能是{abs (y (2)), y (2) * u (t - 1), u(第四节)^ 2}。更复杂,任意延迟变量的公式也成为可能。

在系统辨识工具箱™,解释变量集不需要显式地创建;可以生成大量隐式地指定他们的形式(如多项式顺序),贡献变量和滞后。规范的对象linearRegressor,polynomialRegressorcustomRegressor用于这一目的。例如R = linearRegressor ({' y ', ' u '},{[1 2 4],[2] 10})意味着回归量集{y y (t - 1), (2), y(第四节),u (2), u (t-10)}。同样,R = polynomialRegressor ({y},{2[1]}, 3)意味着三阶多项式解释变量与滞后1和2“y”,也就是说,一组{y (t - 1) ^ 3, y (2) ^ 3}。更多的配置选择,如只使用绝对值,和/或允许混合的滞后回归量公式。

线性回归量规范使用订单矩阵

当只使用线性模型的解释变量是基于连续的滞后,往往是更容易使用订单指定他们矩阵,而不是使用linearRegressor对象。顺序矩阵(na nb nk),定义了过去的数字输出,过去的输入和输入延迟使用的回归量公式。这是同样的想法,当估计线性ARX模型(见IDPOLY ARX)。例如,NN =[2 3 4]意味着输出变量使用滞后(1、2)和输入变量使用滞后(4、5、6)导致回归量集{y y (t - 1), (2), u(第四节),u (t-5), u (t-6)}。

通常模型试验和错误选择的订单。有时是有用的尝试线性ARX模型第一次为了得到暗示最好的订单。让我们首先试图确定最优的订单一个线性ARX模型,使用功能arxstrucselstruc

V = arxstruc (z1、z2 struc (1:5, 1:5, 1:5));%选择最佳秩序Akaike信息准则(AIC)nn = selstruc (V,“另类投资会议”)
nn = 5 1 3

AIC准则选择了nn = (na nb nk) =(5 1 3),这意味着,在选定的ARX模型结构,y (t)预计6解释变量y (t - 1), y (t - 1),…, y (t-5)和u(条t - 3)。我们将尝试使用这些值时估计非线性模型。

非线性ARX模型(IDNLARX)

IDNLARX模型,解释变量的模型输出是一个非线性函数,像y (t) = Fcn (y (t - 1), y (t - 1),…, y (t-5), u(条t - 3))。

IDNLARX模型通常估计的语法:

M = NLARX(数据、订单Fcn)。

它类似于线性ARX命令,有额外的论点“Fcn”指定类型的非线性函数。非线性ARX模型产生的输出通过使用两级转换:1。训练数据(输入-输出信号)映射到一组解释变量。数值,使此设置是一个双矩阵R,对每个回归量一列的数据。2。解释变量映射到一个单一的输出,y = Fcn®,哪里Fcn()是一个标量非线性函数。

估计一个IDNLARX模型,模型的选择订单后,我们需要选择类型的非线性映射函数Fcn()使用。让我们先试一试(idWaveletNetwork)函数小波网络。

mw1 = nlarx (z1 (5 1 3) idWaveletNetwork);

小波的小波网络使用一个组合单元模型的解释变量映射到输出。该模型mw1是一个@idnalrx对象。它存储着非线性映射函数(idWaveletNetwork对象)OutputFcn财产。这些单位的数量使用可以提前指定,或者我们可以把它的估计算法自动确定一个最优值。房地产NonlinearFcn。NumberOfUnits存储选择的单位数量模型。

NLFcn = mw1.OutputFcn;NLFcn.NonlinearFcn.NumberOfUnits
ans = 3

检查结果通过比较模型的响应mw1测量输出的数据集z1

比较(z1, mw1);

使用模型属性

第一个模型是不太满意的,因此,让我们尝试修改模型的一些性质。而不是让估计算法自动选择idWaveletNetwork函数的单元数,这个数字可以显式地指定。

对象= nlarx (z1 (5 1 3) idWaveletNetwork (8));

默认InputName和OutputName一直使用。

mw2.InputNamemw2.OutputName
ans = 1×1单元阵列{‘u1’} ans = 1×1单元阵列{“日元”}

IDNLARX模型的解释变量可以使用GETREG命令。解释变量是由mw2.InputName,mw2.OutputName和时间延迟。

getreg(对象)
ans = 6×1单元阵列{y1 (t - 1)的}{‘y1 (2)} {y1(条t - 3)的}{y1(第四节)的}{‘y1 (t-5)} {u1(条t - 3)的}

注意顺序矩阵等价于线性回归量设置使用规范创建的对象,如:

R = linearRegressor ([z1.OutputName;z1。InputName] {1:5, 3});mw2_a = nlarx (z1, R, idWaveletNetwork (8));getreg (mw2_a)
ans = 6×1单元阵列{y1 (t - 1)的}{‘y1 (2)} {y1(条t - 3)的}{y1(第四节)的}{‘y1 (t-5)} {u1(条t - 3)的}

mw2_a本质上是相同的模型吗对象。规范的使用对象允许更大的灵活性;用它当你不想使用continguous滞后,或最小延迟大于1的输出变量。

分配解释变量映射功能

一个IDNLARX模型的输出是一个静态函数的解释变量。通常这个映射函数的线性分组,一个非线性块,加上一个偏差项(输出抵消)。模型输出的总和这些块的输出和偏见。为了减少模型的复杂性,只有一个子集的解释变量可以选择进入非线性块和线性块。解释变量的赋值的线性和非线性组件执行映射函数使用的RegressorUsage属性模型。

RegUseTable = mw2.RegressorUsage
RegUseTable = 6×2表y1: LinearFcn y1: NonlinearFcn _______售予y1 (t - 1)真的真的y1(2)真的真的y1(条t - 3)真的真的y1(第四节)真的真的y1 (t-5)真的真的u1(条t - 3)真的真的

RegUseTable表显示,解释变量作为输入的线性和非线性分量小波网络。每一行对应一个回归量。假设我们想要只使用那些功能的解释变量的输入变量的u1非线性组件。这个配置可以实现如下。

RegNames = RegUseTable.Properties.RowNames;我=包含(RegNames,‘u1’);RegUseTable。(“日元:NonlinearFcn”)(~我)= false;

作为一个例子,考虑一个模型,该模型使用除了线性二阶多项式解释变量的使用对象。首先,生成一组多项式回归量规范。

P = polynomialRegressor ({“日元”,‘u1’0:3}},{1:2,2)
P = <强>订单2解释变量y₁, u1 < /强>顺序:两个变量:{“日元”的u1}滞后:{[1 - 2][0 1 2 3]}UseAbsolute: [0 0] AllowVariableMix: 0 AllowLagMix: 0 TimeVariable: ' t '

现在添加规范P模型的解释变量属性。

mw3 =对象;%开头的对象结构新的估计mw3。解释变量= [mw3.Regressors;P];%多项式集添加到模型结构

最后,更新模型的参数以适应数据通过最小化互译提前预测错误。

mw3 mw3 = nlarx (z1)
mw3 = < >强非线性ARX模型与1输出和输入< /强>输入:u1输出:y1解释:1。线性解释变量y₁, u1 2。订单2解释变量y₁, u1输出功能:小波网络与8单位样品时间:0.2秒状态:估计使用NLARX时域数据“两舱系统”。适合估算数据:96.76%(预测聚焦)消防工程:3.499 e-05, MSE: 3.338 e-05

评价估计模型

不同的模型,这两种线性和非线性,可以比较在相同的命令进行比较。

mlin = arx (z1 (5 1 3));%线性ARX模型%对象,比较(z1, mlin mw3)

可以进行模型验证验证数据集上运行比较命令。首先,通过检查验证模型模拟反应如何匹配的测量输出信号z2

对象,比较(z2 mlin mw3)

同样,对数据集z3验证估计模型。

对象,比较(z3 mlin mw3)

分析模型的残留也可能执行验证模型的质量。我们希望残留白色(与自己不相关的滞后0除外),与输入信号不相关的。resideus是互译的提前预测错误。残留物可以可视化用微不足道的界限值通过渣油命令。例如valiation数据集z2的残留三种识别模型如下所示。

对象,渣油(z2 mlin mw3)传奇显示

残留的输入信号都是不相关的z2(z2.InputData)。然而,他们表现出一些自相关模型mlinmw3。该模型对象性能更好(汽车和互相关)测试。

函数图可以用来查看各种IDNLARX模型的非线性响应。情节基本上显示非线性映射函数的特点Fcn ()。

mw3情节(对象)%的阴谋非线性响应作为选择的解释变量的函数

非线性ARX模型与乙状结肠网络

的小波网络,其他非线性函数可用于模型。idSigmoidNetwork试函数,它将解释变量映射到输出使用的和乙状结肠单位(加上一个线性和一个偏移量项)。配置网络使用8单位乙状结肠(由不同数量扩张和翻译)。

ms1 = nlarx (z1 (5 1 3) idSigmoidNetwork (8));比较(z1, ms1)

现在评估数据集z2的新模型。

比较(z2, ms1);

在数据集z3。

比较(ms1 z3);

在模型IDNLARX其他非线性映射功能

idCustomNetwork idSigmoidNetwork相似,而是乙状结肠的单元函数,用户可以定义自己的单位函数在MATLAB文件中。下面的例子使用了gaussunit函数。

类型gaussunit.m
函数(f, g) = gaussunit (x) % gaussunit单位函数用于idCustomNetwork(例子)% % (f, g) = gaussunit (x) % % x:单位函数变量% f:单位函数值% g: df / dx %:单位活跃的范围(g (x)显著不为零的区间[-])% %单位函数必须“矢量”:对于一个向量或矩阵x,输出% f和g参数必须具有相同的大小x,计算中的元素。% 2005 - 2021版权MathWorks公司%的作者(年代):清华张f = exp (x - x . *);如果nargout > 1 g = f - 2 * x。*;一个= 0.2;结束

customnet模型为基础,使用只有第三,第五和第六的解释变量作为输入的非线性分量customnet函数。

mc1_ini = idnlarx (“日元”,‘u1’(5一3),idCustomNetwork (@gaussunit));使用= false (6,1);使用((3 5 6))= true;mc1_ini。RegressorUsage{: 2} =使用;哪= nlarx (z1, mc1_ini);

树配分函数是另一个映射函数,可用于非线性ARX模型。估计模型使用idTreePartition函数:

mt1 = nlarx (z1 (5 1 3) idTreePartition);

比较反应的模型mt1数据z1

比较(z1, mc1 mt1)

利用统计回归算法和机器学习工具

如果你有访问统计和机器学习工具箱™还可以使用高斯过程(GP)函数和袋装或乐团创建非线性ARX模型提高了树。GPs idGaussianProcess所代表的对象,而回归树乐团由idTreeEnsemble对象。GPs使用squared-exponential默认内核。其他类型的内核可能是在创建对象时指定。在这里的例子中,我们使用一个“Matern32”内核。

如果存在(“fitrgp”,“文件”)= = 2警告=警告(“关闭”,“统计数据:套索:MaxIterReached”);mp1 = nlarx (z1 (5 1 3) idGaussianProcess (“Matern32”))%创建了200回归树的合奏En = idTreeEnsemble;En.EstimationOptions。FitMethod =“lsboost-resampled”;En.EstimationOptions。NumLearningCycles = 200;En.EstimationOptions。ResampleFraction = 1;mp2 = nlarx (z1, 70 3] [0, En)比较(z1, mp1, mp2)%比较模型适合估计数据警告(警告)结束
mp1 = < >强非线性ARX模型与1输出和输入< /强>输入:u1输出:y1解释变量:线性解释变量y₁, u1输出功能:高斯过程使用Matern32内核函数。样品时间:0.2秒状态:估计使用NLARX时域数据“两舱系统”。适合估算数据:97.1%(预测聚焦)消防工程:2.738 e-05, MSE: 2.675 e-05 mp2 = < >强非线性ARX模型与1输出和输入< /强>输入:u1输出:y1解释变量:线性解释变量u1输出功能:袋装回归树合奏样品时间:0.2秒状态:估计使用NLARX时域数据“两舱系统”。适合估算数据:91.14% MSE: 0.0002503

从深度学习工具箱使用网络对象

如果你有深度学习工具箱™可用,您还可以使用神经网络来定义映射函数Fcn IDNLARX模型()。这个网络必须是一个前馈网络(无复发性组件)。

对于这里,我们将创建一个网络数目不详的输入(输入大小零表示的网络对象)。输入的数量设置为自动在估计过程中解释变量的数量。

如果存在(“feedforwardnet”,“文件”)= = 2%运行只有深度学习工具箱是可用的ff = feedforwardnet (20 [5]);%使用前馈网络解释变量映射到输出ff.layers {2}。transferFcn =“radbas”;ff.trainParam。时代= 50;%建立一个神经网络映射函数包装前馈网络OutputFcn = idFeedforwardNetwork (ff);mn1 = nlarx (z1 (5 1 3) OutputFcn);%估计网络参数比较(z1, mn1)%比较适合估计数据结束

Hammerstein-Wiener (IDNLHW)模型

Hammerstein-Wiener模型由3块:一个线性传递函数块之前一个非线性静态块和/或另一个非线性静态块紧随其后。它被称为维纳模型非线性静态块缺席,如果第一个和汉默斯坦模型如果第二个非线性静态块缺席。

IDNLHW模型通常估计的语法:

M = NLHW(数据、订单、InputNonlinearity OutputNonlinearity)。

订单= (nb bf nk)指定订单和延迟的线性传递函数。InputNonlinearity和OutputNonlinearity指定两个非线性的非线性功能块,在输入和输出的线性分组。M是一个@idnlhw模型。线性输出误差(OE)模型对应于琐碎的(单位增益)非线性的情况下,也就是说,如果输入和输出的非线性函数IDNLHW模型都是单位的收益,相当于一个线性模型结构OE模型。

Hammerstein-Wiener与分段线性非线性函数模型

idPiecewiseLinear(分段线性)非线性函数一般IDNLHW模型是有用的。

注意,在订单= (nb nf nk), nf指定线性传递函数的极数,有些相关的“na”秩序IDNLARX模型。“注”是有关如果数量为零。

mhw1 = nlhw (z1, [1 5 3], idPiecewiseLinear idPiecewiseLinear);

结果可以评估比较。

比较(z1, mhw1)

模型属性可以可视化绘制命令。

点击方块图选择输入非线性的观点(多人),线性块或输出非线性(YNL)。

线性分组,可以选择类型的情节在阶跃响应,波德图、脉冲响应和Pole-zero地图。

情节(mhw1)

两个破发点的分段线性函数可以检查。这是一个两行矩阵,第一行对应于输入和第二行idPiecewiseLinear的输出函数。

mhw1.InputNonlinearity.BreakPoints
ans = 1到7列2.6795 3.4262 4.1729 4.9195 5.6324 6.3599 7.0874 -2.0650 -1.6316 -0.2396 1.4602 2.7554 3.6889 4.2632列8到10 7.8148 8.3543 9.1260 4.5074 4.4653 6.2634

Hammerstein-Wiener饱和度和死区非线性模型

饱和度和死区功能物理激发非线性函数。他们可以用来描述致动器/传感器饱和场景和干摩擦的影响。

mhw2 = nlhw (z1, [1 5 3], idDeadZone idSaturation);比较(z1, mhw2)

没有非线性的情况下由IDUNITGAIN表示对象,或空“[]”价值。一个单位增益是一个通孔的一个输入信号到输出没有任何修改。

mhw3 = nlhw (z1, [1 5 3], idDeadZone idUnitGain);%不输出非线性mhw4 = nlhw (z1, [1 5 3], [], idSaturation);%没有输入非线性

死区和饱和函数的极限价值评估后可以检查。

mhw2.InputNonlinearity。ZeroInterval mhw2.OutputNonlinearity.LinearInterval
= -0.9982 - 4.7565岁= 0.2601 - 0.5848

的初始猜测ZeroInterval死区或LinearInterval饱和函数估计模型时可以指定。

mhw5 = nlhw (z1, [1 5 3], idDeadZone ([0.1 - 0.2]), idSaturation ([1]));

Hammerstein-Wiener模型——指定属性

估计算法选项可以指定使用NLHWOPTIONS命令。

选择= nlhwOptions ();opt.SearchMethod =“玲娜”;opt.SearchOptions。MaxIterations = 7;mhw6 = nlhw (z1, [1 5 3], idDeadZone idSaturation,选择);

一个估计模型可以通过更多的迭代估计。

评估的评估数据z1,mhw7应该有一个更好的选择比吗mhw6

opt.SearchOptions。MaxIterations = 30;mhw7 = nlhw (z1、mhw6选择);比较(z1, mhw6 mhw7)

Hammerstein-Wiener模型——使用其他非线性函数

非线性函数分段线性(idPiecewiseLinear),饱和(idSaturation)和死区(idDeadZone)主要设计用于在IDNLHW模型。他们只能估计单变量非线性。另一个更一般的非线性函数,乙状结肠网络(idSigmoidNetwork),自定义网络(idCustomNetwork)和小波网络(idWaveletNetwork)也可以用于IDNLHW模型(除了IDNLARX模型)。然而,不可微函数Tree-partition (idTreePartition),多层神经网络(idFeedforwardNetwork),高斯过程函数(idGaussianProcess)和回归树集合体(idTreeEnsemble)不能因为IDNLHW模型的估计需要使用可微非线性函数。