Main Content

arxstruc

単出力 ARX モデルの損失関数の計算

説明

V = arxstruc(dataest,dataval,NN) は、dataestdataval にそれぞれ含まれている推定データと検証データの損失関数 V を推定します。dataest および dataval は、timetable、数値行列のコンマ区切りペア、あるいは iddata オブジェクトの形式にすることができます。周波数応答データを定義する idfrd オブジェクトにすることもできます。

dataest および dataval が timetable の場合、名前と値の引数 InputName および OutputName でチャネル名を指定することで、推定に使用する特定の入出力チャネルを選択できます。それ以外の場合は、最後の timetable 変数チャネルが単一の出力チャネルで、残りの変数がすべて入力チャネルであるものと仮定されます。

V には損失関数と、対応する次数および遅延の両方が含まれます。selstruc を使用して V を解析できます。これにより、V が評価され、適切なモデル構造体を選択できます。

arxstruc は単出力 ARX モデルにのみ使用します。arxstruc は単入力と多入力の両方のシステムをサポートします。

V = arxstruc(___,Name,Value) は、1 つ以上の名前と値の引数で指定された追加のオプションを使用します。

すべて折りたたむ

データ生成用の ARX モデルを作成します。

A = [1 -1.5 0.7];
B = [0 1 0.5];
m0 = idpoly(A,B);

乱数入力信号と加法性ノイズ信号を生成します。

u = idinput(400,'rbs');
e = 0.1*randn(400,1);

定義した入力信号と誤差信号を使用してモデルの出力をシミュレートします。

y = sim(m0,[u e]);

推定用のモデル次数の組み合わせを生成します。すべてのモデルに 1 の遅延を指定し、nanb15 の範囲のモデル次数を指定します。

NN = struc(1:5,1:5,1);

ARX モデルを推定し、それぞれのモデル次数の組み合わせについて損失関数を計算します。入力データが推定と検証のデータ セットに分割されます。

V = arxstruc(u(1:200),y(1:200),u(201:400),y(201:400),NN);

検証データに最もよく適合するモデル次数を選択します。

order = selstruc(V,0)
order = 1×3

     2     2     1

選択された次数の ARX モデルを推定します。

M = arx(u,y,order)
M =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
  A(z) = 1 - 1.498 z^-1 + 0.6971 z^-2              
                                                   
  B(z) = 1.004 z^-1 + 0.5028 z^-2                  
                                                   
Sample time: 1 seconds
  
Parameterization:
   Polynomial orders:   na=2   nb=2   nk=1
   Number of free coefficients: 4
   Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                          
Estimated using ARX on time domain data "u".     
Fit to estimation data: 97.75% (prediction focus)
FPE: 0.009874, MSE: 0.009582                     
 

推定と検証のデータ セットを読み込み、変数名を表示します。

load co2datatt tte ttv
head(tte,3)
     Time      u1     u2      y1   
    _______    ___    __    _______

    0.5 sec    170    50    -44.302
    1 sec      170    50    -44.675
    1.5 sec    170    50     -45.29

モデル次数の組み合わせを生成します。

  • na = 2:4

  • nb = 2:5 (1 番目の入力)、1 または 4 (2 番目の入力)。

  • nk = 1:4 (1 番目の入力)、0 (2 番目の入力)。

NN = struc(2:4,2:5,[1 4],1:4,0);

それぞれのモデル次数の組み合わせについて ARX モデルを推定します。

V = arxstruc(tte,ttv,NN);

検証データに最もよく適合するモデル次数を選択します。

order = selstruc(V,0)
order = 1×5

     2     4     4     2     0

選択された次数の ARX モデルを推定します。

M = arx(tte,order)
M =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)               
  A(z) = 1 - 1.252 z^-1 + 0.302 z^-2                              
                                                                  
  B1(z) = -0.3182 z^-2 - 0.1292 z^-3 + 0.2883 z^-4 + 0.001051 z^-5
                                                                  
  B2(z) = -0.02705 + 0.01948 z^-1 + 0.1695 z^-2 + 0.3278 z^-3     
                                                                  
Sample time: 0.5 seconds
  
Parameterization:
   Polynomial orders:   na=2   nb=[4 4]   nk=[2 0]
   Number of free coefficients: 10
   Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                          
Estimated using ARX on time domain data "tte".   
Fit to estimation data: 88.59% (prediction focus)
FPE: 3.993, MSE: 3.938                           
 

入力引数

すべて折りたたむ

推定データ。timetable、数値行列のコンマ区切りのペア、iddata オブジェクト、または idfrd オブジェクトとして指定します。

dataest の指定はデータ型によって異なります。

timetable

入力チャネルと出力チャネルを表す変数が含まれた、一定間隔の時間ベクトルを使用する timetable として dataest を指定します。名前と値の引数 InputName および OutputName を使用して、推定用の特定のチャネルを選択します。

コンマ区切りの行列ペア

入力および出力時間領域信号値を含む行列のコンマ区切りのペア u,y として、dataest を指定します。

データ オブジェクト

入力データと出力データを含む iddata オブジェクトまたは idfrd として、dataest を指定します。

推定データ型の取り扱いの詳細については、Data Domains and Data Types in System Identification Toolboxを参照してください。

推定データ。dataest と同じ形式および入出力チャネル順で指定します。datavaldataest と同じデータにすることができます。

評価する ARX モデル構造体の数。Nn 行 3 列の行列として指定します。ここで Nn はモデル構造体の数です。

NN の各行の形式は nn = [na nb nk] です。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: V = arxstruc(dataest,dataval,NN,'InputName',"u2") は単一の入力チャネルとして timetable 変数 u2 を選択します。

入力チャネル名。string、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。

データ ソースに timetable を使用している場合は、InputName の名前は timetable 変数のサブセットでなければなりません。

例: V = arxstruc(tt,__,'InputName',["u1" "u2"]) は、推定で使用する timetable tt からの入力チャネルとして変数 u1 および u2 を選択します。

出力チャネル名。string または文字ベクトルとして指定します。

データ ソースに timetable を使用している場合は、OutputName の名前は timetable 変数のサブセットでなければなりません。

例: V = arxstruc(___,'OutputName',"y3") は、推定で使用する timetable tt からの出力チャネルとして変数 y3 を選択します。

出力引数

すべて折りたたむ

損失関数。4 行 (Nn+1) 列の行列として指定します。

V の最初の行には損失関数が含まれます。V の残りの行には、次数と遅延が対応する損失関数のすぐ下になるようにして NN の転置が格納されます。V の最後の列に dataest のデータ点の数が格納されます。

バージョン履歴

R2006a より前に導入

すべて展開する