Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

forecast

同定されたモデルの出力を予想する

説明

yf = forecast(sys,PastData,K) は、過去に測定された時間領域データ PastData を使用して、同定された時系列モデル sys の出力を K ステップ先まで予想します。PastData には、timetable、コンマ区切りの入力/出力行列のペア、または時間領域の iddata オブジェクトを指定できます。

forecast は、測定データの最後の時点よりも後の将来の時間範囲についての予測を実行します。これに対して、predict コマンドは、測定データの時間範囲における同定モデルの応答を予測します。predict を使用して、予測された結果が、推定モデルの観測された応答と一致するかどうかを判別します。sys が適切な予測モデルである場合、それを forecast で使用することを検討します。

yf = forecast(sys,PastData,K,FutureInputs) は、入力の将来値 FutureInputs を使用して、入力チャネルでの同定モデルの応答を予想します。

yf = forecast(___,opts) は、オプション セット opts を使用して、追加の予想オプションを指定します。opts を、前述の任意の入力引数の組み合わせと共に使用します。

[yf,x0,sysf] = forecast(___) は、初期状態の推定値 x0 と予想モデル sysf も返し、前述の任意の入力引数の組み合わせを含めることができます。

[yf,x0,sysf,yf_sd,x,x_sd] = forecast(___) は、出力の推定標準偏差 yf_sd、状態軌跡 x、および軌跡の標準偏差 x_sd も返します。前述の任意の入力引数の組み合わせと共に使用します。

forecast(sys,PastData,K,___) は、予想出力をプロットします。前述の任意の入力引数の組み合わせと共に使用します。

表示オプションを変更するには、プロットを右クリックしてコンテキスト メニューにアクセスします。たとえば、予想出力の推定標準偏差を表示するには、コンテキスト メニューから [信頼領域] を選択します。メニューの詳細については、ヒントを参照してください。

forecast(sys,Linespec,PastData,K,___) は、Linespec を使用してライン タイプ、マーカー記号、および色を指定します。

forecast(sys1,...,sysN,PastData,K,___) は、複数の同定モデルの予想出力をプロットします。色やライン スタイルは forecast で自動的に選択されます。

forecast(sys1,Linespec1,...,sysN,LinespecN,PastData,K,___) は、各システムに対して指定されたライン タイプ、マーカー記号、および色を使用します。

すべて折りたたむ

AR モデルを使用して正弦波信号の値を予想します。

データを生成してプロットします。

data = iddata(sin(0.1*[1:100])',[]);
plot(data)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents data.

AR モデルを正弦波に当てはめます。

sys = ar(data,2);

特定の対象期間における将来の値を予想します。

K = 100;
p = forecast(sys,data,K);

K は、予想の対象期間を 100 サンプルとして指定します。p は、予想されるモデル応答です。

予想されたデータをプロットします。

plot(data,'b',p,'r'), legend('measured','forecasted')

Figure contains an axes object. The axes object with title y1 contains 2 objects of type line. These objects represent measured, forecasted.

または、構文 forecast(sys,data,K) を使用して予想出力をプロットします。

過去のデータを取得し、時系列モデルを同定します。

load sdata9 tt9
past_data = tt9.y(1:50);
model = ar(tt9,4);

tt9 は、測定出力のみが含まれる iddata オブジェクトです。

modelidpoly 時系列モデルです。

予想の初期条件を指定します。

opt = forecastOptions('InitialCondition','e');

特定の対象期間における予想されるシステム応答をプロットします。

K = 100;
forecast(model,past_data,K,opt);    
legend('Measured','Forecasted')

Figure contains an axes object. The axes object with ylabel y contains 2 objects of type line. These objects represent Measured (y), Forecasted.

過去のデータを取得し、時系列モデルを同定します。

load iddata9 z9
past_data = z9.OutputData(1:50);
model = ar(z9,4);

z9 は、測定出力のみが含まれる iddata オブジェクトです。

特定の対象期間における予想されるシステム応答を赤い破線としてプロットします。

K = 100;
forecast(model,'r--',past_data,K);

Figure contains an axes object. The axes object with ylabel y1 contains 2 objects of type line. These objects represent Past data (y1), model.

既定では、プロットに過去のデータも表示されます。表示オプションを変更するには、プロットを右クリックしてコンテキスト メニューにアクセスします。たとえば、予想出力の推定標準偏差を表示するには、コンテキスト メニューから [信頼領域] を選択します。プロットする標準偏差の数を指定するには、[プロパティ エディター] ダイアログ ボックスを開きます。[オプション] タブのダイアログ ボックスで、[同定されたモデルの信頼領域] に標準偏差の数を指定します。既定値は 1 標準偏差です。

過去のデータ、将来の入力、および同定された線形モデルを取得します。

load iddata1 z1
z1 = iddata(cumsum(z1.y),cumsum(z1.u),z1.Ts,'InterSample','foh');
past_data = z1(1:100);
future_inputs = z1.u(101:end);
sys = polyest(z1,[2 2 2 0 0 1],'IntegrateNoise',true);

z1 は、統合されたデータが含まれる iddata オブジェクトです。sysidpoly モデルです。past_data には、z1 の最初の 100 データ点が含まれます。

future_inputs には、z1 の最後の 200 データ点が含まれます。

特定の対象期間における将来のシステム応答と、将来の入力を予想します。

K = 200;
[yf,x0,sysf,yf_sd,x,x_sd] = forecast(sys,past_data,K,future_inputs);

yf は予想されるモデル応答で、yf_sd は出力の標準偏差です。x0 は初期状態の推定値で、sysf は予想状態空間モデルです。また、状態軌跡 x と軌跡の標準偏差 x_sd が返されます。

予想される応答をプロットします。

UpperBound = iddata(yf.OutputData+3*yf_sd,[],yf.Ts,'Tstart',yf.Tstart);
LowerBound = iddata(yf.OutputData-3*yf_sd,[],yf.Ts,'Tstart',yf.Tstart);
plot(past_data(:,:,[]),yf(:,:,[]),UpperBound,'k--',LowerBound,'k--')
legend({'Measured','Forecasted','3 sd uncertainty'},'Location','best')

Figure contains an axes object. The axes object with title y1 contains 4 objects of type line. These objects represent Measured, Forecasted, 3 sd uncertainty, LowerBound.

状態軌跡をプロットします。

t = z1.SamplingInstants(101:end);
subplot(3,1,1)
plot(t,x(:,1),t,x(:,1)+3*x_sd(:,1),'k--',t,x(:,1)-3*x_sd(:,1),'k--')
title('X_1')

subplot(3,1,2)
plot(t, x(:,2),t,x(:,2)+3*x_sd(:,2),'k--',t, x(:,2)-3*x_sd(:,2),'k--')
title('X_2')

subplot(3,1,3)
plot(t,x(:,3),t,x(:,3)+3*x_sd(:,3),'k--',t, x(:,3)-3*x_sd(:,3),'k--')
title('X_3')

Figure contains 3 axes objects. Axes object 1 with title X indexOf 1 baseline contains 3 objects of type line. Axes object 2 with title X indexOf 2 baseline contains 3 objects of type line. Axes object 3 with title X indexOf 3 baseline contains 3 objects of type line.

将来の入力が指定されているため、応答の不確かさは予想の時間範囲において大きくなりません。

データを読み込みます。

load('predprey2data');
z = iddata(y,[],0.1);
set(z,'Tstart',0,'OutputUnit',{'Population (in thousands)',...
    'Population (in thousands)'},'TimeUnit','Years');

z は、捕食者 1、被捕食者 1 の個体群からの 2 出力の時系列データ セット (入力なし) です。この個体群には、過密によって捕食者の個体数が減少することが示されています。このデータ セットには 201 のデータ サンプルが含まれ、20 年分の進化を表します。

捕食者 (y1) および被捕食者 (y2) の個体群における変化を次のように表すことができます。

y1(t)=p1*y1(t-1)+p2*y1(t-1)*y2(t-1)

y2(t)=p3*y2(t-1)-p4*y1(t-1)*y2(t-1)-p5*y2(t-1)2

非線形 ARX モデルをカスタム リグレッサーで使用して、捕食者および被捕食者の個体群における非線形性を当てはめることができます。

データの一部を過去のデータとして使用します。

past_data = z(1:100);

標準リグレッサーを指定します。

na = [1 0; 0 1];
nb = [];
nk = [];

カスタム リグレッサーを指定します。

C = {{'y1(t-1)*y2(t-1)'};{'y1(t-1)*y2(t-1)','y2(t-1)^2'}};

past_data を推定データとして使用して非線形 ARX モデルを推定します。

sys = nlarx(past_data,[na nb nk],'idWaveletNetwork','CustomRegressors',C);

sys のシミュレーション出力と測定データを比較して、よく当てはまっていることを確認します。

compare(past_data,sys);

Figure contains 2 axes objects. Axes object 1 with ylabel y1 contains 2 objects of type line. These objects represent Validation data (y1), sys: 88.92%. Axes object 2 with ylabel y2 contains 2 objects of type line. These objects represent Validation data (y2), sys: 86.35%.

sys の予想出力をプロットします。

forecast(sys,past_data,101);
legend('Measured','Forecasted');

Figure contains 2 axes objects. Axes object 1 with ylabel y1 contains 2 objects of type line. These objects represent Measured (y1), sys. Axes object 2 with ylabel y2 contains 2 objects of type line. These objects represent Measured (y2), Forecasted.

過去のデータ、将来の入力、および同定された線形モデルを取得します。

load iddata3 z3
past_data = z3(1:100);
future_inputs = z3.u(101:end);
sys = polyest(z3,[2 2 2 0 0 1]);

特定の対象期間における将来のシステム応答と、将来の入力を予想します。

K = size(future_inputs,1);
[yf,x0,sysf] = forecast(sys,past_data,K,future_inputs);

yf は予想されるモデル応答で、x0 は初期状態の推定値で、sysf は予想状態空間モデルです。

入力 future_inputs と初期条件 x0 を指定して予想状態空間モデルをシミュレートします。

opt = simOptions;
opt.InitialCondition = x0;
ys = sim(sysf,future_inputs(1:K),opt);

予想出力とシミュレーション出力をプロットします。

t = yf.SamplingInstants;
plot(t,yf.OutputData,'b',t,ys,'.r');
legend('Forecasted Output','Simulated Output')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Forecasted Output, Simulated Output.

入力 future_inputs と初期条件 x0 を指定した予想モデル sysf のシミュレーションにより、予想出力 yf が生成されます。

入力引数

すべて折りたたむ

出力を予想する同定モデル。次のいずれかとして指定します。

使用できるモデルがない場合は、ararxarmaxnlarxssest などのコマンドを使用して PastData から sys を推定します。

測定されて等間隔でサンプリングされた入力/出力データ。timetable、数値入力/出力行列のコンマ区切りのペア、または iddata オブジェクトとして指定します。PastData の指定はデータ型によって異なります。

timetable

一定間隔の時間ベクトルを使用する timetable として PastData を指定します。tt には入力チャネルと出力チャネルを表す変数が含まれます。

数値行列

PastData を以下のいずれかとして指定します。

  • 入出力の時間領域の信号値を含む、実数値行列のコンマ区切りのペア u,y。次元が Ns 行 Nu 列の入力行列と、次元が Ns 行 Ny 列の出力行列を指定します。Nu は入力の数、Ny は出力の数、Ns はサンプルの数です。

    時系列データの場合は、[],y を指定します。

行列ベースのデータは、離散時間モデルの場合にのみ使用します。

データ オブジェクト

入力データと出力データを含む iddata オブジェクトとして、データを指定します。時系列データ (入力なし) の場合は、入力のない iddata オブジェクトとして PastData を指定します。

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

予想の対象期間。正の整数として指定します。出力 yf は、予測の対象期間が Ts*K となるように K ステップ先まで計算されます。

将来の入力値。以下のいずれかとして指定します。

  • [] — 将来の入力値は、ゼロ、つまり入力のオフセット レベルに等しいとみなされます (opts で指定されている場合)。時系列モデルの場合は、[] として指定します。

  • iddata オブジェクト — 入力のない iddata オブジェクトとして指定します。

  • double の K 行 Nu 列の行列 — K は予想範囲で、Nu は入力の数です。

    複数の実験のデータがある場合、PastData で行列の cell 配列を実験ごとに 1 つ指定できます。

予想のオプション。forecastOptions オプション セットとして指定します。

ライン スタイル、マーカー、色。文字ベクトルとして指定します。たとえば、'b''b+:' です。

Linespec の構成の詳細については、plot の Linespec 引数を参照してください。

出力引数

すべて折りたたむ

予想される応答。PastData と同じ形式で返されます。yf は、PastData での最後のサンプル時間以降において予想される応答です。yf には、時間間隔 T0+(N+1:N+K)*T1 のデータが含まれます。ここで、T0 = PastData.Tstart および T1 = PastData.Ts です。N は PastData でのサンプルの数です。

予想の開始時における推定される初期状態。状態の数と同じサイズの列ベクトルとして返されます。x0 を予想モデル sysf で使用し、純粋なシミュレーションによって予想結果を再現します。

PastData が複数実験の場合、x0 は、サイズ Ne の cell 配列です。ここで、Ne は実験の数です。

sys が状態空間モデル (idssidgrey、または idnlgrey) でない場合、状態の定義は sys が線形なのか非線形なのかによって異なります。

  • 線形モデル (idpolyidprocidtf) – sys は離散時間状態空間モデルに変換され、x0 は、PastData での最後のデータよりも後の時点における変換されたモデルの状態として返されます。

    sys から idss への変換が不可能な場合、x0 は空として返されます。たとえば、sys が、既約の内部遅延がある MIMO の連続時間モデルの場合です。

  • 非線形モデル (idnlhw または idnlarx) — idnlarx モデルおよび idnlhw モデルの状態の定義については、Definition of idnlarx StatesおよびDefinition of idnlhw Statesを参照してください。

予想モデル。以下のいずれかとして返されます。

  • 離散時間 idsssys が離散時間 idss モデルの場合、sysfsys と同じです。sys が状態空間モデルでない線形モデル (idpolyidprocidtf) の場合、または連続時間状態空間モデル (idssidgrey) の場合、sys は離散時間 idss モデルに変換されます。変換されたモデルは、sysf で返されます。

  • idnlarxidnlhw、または idnlgreysys が非線形モデルの場合、sysfsys と同じです。

  • モデルの cell 配列 — PastData が複数実験の場合、sysf は Ne モデルの配列です。ここで、Ne は実験の数です。

sim を使用して入力 FutureInputs と初期条件 x0 を指定した sysf のシミュレーションでは、yf が出力として生成されます。時系列モデルの場合、FutureInputs は空です。

予想される応答の推定標準偏差。K 行 Ny 列の行列として返されます。ここで、K は予想範囲で、Ny は出力の数です。ソフトウェアはモデル パラメーターの共分散、初期状態の共分散、および加法性ノイズの共分散を考慮して標準偏差を計算します。加法性ノイズの共分散はモデルの NoiseVariance プロパティに格納されます。

PastData が複数実験の場合、yf_sd は、サイズ Ne の cell 配列です。ここで、Ne は実験の数です。

sys が非線形 ARX モデル (idnlarx) または Hammerstein-Wiener モデル (idnlhw) の場合、yf_sd は空です。sys にパラメーター共分散情報が含まれていない場合、つまり getcov(sys) が空の場合も、yf_sd は空です。詳細については、getcov を参照してください。

予想される状態軌跡。K 行 Nx 列の行列として返されます。ここで、K は予想範囲で、Nx は状態の数です。x は予想モデルの状態です。

PastData が複数実験の場合、x は、サイズ Ne の cell 配列です。ここで、Ne は実験の数です。

sys が状態空間モデル以外の線形モデルである (idssidgrey でない) 場合、離散時間状態空間モデルに変換され、変換されたモデルの状態が計算されます。sys から idss への変換が不可能な場合、x は空として返されます。たとえば、sys が、既約の内部遅延がある MIMO の連続時間モデルの場合です。

sys が非線形 ARX モデル (idnlarx) または Hammerstein-Wiener モデル (idnlhw) の場合、x は空です。

予想される状態の推定標準偏差 x。K 行 Ns 列の行列として返されます。ここで、K は予想範囲で、Ns は状態の数です。ソフトウェアはモデル パラメーターの共分散、初期状態の共分散、および加法性ノイズの共分散を考慮して標準偏差を計算します。加法性ノイズの共分散はモデルの NoiseVariance プロパティに格納されます。

PastData が複数実験の場合、x_sd は、サイズ Ne の cell 配列です。ここで、Ne は実験の数です。

sys が状態空間モデル以外の線形モデルである (idssidgrey でない) 場合、離散時間状態空間モデルに変換され、変換されたモデルの状態と標準偏差が計算されます。sys から idss への変換が不可能な場合、x_sd は空として返されます。たとえば、sys が、既約の内部遅延がある MIMO の連続時間モデルの場合です。

sys が非線形 ARX モデル (idnlarx) または Hammerstein-Wiener モデル (idnlhw) の場合、x_sd は空です。

ヒント

  • プロットを右クリックするとコンテキスト メニューが開き、次のオプションにアクセスできます。

    • システム — 予想出力を表示するシステムを選択します。既定では、すべてのシステムの予想出力がプロットされます。

    • データ実験 — 複数実験データの場合のみ。別の実験のデータに切り替えます。

    • 特性 — 次のデータ特性を表示します。

      • ピーク値 — データのピーク値を表示します。

      • 平均値 — データの平均値を表示します。

      • 信頼領域 — 予想出力の推定標準偏差を表示します。プロットする標準偏差の数を指定するには、[プロパティ エディター] ダイアログ ボックスを開きます。[オプション] タブで、[同定されたモデルの信頼領域] に標準偏差の数を指定します。既定値は 1 標準偏差です。

        信頼領域は、非線形 ARX モデル、Hammerstein-Wiener モデル、およびパラメーター共分散情報が含まれていないモデルには生成されません。

    • 過去のデータの表示 — 予想に使用された過去の出力データをプロットします。既定では、過去の出力データがプロットされます。

    • I/O のグループ化 — 複数の入力チャネルまたは出力チャネルを含むデータセットの場合。プロットにおける入力チャネルおよび出力チャネルのグループ化を選択します。

      • なし — 入出力チャネルをそれぞれ別々の座標軸にプロットします。

      • すべて — すべての入力チャネルをグループ化し、すべての出力チャネルをグループ化します。

    • I/O セレクター — 複数の入力チャネルまたは出力チャネルを含むデータセットの場合。プロットする入力チャネルと出力チャネルのサブセットを選択します。既定では、すべての出力チャネルがプロットされます。

    • グリッド — プロットにグリッドを追加します。

    • 正規化 — プロット内のすべてのデータの y スケールを正規化します。

    • フル ビュー — フル ビューに戻ります。既定では、プロットはフル ビューにスケーリングされます。

    • プロパティ — プロットの属性をカスタマイズするための [プロパティ エディター] ダイアログ ボックスを開きます。

バージョン履歴

R2012a で導入

すべて展開する