Main Content

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

predict

K ステップ先のモデル出力の予測

説明

この predict コマンドは、測定された入出力データを使用して、同定されたモデルの K ステップ先の出力を計算します。モデルを同定するには、先にすべての入出力データを収集してから、オフラインでモデル パラメーターを推定します。リアルタイムのデータを使用して非線形システムのオンライン状態推定を実行するには、代わりに拡張カルマン フィルターとアンセンテッド カルマン フィルター用の predict コマンドを使用します。

yp = predict(sys,data,K) は、測定された入出力データを使用して、同定されたモデル sysK ステップ先の出力を予測します。

predict コマンドは、測定データの時間範囲における出力応答を予測します。一方、forecast は、測定データの最後の時点よりも後の将来の時間範囲についての予測を実行します。測定データの時間範囲における sys の検証には predict を使用します。

yp = predict(sys,data,K,opt) は、オプション セット opt を使用して、初期条件の処理やデータのオフセットなどの追加の予測オプションを指定します。

[yp,ic,sys_pred] = predict(___) は、初期条件の推定値 ic と予測子モデル sys_pred も返します。この構文は、前述の任意の入力引数の組み合わせと共に使用します。

predict(sys,data,K,___) は、予測出力をプロットします。前述の任意の入力引数の組み合わせと共に使用します。プロットの表示オプションを変更するには、プロットを右クリックしてコンテキスト メニューにアクセスします。メニューの詳細については、ヒントを参照してください。

予測モデル応答は compare コマンドを使用してプロットすることもできます。compare コマンドは、予測結果を観測データと比較し、定量的な適合度を表示します。

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

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

predict(sys1,Linespec1,...,sysN,LinespecN,data,K,___) は、各モデルに対して指定されたライン タイプ、マーカー記号、色を使用します。

すべて折りたたむ

時系列データをシミュレートします。

init_sys = idpoly([1 -0.99],[],[1 -1 0.2]);
opt = simOptions('AddNoise',true);
u = iddata([],zeros(400,0),1);
data = sim(init_sys,u,opt);

data は、時系列モデルのシミュレーション応答データを含む iddata オブジェクトです。

data を推定データとして使用して ARMAX モデルを推定します。

na = 1;
nb = 2;
sys = armax(data(1:200),[na nb]);

予測範囲 4 を使用してモデルの出力を予測します。

K = 4;
yp = predict(sys,data,K);

ypiddata オブジェクトです。予測出力はオブジェクトの OutputData プロパティで返されます。

予測データと推定データの出力を比較します。

plot(data(201:400),yp(201:400));
legend('Estimation data','Predicted data');

Figure contains an axes object. The axes object with title y1 contains 2 objects of type line. These objects represent Estimation data, Predicted data.

あるいは、予測応答と推定データをプロットするには compare(sys,data,K) を使用します。

推定データを読み込みます。

load iddata1;
data = z1;

次数 [2 2 1] の ARX モデルを推定します。

sys1 = arx(data,[2 2 1]);

2 つの極をもつ伝達関数を推定します。

 sys2 = tfest(data,2);

predict オプション セットを作成し、予測に対してゼロの初期条件を指定します。

opt = predictOptions('InitialCondition','z');

推定モデルの予測出力をプロットします。指定した予測オプション セット opt を使用し、予測範囲を 10 と指定します。各システムの予測出力をプロットするライン スタイルを指定します。

predict(sys1,'r--',sys2,'b',data,10,opt);

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent data (y1), sys1, sys2.

表示オプションを変更するには、プロットを右クリックしてコンテキスト メニューにアクセスします。たとえば、推定データを表示するには、コンテキスト メニューから [検証データの表示] を選択します。予測誤差を表示するには、[予測誤差プロット] を選択します。

予測応答は compare コマンドを使用してプロットすることもできます。そのためには、まず compare のオプション セットを作成し、ゼロの初期条件を使用するように指定します。

opt = compareOptions('InitialCondition','z');
compare(data,sys1,'r--',sys2,'b',10,opt);

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent data (y1), sys1: 54.31%, sys2: 70.57%.

推定データを使用してモデルを推定してから、predict コマンドを使用して予測モデル出力と予測子モデルを計算します。予測子モデルをシミュレートして予測出力を再現します。

推定データを読み込みます。

load iddata3 z3
data = z3;

データから多項式モデルを推定します。

sys = polyest(z3,[2 2 2 0 0 1]);

予測範囲 4 を使用してシステム応答を予測します。

K = 4;
[yp,ic,sysp] = predict(sys,data,K);

yp は予測モデル応答で、ic には推定初期条件が格納され、sysp は予測子モデルです。

入力 [data.OutputData,data.InputData] と初期条件 ic で予測子モデルをシミュレートします。

opt = simOptions;
opt.InitialCondition = ic;
ys = sim(sysp,[data.OutputData,data.InputData],opt);

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

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

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Predicted Output, Simulated Output.

前に取得した初期条件をモデル予測に組み込みます。

データを読み込みます。

load iddata1ic z1i

ARMAX 推定オプションを指定して初期状態を推定します。

estimOpt = armaxOptions('InitialCondition','estimate');

ARMAX モデルを推定し、初期条件が状態空間形式でカプセル化された initialCondition オブジェクト ic を返します。

na = 2;
nb = 2;
nc = 2;
nk = 1;
[sys,ic] = armax(z1i,[na nb nc nk],estimOpt);

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

predictOpt = predictOptions('InitialCondition',ic);

モデルを予測し、モデル応答を取得します。応答 y を測定データと共にプロットします。

y = predict(sys,z1i,predictOpt);
plot(z1i,y)
legend('Measured Data','Predicted Response')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent Measured Data, Predicted Response. Axes object 2 with title u1 contains an object of type line. This object represents Measured Data.

予測の開始時点で測定と予測の応答がよく一致しています。

履歴データで初期条件を指定してモデル予測を実行します。最初に predict コマンドを使用して予測し、predictOptions オプション セットを使用して履歴データを指定します。その後、履歴データを初期状態に手動でマッピングして予測応答を再現します。

2 入力 1 出力のデータセットを読み込みます。

load iddata7 z7

データを使用して 5 次状態空間モデルを同定します。

sys = n4sid(z7,5);

データセットを 2 つの部分に分けます。

zA = z7(1:15);
zB = z7(16:end);

データ zB に対する同定システムの応答の 10 ステップ先の予測を計算するとします。初期条件で、zA の信号値を履歴レコードとして使用します。つまり、zB のすぐ前の時点におけるデータの入力値と出力値です。

IO = struct('Input',zA.InputData,'Output',zA.OutputData);
opt = predictOptions('InitialCondition',IO);

指定した初期条件と predict を使用して、データ zB の 10 ステップ先の予測を生成します。

[yp,x0,Predictor] = predict(sys,zB,10,opt);

yp は予測モデル応答、x0 は予測子モデル Predictor に対応する初期状態です。x0 を初期条件として使用して Predictor をシミュレートすることで yp.OutputData を再現できます。

次に、履歴データを初期状態に手動でマッピングして出力を再現します。そのためには、zA の時間範囲における 1 ステップの予測誤差を最小化します。

x0est = data2state(sys,zA);

x0est には、zA の最新のデータ サンプルのすぐ後の時点における sys の 5 つの状態の値が含まれています。

10 ステップの予測範囲により、Predictor には元のシステムよりも多くの状態が含まれます。範囲に起因する追加の状態をゼロの初期値に指定してから x0est を追加します。

x0Predictor = zeros(order(Predictor),1);
x0Predictor(end-4:end) = x0est;

[zB.OutputData,zB.InputData] を入力信号、x0Predictor を初期条件として使用して予測子をシミュレートします。

uData = [zB.OutputData,zB.InputData]; % signals required for prediction
[ysim,t,xsim] = lsim(Predictor,uData,[],x0Predictor);

predict コマンドの予測出力 yp.OutputData と手動による計算結果 ysim をプロットします。

plot(t,yp.OutputData,t,ysim, '.')

Figure contains an axes object. The axes object contains 2 objects of type line.

ysimyp.OutputData と同じです。

入力引数

すべて折りたたむ

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

  • 線形モデル — idpolyidprocidssidtfidgrey

  • 非線形モデル — idnlgreyidnlhwidnlarx

    sysidnlhw モデルまたは idnlgrey モデルの場合、予測出力 yp は、data.InputData を入力として使用して計算されたシミュレーション応答と同じになります。

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

測定された入出力データ。次のいずれかとして指定します。

  • iddata オブジェクト — 観測された入力信号と出力信号を使用して iddata オブジェクトを作成します。時系列データ (入力なし) の場合は、iddata オブジェクトを入力なしで iddata(output,[]) として指定します。

  • double の行列 — Nu 個の入力と Ny 個の出力をもつモデルの場合、data を N 行 (Ny+Nu) 列の行列として指定します。ここで、N は観測値の数です。

    時系列データの場合は、N 行 Ny 列の行列として指定します。

予測範囲。次のいずれかとして指定します。

  • 正の整数 — 出力 ypK ステップ先まで計算します。ここで、Kdata のサンプル時間の倍数を表します。

    t の時点における出力は、t-K の時点までに測定された過去の出力と t の時点までの入力を使用して計算されます。

  • Inf — 過去の出力を計算に使用しません。predictsim コマンドを使用したシミュレーションと同じ結果を返します。

出力誤差モデルの場合、K ステップ先の予測とシミュレーション出力に差はありません。これは、出力誤差モデルでは過去の入力のみを使用して将来の出力を予測するためです。

メモ

慎重なモデルの検証のために、測定データの時間範囲におけるモデル sys の検証を行う場合、そのテストに 1 ステップ先の予測 (K = 1) は通常は適しません。自明な 1 ステップ先の予測子 y^(t)=y(t1) でも良好な予測が得られます。そのため、サンプル時間が小さいデータの 1 ステップ先の予測には小さいモデルで十分な場合があります。K = Inf の予測は、sim コマンドでシミュレーションを実行するのと同じです。この予測では、データの低周波数外乱が大きくなるため、特に積分を含むモデルで出力が発散することがあります。測定データの中間周波数の動作を取得するには、1 から Inf までの間の K の値を使用します。

予測オプション。predictOptions オプション セットとして指定します。オプション セットを使用して、初期条件の処理やデータのオフセットなどの予測オプションを指定します。

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

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

出力引数

すべて折りたたむ

予測出力応答。次のいずれかとして返されます。

  • iddata オブジェクト — dataiddata オブジェクトの場合。ypOutputData プロパティに予測出力の値が格納されます。時間変数は data.SamplingInstants で表された範囲の値を取ります。

  • double の行列 — data が double の行列の場合。

t の時点における出力は、t-K の時点までに測定された過去の出力と t の時点までの入力を使用して計算されます。言い換えれば、測定データの r の時点の予測応答が ypr+K-1 のサンプルに格納されます。r の時点で、予測に必要な将来の入力 u(r+1), u(r+2),..., u(r+K) がわかっていることが前提となる点に注意してください。複数実験データの場合、yp には各実験の予測データ セットが格納されます。予測出力の時間範囲は観測データと一致します。

sysidnlhw モデルまたは idnlgrey モデルを使用して指定されている場合、予測出力 yp は、data.InputData を入力として使用して計算されたシミュレーション応答と同じになります。

予測子モデル sys_pred に対応する推定初期条件。列ベクトル、initialCondition オブジェクト、または cell 配列として返されます。

  • sys が線形の伝達関数または多項式のモデルの場合、icinitialCondition オブジェクトです。initialCondition オブジェクトに、sys の自由応答が対応する初期状態ベクトルと共に状態空間形式でカプセル化されます。

  • sys が他のいずれかのタイプの線形または非線形の動的モデルの場合、ic は初期状態ベクトルです。状態の数と同じサイズの列ベクトルとして返されます。

  • data に複数実験データが格納されている場合、ic はサイズ Ne の cell 配列です。ここで、Ne は実験の数です。

予測結果を再現するために、ic を初期条件として使用して sys_pred をシミュレートできます。例については、シミュレーションによる予測結果の再現を参照してください。

sysidnlarx モデルの場合、ic は空として返されます。

予測子モデル。動的システム モデルとして返されます。複数実験データの場合、sys_pred はモデルの配列であり、実験ごとに 1 つのエントリが含まれます。予測子モデル sys_pred と推定初期条件 ic を使用して予測の結果を再現できます。

  • sys が線形モデルの場合、予測子モデルは sys と同じタイプのモデル、またはモデルの状態空間バージョン (idss) として返されます。予測の結果を再現するには、[data.OutputData data.InputData] を入力、ic を初期条件として使用して sys_pred をシミュレートします。シミュレーション出力は予測出力 yp.OutputData と同じになります。例については、シミュレーションによる予測結果の再現を参照してください。

  • sys が非線形グレーボックス モデル (idnlgrey) または Hammerstein-Wiener モデル (idnlhw) の場合、モデルのノイズ成分が自明であるため、予測子モデルは元のモデルと同じになります。sys_pred は空として返されます。予測の結果を再現するには、初期条件 ic を使用して sys をシミュレートします。idnlhw モデルの状態の定義については、Definition of idnlhw Statesを参照してください。

  • sys が非線形 ARX モデル (idnlarx) の場合、sys_predic は空として返されます。予測結果をシミュレーションで再現することはできません。

サンプル時間 Ts がゼロよりも大きい時間領域または周波数領域の離散時間データの場合、sys が連続時間モデルであっても、sys_pred は離散時間モデルになります。

ヒント

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

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

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

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

      • ピーク値 — データの絶対ピーク値を表示します。時間領域データにのみ適用できます。

      • ピーク応答 — データのピーク応答を表示します。周波数応答データにのみ適用できます。

      • 平均値 — データの平均値を表示します。時間領域データにのみ適用できます。

    • 表示 — 周波数領域データと周波数応答データの場合のみ。

      • 振幅 — システムの周波数応答の振幅を表示します。

      • 位相 — システムの周波数応答の位相を表示します。

    • 検証データの表示 — モデル応答の予測に使用されたデータをプロットします。

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

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

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

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

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

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

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

    • 予測範囲 — 予測範囲を設定するか、シミュレーションを選択します。

    • 初期条件 — 初期条件の処理を指定します。周波数応答データには適用されません。

      次のいずれかとして指定します。

      • 推定 — 初期条件を推定パラメーターとして扱います。

      • ゼロ — すべての初期条件をゼロに設定します。

      • 遅延と推定を吸収 — 非ゼロの遅延をモデルの係数に吸収し、初期条件を推定パラメーターとして扱います。このオプションは、離散時間モデルにのみ使用します。

    • 予測応答プロット — 予測モデル応答をプロットします。既定では、応答プロットが表示されます。

    • 予測誤差プロット — モデル応答と予測データの間の誤差をプロットします。

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

バージョン履歴

R2006a より前に導入