主要内容

建立非线性ARX模型与非线性和自定义解释

这个例子展示了如何使用多项式和自定义解释变量非线性ARX模型(IDNLARX)。

介绍

在一个IDNLARX模型中,每个输出是一个函数的解释变量转换过去的过去的输入和输出。典型的解释变量所代表的仅仅是延迟输入或输出变量linearRegressor规范对象,或延迟变量所代表的多项式polynomialRegressor对象。然而,除了能够实施absoute值(例如,abs (y (t - 1))),你不能使用这些类型的解释变量创建复杂的数学公式。例如,如果您的输出函数需要一个解释变量的形式罪(u(条t - 3)) * exp (abs (u (t))),您需要一种方法来直接输入您的自定义公式的回归量的表达式。这是自的customRegressor对象。顾名思义,您使用customRegressor对象将任意、自定义公式作为非线性ARX模型的解释变量。

考虑的例子一个电力系统的电压V和当前作为输入。如果知道电力系统是一个重要的量,然后定制的回归量是有意义的形式V *我。它可能是更有效的使用适当定义的自定义解释变量比只使用线性和多项式的解释。

的输出示例:建模一个内燃机

文件icEngine。米一个tcont一个我n年代oned一个ta set with 1500 input-output samples collected at the a sampling rate of 0.04 seconds. The input u(t) is the voltage [V] controlling a By-Pass Idle Air Valve (BPAV), and the output y(t) is the engine speed [RPM/100]. The data is loaded and split into a dataset模型估计和另一个数据集zv模型验证。

负载icEnginez = iddata (y、u, 0.04);泽= z (1:1000);zv = z (1001:1500);情节(泽,zv)传说(“估计数据”,验证数据的)

线性ARX命令解释变量

顺序矩阵(na nb nk),也用于线性ARX模型,帮助轻松定义线性的解释,简单的输入/输出变量延迟了特定数量的样本。订单需要尝试和错误的选择模型。在本例中我们使用(na nb nk) =(4 2 10),对应线性解释变量y (t - 1), (2), y y(条t - 3), y(第四节),u (t-10), u (t-11)。选择一个线性输出函数,这样的模型输出只是一个加权和六个解释变量,加上一个偏移量。

sys0 = nlarx(泽,[4 2 10],idLinear);

输入名字,输出名称和该模型的解释变量的列表显示如下。注意,默认名称‘u1’,“日元”。

sys0.InputName
ans =1×1单元阵列{' u1 '}
sys0.OutputName
ans =1×1单元阵列{“日元”}
disp (getreg (sys0))
{“y1 (t - 1)”} {‘y1 (2)} {y1(条t - 3)的}{y1(第四节)的}{的u1 (t-10)}{的u1 (t-11)}

这些都是线性解释变量。它们存储在模型中解释变量房地产作为linearRegressor对象。

sys0.Regressors
ans =线性解释变量y₁, u1变量:{“日元”的u1}滞后:{(1 2 3 4)[10]11}UseAbsolute: [0 0] TimeVariable:“t”由这组解释变量描述

“解释”属性回归量存储信息隐式使用回归规范对象。你可以把订单的矩阵[4 2 10]的快捷方式指定线性解释变量,哪里滞后是连续的和最小输出变量的滞后是固定为1。

线性解释变量使用linearRegressor规范对象

一个更灵活的方式,允许选择任意滞后是使用的变量linearRegressor对象。在上面的配置中,变量y₁滞后(1 2 3 4),而变量u1落后11 [10]。使用一个linearRegressor对象,可以实现相同的配置如下:

LinReg = linearRegressor ({“日元”,‘u1’},{1:4,(10、11)});sys1 = nlarx(泽、LinReg idLinear)
sys1 =非线性ARX模型与输入1输出和输入:u1输出:y1解释变量:线性解释变量y₁, u1的所有解释变量的列表输出功能:所有样品时间:0.04秒状态:估计使用NLARX时域数据“泽”。适合估算数据:94.35%(预测聚焦)消防工程:0.001877,MSE: 0.00183

比较模型的估计语法sys1sys0;当创建sys1你取代了矩阵与线性回归量规范对象。由此产生的模型sys0sys1都是相同的。

[getpvec (sys0), getpvec (sys1)]% sys0和sys1估计参数向量
ans =7×20.7528 0.7528 0.0527 0.0527 -0.0621 -0.0621 -0.0425 -0.0425 -0.0165 -0.0165 -0.0289 -0.0289 0.2723 0.2723

您将使用linearRegressor对象指定订单的解释变量的矩阵,在以下场景:

  • 您想要使用任意(不连续)等变量的滞后 { y 1 ( t - - - - - - 1 ) , y 1 ( t - - - - - - 1 0 ) , u ( t - - - - - - 3 ) , u ( t - - - - - - 1 1 ) }

  • 你想要的最小延迟输出变量(s)是不同的,例如,一组 { y 1 ( t - - - - - - 4 ) , y 1 ( t - - - - - - 5 ) , }

  • 你想用绝对值等变量的集合 { | 日元 ( t - - - - - - 1 ) | , | 日元 ( t - - - - - - 10 ) | , u ( t ) , u ( t - - - - - - 2 ) } 只有变量“日元”的绝对值。这可以通过做的

LinRegWithAbs = linearRegressor ({“日元”,‘u1’},{10[1],[0 2]},(真、假))
LinRegWithAbs =线性解释变量y₁, u1变量:{“日元”的u1}滞后:{10 [1][0 2]}UseAbsolute: [1 0] TimeVariable:“t”由这组解释变量描述

多项式解释变量

通常解释变量多项式的I / O延迟变量是必需的。这些可以被添加到模型使用polynomialRegressor对象。假设您想添加 u 1 ( t - - - - - - 1 0 ) 2 , y 1 ( t - - - - - - 1 ) 2 解释变量的模型。你第一次与这些设置创建一个规范对象,然后将这个对象添加到模型中。

%创建订单2解释变量“u1”和“日元”,落后10和1%分别PolyReg = polynomialRegressor ({‘u1’,“日元”1}},{10日,2);%使用LinReg和PolyReg模型sys2 = nlarx(泽,[LinReg;PolyReg], idLinear)
sys2 =非线性ARX模型与输入1输出和输入:u1输出:y1解释:1。线性解释变量y₁, u1 2。订单2解释变量u1,日元的所有解释变量的列表输出功能:所有样品时间:0.04秒状态:估计使用NLARX时域数据“泽”。适合估算数据:94.47%(预测聚焦)消防工程:0.001804,MSE: 0.001752

基于自定义公式的解释变量

虽然线性和多项式的解释是最常用的,有时你需要使用不同的公式并不是用一个多项式描述。例如trignometric等功能 年代 n ( ) , c o 年代 ( ) , 另一个例子是饱和函数 x = 一个 x ( l o w e r B o u n d , n ( x , U p p e r B o u n d ) 。在这些情况下,您可以使用一个数组的customRegressor对象封装具体的数学表达式。

在下面的示例中,创建一个回归量的余弦函数变量命名u1和延迟10个样本,换句话说: x = c o 年代 ( u 1 ( t - - - - - - 1 0 ) ) 。逻辑值在最后输入参数表示是否自定义解释变量矢量化。在计算矢量化解释变量更快,但需要关心表示在第一个输入参数的函数。

x = customRegressor (‘u1’10 @cos)
x =自定义回归量:cos (u1 (t-10)) VariablesToRegressorFcn: @cos变量:{‘u1’}滞后:{[10]}矢量化:1 TimeVariable:“t”由这组解释变量描述

指定的公式(@cos这里)存储在VariablesToRegressorFcn回归量对象的属性。默认情况下,函数的评估被认为是矢量化,如果输入是一个矩阵与N行之后的输出函数x.VariablesToRegressorFcn将一个列向量长度为n的向量化的评价有助于加快模型估计和仿真过程中回归量。然而,你可以选择禁用它如果需要通过设置的值矢量化属性为FALSE。

您可以创建一个数组解释变量都共享相同的基本公式,但使用不同的滞后值。例如,假设的公式 x = u ( t - - - - - - 一个 ) * | y ( t - - - - - - b ) | ,“u”和“y”是两个变量的测量数据是可用的,和滞后(a, b)可能需要多个值范围1:10。您可以创建一个数组的这些解释变量与一个调用customRegressor构造函数

C = customRegressor ({“u”,“y”1:10}},{1:10,@ x (x, y)。* abs (y))
C =定制的回归量:@ x (x, y)。* abs (y) VariablesToRegressorFcn: @ x (x, y)。* abs (y)变量:{‘u’‘y’}滞后:{(1 2 3 4 5 6 7 8 9 10][1 2 3 4 5 6 7 8 9 10]}矢量化:1 TimeVariable:“t”由这组解释变量描述

100 C表示一组解释变量生成使用公式 u ( t - - - - - - 一个 ) * 一个 b 年代 ( y ( t - - - - - - b ) ) 所有的组合 一个 b 值范围1:10。

使用所有三种类型的模型中解释变量为IC引擎动力

假设试验/错误或物理洞察力表明我们需要使用回归量集 R = { u 1 ( t - - - - - - 1 0 ) 3 , u 1 ( t - - - - - - 1 1 ) 3 , y 1 ( t - - - - - - 1 ) , 年代 n ( y 1 ( t - - - - - - 4 ) ) } 在模型中。我们有一个线性、多项式和三角公式。我们进行如下:

LinReg = linearRegressor (“日元”1);PolyReg = polynomialRegressor (‘u1’11 [10],3);CustomReg = customRegressor (“日元”4 @ (x) sin (x));%现在没有非线性;输出是一个解释变量的线性函数sys3 = nlarx(泽,[LinReg;PolyReg;CustomReg], [])
sys3 =非线性ARX模型与输入1输出和输入:u1输出:y1解释:1。线性变量y₁2中解释变量。订单3解释变量u1 3。定制的回归量:罪(y1(第四节))的所有解释变量的列表输出功能:所有样品时间:0.04秒状态:估计使用NLARX时域数据“泽”。适合估算数据:92.11%(预测聚焦)消防工程:0.003647,MSE: 0.00357
getreg (sys3)
ans =4×1细胞{“y1 (t - 1)”}{的u1 (t-10) ^ 3}{的u1 (t-11) ^ 3}{的罪(y1(第四节))}

我们可以扩展这个工作流包含非线性映射功能,如乙状结肠网络模型中也指定只有一个子集的回归量将被用作输入其线性和非线性组件(注:乙状结肠网络是一笔3组件——一个线性函数,一个偏移量,和一个非线性函数的和乙状结肠单位)。在下面的例子中,我们使用一个基于模板模型的工作流中serapately准备模板IDNLARX模型和估计选项设置在使用它们之前NLARX命令参数估计。

sys4 = idnlarx(泽。OutputName,泽。我nputName, [4 2 10], idSigmoidNetwork);%生成“u1 (t-10) ^ 2”,“y1 (t - 1) ^ 2”,“u1 (t-10) * y1 (t - 1)”P = polynomialRegressor ({“日元”,‘u1’10}},{1,2,假的,真正的);%生成cos (u1 (t-10))C1 = customRegressor (‘u1’10 @cos);%产生罪(y1 (t - 1)。* u1 (t-10) + u1 (t-11))C2 = customRegressor ({“日元”,‘u1’,‘u1’11}},{1,10日,@ (x, y, z) sin (x) * y + z));%将多项式和自定义的解释变量添加到模型sys2sys4。Regressors = [sys4.Regressors; P; C1; C2];%视图模型中的解释变量和如何使用它们disp (sys4.RegressorUsage)
日元:LinearFcn y1: NonlinearFcn _______售予y1 (t - 1)真的真的y1(2)真的真的y1(条t - 3)真的真的y1(第四节)真的真的u1 (t-10)真的真的u1 (t-11)真的真的y1 (t - 1) ^ 2真的真的u1 (t-10) ^ 2真的真的因为(u1 (t-10))真正的真正的罪恶(y1 (t - 1)。* u1 (t-10) + u1 (t-11))真的真的
%指定只有线性的解释变量中使用非线性%乙状结肠网络的组件使用= sys4.RegressorUsage;使用{7:最后,2}= false;sys4。RegressorUsage = Usage; disp(sys4.RegressorUsage)
y1: LinearFcn y1: NonlinearFcn _______售予y1 (t - 1)真的真的y1(2)真的真的y1(条t - 3)真的真的y1(第四节)真的真的u1 (t-10)真的真的u1 (t-11)真的真的y1 (t - 1) ^ 2真的假的u1 (t-10) ^ 2真的假的cos (u1 (t-10))真正的假sin (y1 (t - 1)。* u1 (t-10) + u1 (t-11))真的假的
% Prepapre估计选项:使用Levenberg-Marquardt与30个最大迭代解算器。%打开进度显示和设置焦点,估计“仿真”选择= nlarxOptions;opt.Focus =“模拟”;opt.Display =“上”;opt.SearchMethod =“lm”;opt.SearchOptions。MaxIterations = 30;% sys4估计参数来适应数据泽sys4 = nlarx(泽、sys4选择)
sys4 =非线性ARX模型与输入1输出和输入:u1输出:y1解释:1。线性解释变量y₁, u1 2。订单2解释变量y₁, u1 3。定制的回归量:因为(u1 (t-10)) 4。定制的回归量:罪(y1 (t - 1)。* u1 (t-10) + u1 (t-11))的所有解释变量的列表输出功能:乙状结肠网络10单元样品时间:0.04秒状态:估计使用NLARX时域数据“泽”。适合估算数据:87.81%(模拟聚焦)消防工程:0.001491,MSE: 0.008517

我们现在可以验证模型通过比较他们的反应validata数据集的输出zv

比较(zv、sys1 sys2、sys3 sys4)

比较图表明sys2最好的模型。注意,在本例中选择任意使用的解释变量,主要是为了显示不同的创建方式的解释和评估模型。可以获得更好的结果通过选择解释变量更明智。

文中的例子:建模机动相机

该文件motorizedcamera.mat包含一个数据集与188年的数据样本,收集从一个机动相机以0.02秒的采样率。输入向量u (t)是由6个变量:3正交x y z坐标系统中的翻译速度组件固定在相机(米/秒),和3个旋转速度组件x y z轴(rad / s)。输出向量y (t)包含两个变量:一个点的位置(像素)是由相机定点的三维空间。我们创建一个IDDATA对象z来控制加载的数据:

负载motorizedcameraz = iddata (y, u, 0.02,“名字”,“机动相机”,“TimeUnit”,“年代”);情节(z)

在那情况下使用不同类型的解释不是很不同的输出情况。所有的解释都是用于动态系统的输出。的RegressorUsage属性可用于分配特定的解释变量用于特定的输出。

nanbnk =[(2, 2), 2 * 1(2,6)的(2,6)];sysMIMO = idnlarx (z。OutputName, z。我nputName, nanbnk, idLinear); C = customRegressor({“u5”,“u6”},{1},@ x (x, y)。* y);P1 = polynomialRegressor (‘u1’、1、2);P2 = polynomialRegressor (“日元”,1,3);sysMIMO。Regressors = [sysMIMO.Regressors; C; P1; P2]; getreg(sysMIMO)
ans =17×1细胞{y1 (t - 1)的}{y2 (t - 1)的}{u1 (t - 1)的}{的u1 (2)} {“u2 (t - 1)”} {“u2 (2)”} {u3 (t - 1)的}{‘u3 (2)} {u4 (t - 1)的}{‘u4 (2)} {u5 (t - 1)的}{‘u5 (2)} {u6 (t - 1)的}{‘u6 (2)} {u1 (t - 1) ^ 2的}{‘y2 (t - 1) ^ 3} {u5 (t - 1)。* u6 (t - 1)}
sysMIMO sysMIMO = nlarx (z)
sysMIMO =非线性ARX模型与2输出和6输入输入:u1, u2, u3,愉快,u5, u6输出:y1, y2解释:1。线性解释变量y1, y2, u1, u2, u3,愉快,u5, u6 2。订单2解释变量u1 3。订单3解释变量y2 4。定制的回归量:u5 (t - 1)。* u6 (t - 1)的所有解释变量的列表输出功能:输出1:没有输出2:没有一个样品时间:0.02秒状态:估计使用NLARX时域数据“机动相机”。适合估算数据:[99.05,98.85]%(预测聚焦)消防工程:0.2067,MSE: 0.7496

               

比较模型响应估计数据。

比较(z, sysMIMO)


               

分析模型残差的自相关(白度测试)和输入信号互相关(相关测试)

无花果=图;fig.Position (3) = 2 * fig.Position (3);渣油(z, sysMIMO)