主要内容gydF4y2Ba

在命令行估计非线性ARX模型gydF4y2Ba

在执行以下任务后,您可以估计非线性ARX模型:gydF4y2Ba

评估模型的使用gydF4y2BanlarxgydF4y2Ba

使用gydF4y2BanlarxgydF4y2Ba来构造和估计一个非线性ARX模型。每次估算之后,gydF4y2Ba验证模型gydF4y2Ba通过与其他模型比较,模拟或预测模型响应。gydF4y2Ba

基本的估计gydF4y2Ba

从使用最简单的估计开始gydF4y2BaM = nlarx(data,[na nb nk])gydF4y2Ba.例如:gydF4y2Ba

负载gydF4y2Baiddata1gydF4y2Ba;gydF4y2Ba% na = nb = 2, nk = 1gydF4y2BaM = nlarx(z1,[2 2 1])gydF4y2Ba
m = 1输出1输入的非线性ARX模型输入:u1输出:y1回归量:变量y1, u1中的线性回归量所有回归量的列表输出函数:1单位的小波网络采样时间:0.1秒状态:在时域数据“z1”上使用NLARX估计。拟合估计数据:68.83%(预测焦点)FPE: 1.975, MSE: 1.885gydF4y2Ba

查看回归量。gydF4y2Ba

getreg (m)gydF4y2Ba
ans =gydF4y2Ba4 x1细胞gydF4y2Ba{'y1(t-1)'} {'y1(t-2)'} {'u1(t-1)'} {'u1(t-2)'}gydF4y2Ba

第二个输入参数gydF4y2Ba[na nb nk]gydF4y2Ba指定模型顺序和延迟。缺省情况下,输出函数为小波网络gydF4y2BaidWaveletNetworkgydF4y2Ba,它接受回归量作为其线性和非线性函数的输入。gydF4y2Ba米gydF4y2Ba是一个gydF4y2BaidnlarxgydF4y2Ba对象。gydF4y2Ba

对于MIMO系统,gydF4y2Ba注gydF4y2Ba,gydF4y2BanfgydF4y2Ba,gydF4y2BankgydF4y2Ba是gydF4y2Ba纽约gydF4y2Ba——- - - - - -gydF4y2BaνgydF4y2Ba矩阵。看到gydF4y2BanlarxgydF4y2Ba有关MIMO估计的更多信息,请参阅参考页。gydF4y2Ba

创建一个gydF4y2BanlarxOptionsgydF4y2Ba选项设置并配置gydF4y2Ba焦点gydF4y2Ba属性以最小化模拟错误。gydF4y2Ba

选择nlarxOptions(gydF4y2Ba“焦点”gydF4y2Ba,gydF4y2Ba“模拟”gydF4y2Ba);M = nlarx(z1,[2 2 1],gydF4y2Ba“idSigmoidNetwork”gydF4y2Ba、选择);gydF4y2Ba

配置模型回归器gydF4y2Ba

线性解释变量gydF4y2Ba

线性回归函数表示基于延迟输入和输出变量的线性函数,并为模型输出函数提供输入。当使用顺序指定模型时,输入回归量的数量等于gydF4y2BanagydF4y2Ba输出回归量的数量等于gydF4y2Ba注gydF4y2Ba.订单语法将您限制为连续的延迟。您还可以使用gydF4y2BalinearRegressorgydF4y2Ba.当你使用gydF4y2BalinearRegressorgydF4y2Ba,您可以指定任意滞后。gydF4y2Ba

多项式解释变量gydF4y2Ba

探索包括多项式回归使用gydF4y2BapolynomialRegressorgydF4y2Ba除了非线性ARX模型结构中的线性回归量外。多项式回归量是延迟输入和输出的多项式函数。(见gydF4y2Ba非线性ARX模型的阶数与时滞gydF4y2Ba).gydF4y2Ba

例如,生成最高为2阶的多项式回归量。gydF4y2Ba

P =多项式回归({gydF4y2Ba“日元”gydF4y2Ba,gydF4y2Ba‘u1’gydF4y2Ba}, {[1], [2]}, 2);gydF4y2Ba

将多项式回归量附加到线性回归量gydF4y2Bam.Regressors。gydF4y2Ba

m.Regressors = [m.Regressors;P];getreg (m)gydF4y2Ba
ans =gydF4y2Ba8 x1细胞gydF4y2Ba{y1 (t - 1)的}{‘y1 (2)} {u1 (t - 1)的}{的u1 (2)} {y1(条t - 3)的}{‘y1 (t-5)} {y1 (t - 1) ^ 2的}{u1(2) ^ 2的}gydF4y2Ba

米gydF4y2Ba现在包括多项式回归器。gydF4y2Ba

的大小gydF4y2Bam.RegressorsgydF4y2Ba数组中。gydF4y2Ba

大小(m.Regressors)gydF4y2Ba
ans =gydF4y2Ba1×2gydF4y2Ba3个1gydF4y2Ba

数组现在包含三个回归对象。gydF4y2Ba

自定义的解释变量gydF4y2Ba

使用gydF4y2BacustomRegressorgydF4y2Ba将回归函数构造为模型输入和输出变量的任意函数。gydF4y2Ba

.例如,创建两个自定义回归器来实现gydF4y2Ba“sin (y1 (t - 1)”gydF4y2Ba而且gydF4y2Ba日元(2). * u1(条t - 3)gydF4y2Ba.gydF4y2Ba

C1 = customRegressor({gydF4y2Ba“日元”gydF4y2Ba}, {1}, @ (x) sin (x));C2 = customRegressor({gydF4y2Ba“日元”gydF4y2Ba,gydF4y2Ba‘u1’gydF4y2Ba}, {2,3}, @ x (x, y)。* y);m.Regressors = [m.Regressors;C1;C2];getreg (m)gydF4y2Ba%显示所有回归器gydF4y2Ba
ans =gydF4y2Ba10 x1细胞gydF4y2Ba{y1 (t - 1)的}{‘y1 (2)} {u1 (t - 1)的}{的u1 (2)} {y1(条t - 3)的}{‘y1 (t-5)} {y1 (t - 1) ^ 2的}{u1(2) ^ 2的}{罪(y1 (t - 1))的}{y1(2)。* u1(条t - 3)}gydF4y2Ba

查看自定义回归器的属性。例如,获取数组中第一个自定义回归函数的函数句柄。这个回归量是第四个回归量gydF4y2Ba解释变量gydF4y2Ba数组中。gydF4y2Ba

C1_fcn = m.Regressors(4).VariablesToRegressorFcngydF4y2Ba
C1_fcn =gydF4y2BaFunction_handle with value:gydF4y2Ba@ (x) sin (x)gydF4y2Ba

查看回归器描述。gydF4y2Ba

显示器(m.Regressors (4))gydF4y2Ba
自定义回归:sin(y1(t-1)) VariablesToRegressorFcn: @(x)sin(x) Variables: {'y1'}滞后:{[1]}Vectorized: 1 TimeVariable: 't'由这个集合描述的回归gydF4y2Ba

结合解释变量gydF4y2Ba

一旦您创建了线性、多项式和自定义回归对象,您就可以按照您想要的任何方式组合它们来满足您的估计需求。gydF4y2Ba

指定线性和非线性分量的回归输入gydF4y2Ba

模型回归器可以作为组成输出函数的映射函数的线性和非线性函数分量的输入。为了降低模型的复杂性并保持良好的估计条件,可以考虑为非线性组件分配一个简化的回归量集。还可以将回归量的子集分配给线性分量。管理分配的回归使用表提供了完全的灵活性。您可以将回归器的任意组合分配给每个组件。例如,指定一个非线性ARX模型,在过去的输出中是线性的,在过去的输入中是非线性的。gydF4y2Ba

M = nlarx(z1,[2 2 1]);disp (m.RegressorUsage)gydF4y2Ba
日元:LinearFcn y1: NonlinearFcn  ____________ _______________ 日元(t - 1)真的真的y1(2)真的真的u1 (t - 1)真的真的u1(2)真的真的gydF4y2Ba
m.RegressorUsage{3:4,1} = false;m.RegressorUsage{1:2,2} = false;disp (m.RegressorUsage)gydF4y2Ba
日元:LinearFcn y1: NonlinearFcn  ____________ _______________ 日元(t - 1)真的假y1(2)真的假u1 (t - 1)假真u1(2)假真的gydF4y2Ba

配置输出功能gydF4y2Ba

下表总结了模型输出函数的可用映射对象。gydF4y2Ba

映射描述gydF4y2Ba 值(映射对象默认配置)gydF4y2Ba 映射对象gydF4y2Ba
小波网络gydF4y2Ba
(默认)gydF4y2Ba
“idWaveletNetwork”gydF4y2Ba或gydF4y2Ba“波”gydF4y2Ba idWaveletNetworkgydF4y2Ba
一层sigmoid网络gydF4y2Ba “idSigmoidNetwork”gydF4y2Ba或gydF4y2Ba“sigm”gydF4y2Ba idSigmoidNetworkgydF4y2Ba
树分区gydF4y2Ba “idTreePartition”gydF4y2Ba或gydF4y2Ba“树”gydF4y2Ba idTreePartitiongydF4y2Ba
FgydF4y2Ba线性的gydF4y2BaxgydF4y2Ba “idLinear”gydF4y2Ba或gydF4y2Ba[]gydF4y2Ba或gydF4y2Ba”gydF4y2Ba idLineargydF4y2Ba

其他可用的映射对象包括多层神经网络和您创建的自定义网络。gydF4y2Ba

指定一个多层神经网络,使用:gydF4y2Ba

m = nlarx(data,[na nb nk],NNet)gydF4y2Ba

在哪里gydF4y2BaNNetgydF4y2Ba是使用深度学习工具箱™软件创建的神经网络对象。看到gydF4y2BaidFeedforwardNetworkgydF4y2Ba参考页面。gydF4y2Ba

通过定义函数来指定自定义网络gydF4y2Bagaussunit.mgydF4y2Ba,详见gydF4y2BaidCustomNetworkgydF4y2Ba参考页面。定义自定义网络对象gydF4y2BaCNetwgydF4y2Ba并对模型进行估计:gydF4y2Ba

CNetw = idCustomNetwork(@gaussunit);m = nlarx(data,[na nb nk],CNetw)gydF4y2Ba

在输出函数中排除线性函数gydF4y2Ba

如果你的模型输出函数包含gydF4y2BaidWaveletNetworkgydF4y2Ba,gydF4y2BaidSigmoidNetworkgydF4y2Ba,或gydF4y2BaidCustomNetworkgydF4y2Ba映射对象时,可以使用gydF4y2BaLinearFcn。使用gydF4y2Ba映射对象的属性。映射对象变成gydF4y2BaFgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2Ba ggydF4y2Ba (gydF4y2Ba 问gydF4y2Ba (gydF4y2Ba xgydF4y2Ba −gydF4y2Ba rgydF4y2Ba )gydF4y2Ba )gydF4y2Ba +gydF4y2Ba ygydF4y2Ba 0gydF4y2Ba ,在那里gydF4y2BaggydF4y2Ba(.)为非线性函数gydF4y2BaygydF4y2Ba0gydF4y2Ba是偏移量。gydF4y2Ba

请注意gydF4y2Ba

不能将线性函数从树划分和神经网络映射对象中排除。gydF4y2Ba

输出函数中排除非线性函数gydF4y2Ba

通过将映射对象设置为,将非线性ARX结构配置为仅包括映射对象中的线性函数gydF4y2BaidLineargydF4y2Ba.在这种情况下,gydF4y2Ba FgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba lgydF4y2Ba TgydF4y2Ba (gydF4y2Ba xgydF4y2Ba −gydF4y2Ba rgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ygydF4y2Ba 0gydF4y2Ba 是模型回归量加偏移量的加权和。这种模型在纯线性ARX模型和全柔性非线性模型之间架起了桥梁。gydF4y2Ba

在许多应用程序中,一个流行的非线性ARX配置使用多项式回归器对系统非线性建模。在这种情况下,系统被认为是(延迟的)输入和输出变量的乘积的线性组合。下载188bet金宝搏使用gydF4y2BapolynomialRegressorgydF4y2Ba命令可以轻松生成回归乘积和幂的组合。下载188bet金宝搏gydF4y2Ba

例如,假设您知道输出gydF4y2BaygydF4y2Ba(gydF4y2BatgydF4y2Ba的线性组合(gydF4y2BaygydF4y2Ba(gydF4y2BatgydF4y2Ba−1))gydF4y2Ba2gydF4y2Ba, (gydF4y2BaugydF4y2Ba(gydF4y2BatgydF4y2Ba−1))gydF4y2Ba2gydF4y2Ba而且gydF4y2BaygydF4y2Ba(gydF4y2BatgydF4y2Ba−1)gydF4y2BaugydF4y2Ba(gydF4y2BatgydF4y2Ba−1))。为这样的系统建模,使用:gydF4y2Ba

P =多项式回归({gydF4y2Ba“日元”gydF4y2Ba,gydF4y2Ba‘u1’gydF4y2Ba}, {1}, 2)gydF4y2Ba
P = Order 2 regressors in variables y1, u1 Order: 2 variables: {'y1' 'u1'} lag: {[1] [1]} UseAbsolute: [0 0] AllowVariableMix: 0 AllowLagMix: 0 TimeVariable: 't'由这个集合描述的regressorsgydF4y2Ba
P.AllowVariableMix = true;M = nlarx(z1,P,idLinear);getreg (M)gydF4y2Ba
ans =gydF4y2Ba3 x1细胞gydF4y2Ba{'y1(t-1)²'}{'u1(t-1)²'}{'y1(t-1)*u1(t-1)'}gydF4y2Ba

对于多项式延迟和混合变量回归的更复杂的组合,也可以使用gydF4y2BacustomRegressorgydF4y2Ba.gydF4y2Ba

迭代细化模型gydF4y2Ba

如果您的模型结构包含支持迭代搜索的映射对象(请参阅金宝appgydF4y2Ba为非线性ARX模型指定估计选项gydF4y2Ba),你可以使用gydF4y2BanlarxgydF4y2Ba细化模型参数:gydF4y2Ba

m1 = nlarx(z1,[2 2 1],idSigmoidNetwork);M2 = nlarx(z1,m1);gydF4y2Ba%可以重复执行该命令gydF4y2Ba

你也可以使用gydF4y2BapemgydF4y2Ba对原始模型进行细化:gydF4y2Ba

M2 = pem(z1,m1);gydF4y2Ba

检查搜索终止条件gydF4y2Bam.Report.Termination.WhyStopgydF4y2Ba.如果gydF4y2BaWhyStopgydF4y2Ba指示估计达到了最大迭代次数,请尝试重复估计并可能为gydF4y2BanlarxOptions.SearchOptions.MaxIterationsgydF4y2Ba估计选择:gydF4y2Ba

opt = nlarxOptions;opt.SearchOptions.MaxIterations = 30;M2 = nlarx(z1,m1,opt);gydF4y2Ba%运行30多个迭代gydF4y2Ba%由m1开始gydF4y2Ba

当gydF4y2Bam.Report.Termination.WhyStopgydF4y2Ba值是gydF4y2Ba接近(局部)最小值,(范数(g) < tolgydF4y2Ba或gydF4y2Ba直线搜索在搜索方向上没有改善gydF4y2Ba,验证你的模型,看看这个模型是否足够适合数据。否则,解决方案可能会卡在成本函数曲面的局部最小值中。尝试调整SearchOptionsgydF4y2Ba.TolerancegydF4y2Ba值或gydF4y2BaSearchMethodgydF4y2BanlarxOptions选项集中的选项,并重复估计。gydF4y2Ba

您还可以尝试使用扰动最后一个模型的参数gydF4y2Ba初始化gydF4y2Ba(称为gydF4y2Ba随机化gydF4y2Ba),并使用gydF4y2BanlarxgydF4y2Ba:gydF4y2Ba

M1 = nlarx(z1, [2 2 1], idSigmoidNetwork);gydF4y2Ba%原始型号gydF4y2BaM1p = init(M1);gydF4y2Ba%随机扰动有关标称值的参数gydF4y2BaM2 = nlarx(z1, M1p);gydF4y2Ba%估计扰动模型的参数gydF4y2Ba

控件可以在MATLAB命令窗口中显示迭代搜索的进度gydF4y2BanlarxOptions。显示gydF4y2Ba估计选择:gydF4y2Ba

选择nlarxOptions(gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba);M2 = nlarx (z1、M1p选择);gydF4y2Ba

排除估计gydF4y2Ba

如果使用各种模型结构和算法设置进行多次试验后,仍未得到令人满意的模型,则可能是数据较差。例如,您的数据可能缺少重要的输入或输出变量,并且不能充分覆盖系统的所有操作点。gydF4y2Ba

非线性黑盒系统辨识通常需要比线性模型辨识更多的数据才能获得足够的系统信息。gydF4y2Ba

使用nlarx估计非线性ARX模型gydF4y2Ba

这个例子展示了如何使用gydF4y2BanlarxgydF4y2Ba为测量输入/输出数据估计非线性ARX模型。gydF4y2Ba

准备用于估计的数据。gydF4y2Ba

负载gydF4y2BatwotankdatagydF4y2BaZ = iddata(y, u, 0.2);Ze = z(1:1000);Zv = z(1001:3000);gydF4y2Ba

估计几个模型使用不同的模型顺序,延迟和非线性设置。gydF4y2Ba

M1 = nlarx(ze,[2 2 1]);M2 = nlarx(ze,[2 2 3]);m3 = nlarx(ze,[2 2 3],idWaveletNetwork(8));gydF4y2Ba

执行估计的另一种方法是先配置模型结构,然后再估计该模型。gydF4y2Ba

m4 = idnlarx([2 2 3],idSigmoidNetwork(14));m4.RegressorUsage。(gydF4y2Ba“日元:NonlinearFcn”gydF4y2Ba)(3:4) = false;M4 = nlarx(ze, M4);gydF4y2Ba

通过绘制模型输出和测量输出来比较得到的模型。gydF4y2Ba

比较(zv, m1, m2, m3, m4)gydF4y2Ba

图中包含一个轴对象。axis对象包含5个line类型的对象。这些对象代表zv (y1), m1: 60.91%, m2: 85.36%, m3: 87.16%, m4: 88.62%。gydF4y2Ba

另请参阅gydF4y2Ba

功能gydF4y2Ba

相关的话题gydF4y2Ba