主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

非線形リグレッサ,およびカスタムリグレッサ,を含む非線形arxモデルの作成

この例では,非線形ARX (IDNLARX)モデルで多項式リグレッサーおよびカスタムリグレッサーを使用する方法を説明します。

はじめに

Dnlarxモデルでは,各出力がリグレッサ,の関数となります。リグレッサ,は,過去の入力および出力を変換したものです。一般的なリグレッサ,は,“linearRegressor”仕様オブジェクトで表される遅延した入力変数または出力変数,または“polynomialRegressor”オブジェクトで表される遅延した変数の多項式です。ただし,絶対値(例:“abs (y (t - 1))”)を課する機能以外に,これらの種類のリグレッサ,を使用して複雑な数式は作成できません。たとえば,出力関数に形式“罪(u(条t - 3)) * exp (abs (u (t)))”のリグレッサが必要な場合,リグレッサの式にカスタマズした公式を入力する方法が必要です。これは“customRegressor”オブジェクトを使用すると簡単です。その名が示すように,customRegressorオブジェクトを使用して,任意のカスタマイズした公式を非線形ARXモデルのリグレッサーとして組み込みます。

電圧“V”と電流“我”を入力としても電気系統を例として考えてみます。電力が電気系統の重要な数値を占める場合,カスタムのリグレッサ“V *我”を作成する方が理にかなっています。線形リグレッサーや多項式リグレッサーだけを使用するよりも,適切に定義したカスタムのリグレッサーを使用した方が効率が良い場合があります。

Sisoの例:内燃エンジンのモデル化

ファesc escルicEngine。米一个tには、サンプリング レート 0.04 秒で収集した 1500 の入力/出力サンプルによる 1 つのデータセットが含まれます。入力 u(t) は、By-Pass Idle Air Valve (BPAV) を制御する電圧 [V] で、出力 y(t) は、エンジン速度 [RPM/100] です。データを読み込み、モデル推定用のデータセット“泽”と,モデル検証用のデ,タセット“zv”に分割します。

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

图中包含2个轴对象。标题为y1的axis对象1包含2个类型为line的对象。这些对象表示估计数据、验证数据。标题为u1的坐标轴对象2包含2个line类型的对象。这些对象表示估计数据、验证数据。

Arx次数としての線形リグレッサ

次数行列(na nb nk)は線形ARXモデルでも使用され,線形リグレッサーの容易な定義に役立ちます。このリグレッサ,は,特定のサンプル数だけ遅延された入出力変数です。モデル次数を選択するには,試行錯誤が必要となります。この例では,[na nb nk] =[4 2 10]を使用します。これは、線形リグレッサー y(t-1)、y(t-2)、y(t-3)、y(t-4)、u(t-10)、u(t-11) に対応します。モデル出力が 6 個のリグレッサーの加重合計にオフセットを加えたものになるように、線形出力関数を選択します。

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

このモデルの入力名,出力名,およびリグレッサ,リストを以下に示します。既定の名前‘u1’,‘y1’が使用されています。

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

これらは"線形"リグレッサ,です。モデルの[リグレッサ]プロパティに线性回归オブジェクトとして保存されています。

sys0。Regressors
ans =变量y1, u1中的线性回归变量:{'y1' 'u1'}滞后:{[1 2 3 4][10 11]}UseAbsolute: [0 0] TimeVariable: 't'由这个集合描述的回归变量

”“リグレッサープロパティは,暗黙的に回帰仕様オブジェクトを使用するリグレッサーに関する情報を格納します。次数行列[4 2 10]は,線形リグレッサ.を指定する簡便な方法と見なせます。ここでラグは連続で,出力変数の最小ラグは1に固定されています。

线性回归仕様オブジェクトを使用した線形リグレッサ

任意のラグをも変数を選択できる,より柔軟な方法は“linearRegressor”オブジェクトを使用することです。上記の構成では,変数y1はラグ(1 2 3 4)を持つのに対して,変数u1はラグ11[10]を持ちます。线性回归オブジェクトを使用すると,以下のように同じ構成を達成できます。

LinReg =线性回归({“日元”‘u1’}, {1:4, [10,11]});sys1 = nlarx(ze, LinReg, idLinear)
sys1 = 1输出1输入的非线性ARX模型输入:u1输出:y1回归:变量y1中的线性回归,u1所有回归的列表输出函数:无采样时间:0.04秒状态:在时域数据“ze”上使用NLARX估计。与估计数据拟合:94.35%(预测焦点)FPE: 0.001877, MSE: 0.00183

モデルsys1およびsys0の推定構文を比較します。sys1の作成時に,次数行列を線形リグレッサ,の仕様オブジェクトに置き換えます。得られるモデルsys0およびsys1は同一です。

[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 のような変数に任意の(不連続)ラグの使用

  • 出力変数の最小ラグを1以外に設定。たとえば,セット y 1 t - 4 y 1 t - 5

  • セット | 日元 t - 1 | | 日元 t - 10 | u t u t - 2 のような変数の絶対値の使用。ここで使用されるのは変数“y1”の絶対値のみ。これは以下のように達成可能

LinRegWithAbs =线性回归({“日元”‘u1’},{[1 10], [0 2]},[true, false])
LinRegWithAbs =变量y1, u1中的线性回归变量变量:{'y1' 'u1'}滞后:{[1 10][0 2]}UseAbsolute: [1 0] TimeVariable: 't'由这个集合描述的回归变量

多項式のリグレッサ

多くの場合,遅延I/O変数の多項式であるリグレッサが必要です。これらは“polynomialRegressor”オブジェクトを使用して,モデルに追加できます。 u 1 t - 1 0 2 y 1 t - 1 2 をリグレッサ,としてモデルに追加するとします。最初に,これらの設定で仕様オブジェクトを作成し,それからこのオブジェクトをモデルに追加します。

在变量“u1”和“y1”中创建2阶回归量,滞后10和1%分别PolyReg =多项式回归({‘u1’“日元”1}},{10日,2);在模型中使用LinReg和PolyRegsys2 = nlarx(ze, [LinReg;PolyReg], idLinear)
sys2 =非线性ARX模型,1输出1输入输入:u1输出:y1回归量:1。变量y1 u1 2中的线性回归。变量u1, y1中的二阶回归量所有回归量列表输出函数:无采样时间:0.04秒状态:在时域数据“ze”上使用NLARX估计。拟合估计数据:94.47%(预测焦点)FPE: 0.001804, MSE: 0.001752

カスタマズした式に基づくリグレッサ

線形リグレッサーおよび多項式リグレッサーが最も一般的に使用されますが,多項式では記述されない別の式を使用することが必要になる場合もあります。たとえば, 年代 n c o 年代 ... のような三角関数です。もう1の例は,飽和関数 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 = Custom regressor: cos(u1(t-10)) VariablesToRegressorFcn: @cos Variables: {'u1'}滞后:{[10]}Vectorized: 1 TimeVariable: 't'由这个集合描述的回归

指定した式(ここでは@cos)は,リグレッサオブジェクトのVariablesToRegressorFcnプロパティに保存されます。既定では,関数の評価はベクトル化されると仮定されます。すなわ,入力がn行の行列の場合,関数x.VariablesToRegressorFcnの出力は長さnの列ベクトルになります。ベクトル化により,モデルの推定およびシミュレーションのプロセス中に,リグレッサーの評価が高速化します。ただし,必要であれば,矢量化プロパティを假に設定することで無効にする方法もあります。

全体で同じ基となる式を共有しながら,異なるラグ値を使用するリグレッサ,の配列を作成できます。たとえば,式が x u t - 一个 | y t - b | であるとします。ここで‘u’およびyは測定データが利用可能な2変数であり,ラグ(a, b)は範囲1:10で複数の値をとることができます。customRegressorコンストラクタ,の1回の呼び出しで,これらのリグレッサ,の配列を作成できます。

C = customRegressor({“u”“y”},{1:10, 1:10}, @(x,y)x.*abs(y))
C =自定义回归:@(x,y)x.*abs(y) VariablesToRegressorFcn: @(x,y)x.*abs(y)变量:{'u' 'y'}滞后:{[1 2 3 4 5 6 7 8 9 10][1 2 3 4 5 6 7 8 9 10]}Vectorized: 1 TimeVariable: 't'此集合描述的回归

Cは,式 u t - 一个 一个 b 年代 y t - b を使用して範囲1:10にある 一个 値および b 値のすべての組み合わせに対して生成された100個のリグレッサ,のセットを表します。

モデルにある全3種類のリグレッサをICエンジンダナミクスに使用

試行錯誤または物理的な考察により,モデルでリグレッサ,セット R u 1 t - 1 0 3. u 1 t - 1 1 3. y 1 t - 1 年代 n y 1 t - 4 を使う必要が示唆されているとします。線形式,多項式,三角関数式が混在しています。以下のように進めます。

LinReg =线性回归(“日元”1);PolyReg =多项式回归(‘u1’11 [10], 3);CustomReg = customRegressor(“日元”4 @ (x) sin (x));%暂无非线性;输出是回归函数的线性函数sys3 = nlarx(ze,[LinReg;PolyReg;CustomReg], [])
sys3 =非线性ARX模型,1输出1输入输入:u1输出:y1回归量:1。变量y12中的线性回归函数。变量u1 3中的3阶回归量。自定义回归函数:sin(y1(t-4))所有回归函数的列表输出函数:无采样时间:0.04秒状态:使用NLARX对时域数据“ze”进行估计。与估计数据拟合:92.11%(预测焦点)FPE: 0.003647, MSE: 0.00357
getreg (sys3)
ans =4 x1细胞{“y1 (t - 1)”}{的u1 (t-10) ^ 3}{的u1 (t-11) ^ 3}{的罪(y1(第四节))}

このワークフローを拡張して,モデルにシグモイドネットワークのような非線形マッピング関数を含めたり,使用するリグレッサーセットのサブセットのみを線形および非線形コンポーネントの入力に指定したりできます(メモ:シグモイドネットワークは,線形関数,オフセット項,およびシグモイドユニットの和である非線形関数からなる3つのコンポーネントの合計)。以下の例では,テンプレ,トモデルベ,スのワ,クフロ,を使用します。ここでは,テンプレートIDNLARXモデルと推定オプションセットをNLARXコマンドでパラメーター推定に使用する前に,別々に準備します。

Sys4 = idnlarx(ze。OutputName,泽。InputName,[4 2 10], idSigmoidNetwork);%生成“u1 (t-10) ^ 2”,“y1 (t - 1) ^ 2”,“u1 (t-10) * y1 (t - 1)”P =多项式回归({“日元”‘u1’},{1,10},2, false, true);%生成cos(u1(t-10))C1 = customRegressor(‘u1’10 @cos);生成sin(y1(t-1).*u1(t-10)+u1(t-11))C2 = customRegressor({“日元”‘u1’‘u1’},{1,10,11},@(x,y,z)sin(x.*y+z));将多项式和自定义回归量添加到模型sys2中sys4。Regressors = [sys4.Regressors; P; C1; C2];查看回归量以及它们在模型中的使用方式disp (sys4.RegressorUsage)
y1:线性fcn y1:非线性fcn ____________ _______________ y1(t-1)真真y1(t-2)真真y1(t-3)真真y1(t-4)真真u1(t-10)真真u1(t-1)^2真真u1(t-10)^2真真cos(u1(t-10))真真sin(y1(t-1).*u1(t-10)+u1(t-11))真真真
%仅指定线性回归量用于非线性sigmoid网络的%分量Usage = sys4.RegressorUsage;用法{7:end,2} = false;sys4。RegressorUsage = Usage; disp(sys4.RegressorUsage)
y1:线性fcn y1:非线性fcn ____________ _______________ y1(t-1)真真y1(t-2)真真y1(t-3)真真y1(t-4)真真u1(t-10)真真y (t-1)^2真假u1(t-10)^2真假cos(u1(t-10))真假sin(y1(t-1).*u1(t-10)+u1(t-11))真假
准备估计选项:使用最大迭代30次的Levenberg-Marquardt求解器。%打开进度显示,并将估计焦点设置为“模拟”opt = nlarxOptions;opt.Focus =“模拟”;opt.Display =“上”;opt.SearchMethod =“lm”;opt.SearchOptions.MaxIterations = 30;%估计sys4的参数来拟合数据zeSys4 = nlarx(ze, Sys4, opt)
sys4 =非线性ARX模型,1输出1输入输入:u1输出:y1回归量:1。变量y1 u1 2中的线性回归。变量y1 u1 3中的二阶回归量。自定义回归函数:cos(u1(t-10)) 4。自定义回归器:sin(y1(t-1).*u1(t-10)+u1(t-11))所有回归器列表输出函数:10单位Sigmoid网络采样时间:0.04秒状态:在时域数据“ze”上使用NLARX估计。拟合估计数据:87.81%(模拟焦点)FPE: 0.001491, MSE: 0.008517

これで,モデルの応答と検証デ,タセットzvの出力を比較することで,モデルを検証できます。

比较(zv, sys1, sys2, sys3, sys4)

图中包含一个轴对象。axis对象包含5个line类型的对象。这些对象分别代表zv (y1)、sys1: 73.84%、sys2: 80.24%、sys3: 42.74%、sys4: 37.97%。

比較プロットはsys2が最適モデルであることを示しています。この例で使用したリグレッサーは任意に選択されており,その主な目的はリグレッサーを作成し,モデルを推定する別の方法を示すことです。リグレッサ,をより適切に選択することで,より良い結果が得られる可能性があります。

Mimoの例:モ,タ,付きカメラのモデル化

ファereplicationルmotorizedcamera.matには,サンプリングレート0.02秒でモーター付きカメラから収集した188データサンプルによる1つのデータが含まれます。入力ベクトルu(t)は6の変数で構成されます。これらの変数とは,カメラに固定された直交x y z座標系の3つの並進速度成分(m / s)とx y z軸周りの3つの回転速度成分(rad / s)です。出力ベクトルy(t)は2の変数を含みます。これらの変数は,3 d空間の固定カメラポイントから取得したイメージによるポイントの位置(ピクセル単位)です。IDDATAオブジェクトzを作成し,ロドしたデタを保持します。

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

图中包含8个轴对象。标题为y1的Axes对象1包含一个line类型的对象。这个对象代表机动相机。标题为y2的Axes对象2包含一个line类型的对象。这个对象代表机动相机。标题为u1的坐标轴对象3包含一个line类型的对象。这个对象代表机动相机。标题为u2的Axes对象4包含一个line类型的对象。这个对象代表机动相机。标题为u3的Axes对象5包含一个line类型的对象。 This object represents Motorized Camera. Axes object 6 with title u4 contains an object of type line. This object represents Motorized Camera. Axes object 7 with title u5 contains an object of type line. This object represents Motorized Camera. Axes object 8 with title u6 contains an object of type line. This object represents Motorized Camera.

Mimoでさまざまな種類のリグレッサ,を使用するのは,sisoの場合とあまり違いはありません。すべてのリグレッサは,システムのすべての出力に対するダナミクスで使用されています。使用する特定のリグレッサ,を特定の出力に割り当てるために,RegressorUsageを使用できます。

Nanbnk = [ones(2,2), 2*ones(2,6), ones(2,6)];sysMIMO = idnlarx(z。OutputName,z.InputName, nanbnk, idLinear); C = customRegressor({“u5”“u6”}, {1}, @ x (x, y)。* y);P1 =多项式回归(‘u1’、1、2);P2 =多项式回归(“日元”, 1, 3);sysMIMO。Regressors = [sysMIMO.Regressors; C; P1; P2]; getreg(sysMIMO)
ans =17 x1细胞{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 = nlarx(z, sysMIMO)
sysMIMO = 2输出6输入的非线性ARX模型输入:u1, u2, u3, u4, u5, u6输出:y1, y2回归量:1。线性回归变量y1 y2 u1 u2 u3 u4 u5 u6 2。变量u1 3中的二阶回归量。变量y2中的3阶回归量4。自定义回归器:u5(t-1).*u6(t-1)所有回归器列表输出功能:输出1:无输出2:无采样时间:0.02秒状态:使用NLARX对时域数据“机动相机”进行估计。拟合估计数据:[99.05;98.85]%(预测焦点)FPE: 0.2067, MSE: 0.7496

               

モデル応答を推定デ,タと比較します。

比较(z, sysMIMO)

图中包含2个轴对象。坐标轴对象1包含2个line类型的对象。这些对象代表Motorized Camera (y1), sysMIMO: 97.11%。坐标轴对象2包含2个line类型的对象。这些对象代表机动相机(y2), sysMIMO: 98.38%。


               

モデル残差を解析し,自己相関(白色性テスト)および入力信号との相互相関(相関テスト)を調べます。

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

图中包含14个轴对象。带有标题AutoCorr的Axes对象1包含2个类型为line的对象。该节点表示sysMIMO。坐标轴对象2包含2个line类型的对象。该节点表示sysMIMO。标题为XCorr (u1)的Axes对象3包含2个类型为line的对象。该节点表示sysMIMO。Axes对象4包含2个line类型的对象。该节点表示sysMIMO。标题为XCorr (u2)的Axes对象5包含2个类型为line的对象。 This object represents sysMIMO. Axes object 6 contains 2 objects of type line. This object represents sysMIMO. Axes object 7 with title XCorr (u3) contains 2 objects of type line. This object represents sysMIMO. Axes object 8 contains 2 objects of type line. This object represents sysMIMO. Axes object 9 with title XCorr (u4) contains 2 objects of type line. This object represents sysMIMO. Axes object 10 contains 2 objects of type line. This object represents sysMIMO. Axes object 11 with title XCorr (u5) contains 2 objects of type line. This object represents sysMIMO. Axes object 12 contains 2 objects of type line. This object represents sysMIMO. Axes object 13 with title XCorr (u6) contains 2 objects of type line. This object represents sysMIMO. Axes object 14 contains 2 objects of type line. This object represents sysMIMO.