最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

平衡化打ち切りによるモデルの低次元化

平衡化打ち切りは、モデル応答全体への影響が比較的低い状態を無視することによって、モデルの低次近似を計算します。対象のダイナミクスを維持する低次近似を使用して、解析および制御設計を簡略化できます。モデルの低次元化の平衡化打ち切り方法では、ソフトウェアはハンケル特異値によって状態の寄与を測定して (hsvd を参照)、小さい値をもつ状態を破棄します。平衡化打ち切りによって低次元化されたモデルを計算するには、2 つの方法があります。

  • コマンド ラインで balred コマンドを使用する。

  • Model Reducer[平衡化打ち切り] の方法を使用する。

モデルの低次元化の一般的な情報については、モデルの低次元化の基礎を参照してください。

Model Reducer アプリでの平衡化打ち切り

Model Reducer は、モデルを低次元化し、元のモデルと低次元化されたモデルの応答を調査および比較する、対話型のツールを提供します。Model Reducer で平衡化打ち切りによってモデルを近似するには、次の手順を実行します。

  1. アプリを開き、低次元化する LTI モデルをインポートします。たとえば、MATLAB® ワークスペースに build という名前のモデルがあるとします。次のコマンドは、Model Reducer を開いてモデルをインポートします。

    modelReducer(build)
  2. [データ ブラウザー] で、低次元化するモデルを選択します。 [平衡化打ち切り] をクリックします。

    [平衡化打ち切り] タブで、Model Reducer は元のモデルと低次元化されたモデルの周波数応答のプロットを表示します。周波数応答は、SISO モデルの場合はボード線図であり、MIMO モデルの場合は特異値プロットです。アプリには元のモデルのハンケル特異値プロットも表示されます。

    ハンケル特異値プロットは、システムにおけるそれぞれの状態の相対的なエネルギーの寄与を示します。Model Reducer はこれらの値に基づいて、初期の低次元化されたモデルを計算します。強調表示されているバーは、初期の低次元化されたモデルでエネルギーが最も低い状態です。Model Reducer は、強調表示されているバーよりハンケル特異値が小さい状態を破棄します。

  3. アプリケーションにとって重要なダイナミクスを保持するモデルで最も低次元のものを探すために、低次元化されたモデルの別の次元を試します。別の次元を指定するには、次のどちらかを行います。

    • [低次元化されたモデル次数] フィールドにモデルの次元を入力する。単一の整数、または 10:14[8,11,12] などの整数の配列が入力できます。

    • ハンケル特異値プロットでバーをクリックして、低次元化されたモデルのエネルギーが最も低い状態を指定する。複数の値を指定するには、Ctrl キーを押しながらクリックします。

    低次元化されたモデルの指定次元を変更すると、Model Reducer は新しい低次元化されたモデルを自動的に計算します。モデルの次元を複数指定する場合、Model Reducer は複数の低次元化されたモデルを計算して、その応答をプロットに表示します。

  4. 必要に応じて、周波数応答に加え、元のモデルと低次元化されたモデルの間の絶対誤差または相対誤差を調べます。[平衡化打ち切り] タブにあるボタンを使用して、誤差のプロットのタイプを選択します。

    解析プロットの使用方法の詳細については、低次元化されたモデルの Model Reducer アプリによる可視化を参照してください。

  5. 低周波数ダイナミクスがアプリケーションにとって重要ではない場合、[DC ゲインの保持] チェック ボックスをオフにすることができます。そうすると、高周波数で、元のモデルと低次元化されたモデルがより一致するようになることがあります。

    [DC ゲインの保持] チェック ボックスをオンまたはオフにすると、Model Reducer は、新しい低次元化されたモデルを自動的に計算します。このオプションの詳細については、打ち切りによる低次元モデル近似と DC 一致によるものとの比較を参照してください。

  6. 必要に応じて、ハンケル特異値の計算を特定の周波数範囲に制限します。そのような制限が便利なのは、特定のアプリケーションにとっての関心領域の外部にあるモードがモデルにある場合です。周波数制限を適用する場合、Model Reducer は、指定された周波数範囲内のみのエネルギーの寄与に基づいて、どの状態を打ち切るべきかを判断します。その範囲外のエネルギーの寄与を無視することで、さらに低次の、それでもアプリケーションにはまだ適切な近似が得られます。

    特異値の計算を制限するには、[周波数範囲の選択] をオンにします。次に、以下の手順で周波数範囲を指定します。

    • テキスト ボックスで、形式 [fmin,fmax] のベクトルを入力する。単位は rad/TimeUnit です。ここで、TimeUnit は低次元化を行っているモデルの TimeUnit プロパティです。

    • 応答プロットまたは誤差プロットで、影付きの領域の境界または影付きの領域自体をドラッグします。Model Reducer は、影付きの領域内のみの状態の寄与を解析します。

    [周波数範囲の選択] チェック ボックスをオンまたはオフにしたり、選択範囲を変更したりすると、Model Reducer は新しい、低次元化されたモデルを自動的に計算します。

    メモ

    [周波数範囲の選択] をオンにすると、[DC ゲインの保持] が自動的にオフになります。周波数制限を使用している場合でも DC の一致を強制するには、[DC ゲインの保持] を再度オンにします。

  7. 1 つ以上の低次元化されたモデルを格納してさらに解析を行う場合には、 をクリックします。その新しいモデルが [データ ブラウザー] に表示されます。複数の次元を指定していた場合は、それぞれの低次元化されたモデルが別々に表示されます。モデル名は、低次元化されたモデルの次数を反映します。

    [データ ブラウザー] に低次元化されたモデルを作成後、引き続き削減パラメーターを変更して、解析や比較のための低次元化されたモデルを異なる次数で作成できます。

これで、低次元化されたモデルを使用してさらに解析を行うことができるようになります。以下に例を示します。

  • 低次元化されたシステムの、ステップ応答またはニコルス線図などの他の応答を調べます。これを行うには、[プロット] タブのツールを使用します。詳細については、低次元化されたモデルの Model Reducer アプリによる可視化を参照してください。

  • さらに解析または制御設計を行うために、低次元化されたモデルを MATLAB ワークスペースにエクスポートします。[Model Reducer] タブで、 [エクスポート] をクリックします。

平衡化打ち切り用 MATLAB コードの生成

コマンド ラインでモデルの低次元化タスクをさらに行うために使用できる MATLAB スクリプトを作成するには、[低次元化されたモデルの作成] をクリックして、[MATLAB スクリプトの生成] を選択します。

Model Reducer は、[平衡化打ち切り] タブで設定したパラメーターやオプションによるモデルの低次元化を、balred コマンドを使用して実行するスクリプトを作成します。スクリプトが MATLAB エディターで開きます。

コマンド ラインでの平衡化打ち切りによるモデルの近似

コマンド ラインで、balred を使用してモデルの低次元化近似を計算します。

これを行うには、最初にさまざまな状態による、モデルの動作全体への寄与を調べます。モデルの動作全体に大きく寄与する状態の数に基づいて近似次数を選択します。

この例では、高次のモデルを読み込みます。hplant は 23 次の SISO モデルです。

load ltiexamples hplant
order(hplant)
ans = 23

ハンケル特異値 (HSV) プロットを使用して、hplant での状態ごとのエネルギーの相対量を調べます。

hsvplot(hplant)

ハンケル特異値が小さいことは、関連する状態がシステムの動作にほとんど影響しないことを示します。このプロットから、2 つの状態がシステムのエネルギーで最も考慮されていることがわかります。そこで、モデルを 1 次または 2 次に簡略化することにします。

opts = balredOptions('StateElimMethod','Truncate');
hplant1 = balred(hplant,1,opts);
hplant2 = balred(hplant,2,opts);

balred への 2 番目の引数は、hplant1hplant の 1 次近似で、hplant2 が 2 次近似となるようにターゲットの近似次数を指定します。既定では、balred は最も小さいハンケル特異値をもつ状態を破棄し、残りの状態がシステムの DC ゲインを保持するように変更します。StateElimMethod オプションを Truncate に設定すると、balred は残りの状態を変更せずに低エネルギーの状態を破棄します。

低次元化されたモデルで作業をする場合、近似を行うことで、アプリケーションにとって重要な周波数に誤差が導入されることがないように確認することが大切です。したがって、元のシステムと近似したシステムの周波数応答を比較します。MIMO システムの場合、sigmaplot コマンドを使用します。SISO システムの場合、ボード線図を調べます。

bodeplot(hplant,hplant2,hplant1)
legend('Original','2nd order','1st order')

低い周波数では特に、2 次近似 hplant2 が元の 23 次システムと非常によく一致します。1 次システムはあまり一致しません。

一般的に、近似したモデルの次数を減らすと、近似したモデルの周波数応答と元のモデルの周波数応答との間に相違が生じ始めます。重要な帯域での精度が十分に高い近似を選択してください。たとえば制御システムの場合、制御帯域幅内で高い精度を保とうとすることがあります。制御帯域幅を大きく超え、ゲインが迅速にロールオフするような帯域幅での周波数精度は、それほど重要ではないでしょう。

時間領域における近似を確認することもできます。たとえば、元のシステムと低次元化されたシステムのステップ応答を調べます。

stepplot(hplant,hplant2,'r--',hplant1,'g--')
legend('Original','2nd order','1st order','Location','SouthEast')

この結果から、2 次近似が元の 23 次システムにとって適切であることが確認されます。

打ち切りによる低次元モデル近似と DC 一致によるものとの比較

この例では、2 つの方法で低次の近似を計算する方法を示し、結果を比較します。平衡化打ち切り方法によって低次の近似を計算する場合、次のいずれかを行います。

  • システム動作への寄与が最も小さい状態を破棄し、残りの状態がシステムの DC ゲインを保持するように変更する。

  • 低エネルギーの状態を破棄し、残りの状態を変更しない。

どちらの方法を使用するかは、アプリケーションにとってどちらのダイナミクスが最も重要かによって異なります。一般に、DC ゲインを保持すると、高周波数のダイナミクスで精度が低下します。逆に、状態を切り捨てると、高速過渡状態での精度が向上しますが、低周波数での精度が低下します。

この例では、balred コマンドの状態消去方法である Truncate および MatchDC を比較します。次に示すように、[平衡化打ち切り] タブの [DC ゲインの保持] チェック ボックスを使用して、Model Reducer アプリで状態消去方法を同様に制御できます。

以下のシステムを考えます。

このシステムの r から y への閉ループ モデルを作成します。

G = zpk([0 -2],[-1 -3],1);
C = tf(2,[1 1e-2]);
T = feedback(G*C,1)
T =
 
             2 s (s+2)
  --------------------------------
  (s+0.004277) (s+1.588) (s+4.418)
 
Continuous-time zero/pole/gain model.

Ts = 0 付近で極-零点がほぼ相殺される 3 次システムです。このため、近似による低次元化にふさわしい候補となります。

T に対する 2 つの 2 次近似を計算します。1 つは DC ゲインを保持する近似で、もう 1 つは他の状態を変更せずに、エネルギーが最も低い状態を打ち切る近似です。balredOptions を使用して、近似方法 MatchDC および Truncate をそれぞれ指定します。

matchopt = balredOptions('StateElimMethod','MatchDC');
truncopt = balredOptions('StateElimMethod','Truncate');
Tmatch = balred(T,2,matchopt);
Ttrunc = balred(T,2,truncopt);

近似モデルの周波数応答を比較します。

bodeplot(T,Tmatch,Ttrunc)
legend('Original','DC Match','Truncate')

打ち切られたモデル Ttrunc は、高周波数では元のモデルとよく一致しますが、低周波数ではかなり乖離します。逆に Tmatch は予想どおり低周波数でうまく一致しますが、高周波数での精度が犠牲になります。

また、異なる状態での時間領域応答を調べることによって、2 つの方法の違いを比べることもできます。長時間区域で 3 つの全モデルのステップ応答を調べることによって、遅いダイナミクスを比較します。

stepplot(T,Tmatch,'r--',Ttrunc,1500)
legend('Original','DC Match','Truncate')

予想したとおり、長時間のスケールでは、DC が一致する近似の Tmatch は元のモデルに非常に似た応答をします。

ステップ応答の高速過渡状態を比較します。

stepplot(T,Tmatch,'r',Ttrunc,'g--',0.5)
legend('Original','DC Match','Truncate')

短時間のスケールでは、打ち切られた近似の Ttrunc の方が、元のモデルとよりよく一致します。どちらの近似方法を使用するかは、アプリケーションにとってどちらの状態が最も重要かを考慮して決定してください。

不安定、またはほぼ不安定な極を使用したモデルの近似

この例では、システムが不安定またはほぼ不安定な極をもつ場合に、低次元化近似を計算する方法を示します。

balred コマンド (または Model Reducer アプリ) は低次元化近似を計算するときに、不安定な極を削除しません。削除すると、システムのダイナミクスが根底から変わってしまうからです。代わりに、ソフトウェアはモデルを安定した部分と不安定な部分に分解して、モデルの安定した部分を低次元化します。

モデルにほぼ不安定な極がある場合、低次元化近似がこれらのダイナミクスを確実に保持するようにしたい場合もあります。この例では、balredOffset オプションを使用して安定/不安定の境界に近い極を保持する方法を説明します。[平衡化打ち切り] タブの [オプション][オフセット] フィールドを使用して、同じ結果を Model Reducer アプリで実現できます。

不安定な極またはほぼ不安定な極をもつモデルを読み込みます。

load('reduce.mat','gasf35unst')

gasf35unst は、2 つの不安定な極 (Re(s) > 0) をもつ 25 状態の SISO モデルです。システムの極を調べて、ほぼ不安定な極を見つけます。

pzplot(gasf35unst)
axis([-0.0015 0.0015 -0.0005 0.0005])

極-零点プロットに、左半平面にある、比較的虚軸に近い複数の極 (x でマーク) が表示されます。これらはほぼ不安定な極です。そのうち 2 つは 0.0005 範囲内の不安定さにあります。さらに 3 つが 0.001 範囲内の不安定さにあります。

モデルのハンケル特異値プロットを調べます。

hsvplot(gasf35unst)

このプロットは 2 つの不安定なモードを示しますが、ほぼ不安定な極のエネルギーの寄与を容易に判別することはできません。アプリケーションで、不安定性に最も近い極が比較的低エネルギーであってもこれを破棄せずに、モデルを低次元化したい場合があります。balredOffset オプションを使用して、虚軸に最も近い 2 つの安定した極を保持する、低次元化されたシステムを計算します。Offset オプションは、balred が破棄できる極と balred が保持しなければならない極 (不安定として処理) の間に境界を設定します。

opts = balredOptions('Offset',0.0005);
gasf_arr = balred(gasf35unst,[10 15],opts);

balred にターゲット近似次数の配列 [10 15] を指定すると、balred によって近似モデルの配列が返されます。配列 gasf_arr には、gasf35unst の 10 次近似と 15 次近似の 2 つのモデルが含まれています。いずれの近似の場合も、balred が 2 つの不安定な極、または 2 つのほぼ不安定な極を廃棄することはありません。

低次元化近似を元のモデルと比較します。

 bodeplot(gasf35unst,gasf_arr,'r--')

15 次近似では、元のモデルに対して正確な周波数領域の一致がもたらされます。ただし、10 次近似は高周波数のダイナミクスで変化を示しており、この変化は大きすぎて受け入れられません。このため、15 次近似がふさわしい選択肢であると思われます。

周波数が制限される平衡化打ち切り

特定の周波数範囲上のエネルギーの寄与の計算に重点を置くと、すべての周波数を考慮する低次元化よりも低い次数での対象のダイナミクスへの適切な近似が得られることがあります。この例では、特定の区間内のダイナミクスに重点を置いて高次のモデルを低次元化します。

この例では、balred コマンドのオプションを使用した、コマンド ラインでの周波数を制限した平衡化打ち切りについて示します。次に示すように、Model Reducer アプリで、[平衡化打ち切り] タブの [周波数範囲の選択] チェック ボックスを使用して、周波数を制限した平衡化打ち切りを実行することもできます。

モデルを読み込み、その周波数応答を検証します。

load(fullfile(matlabroot,'examples','control','build.mat'),'G')
bodeplot(G)

G は、5.2 rad/s、13.5 rad/s、および 24.5 rad/s 周辺にいくつかの大きなピーク領域をもち、多くの周波数に散在する小さなピークをもつ 48 次モデルです。ハンケル特異値プロットを調べて、モデルの 48 の状態のエネルギーの寄与を確認します。

hsvd(G)

特異値プロットにより、システム応答全体に大きな影響を与えずに少なくとも 20 の状態を破棄できることがわかります。アプリケーションに関して、2 番目に大きいピーク (10 ~ 22 rad/s) 付近のダイナミクスにのみ関心があると仮定します。ハンケル特異値プロットに基づいて、いくつかの低次元化されたモデルの次数を試してみます。それらの周波数応答を元のモデルと、特にそのピークの範囲で比較します。

G18 = balred(G,18);
G10 = balred(G,10);

bodeplot(G,G18,G10,logspace(0.5,1.5,100));
legend('Original','Order 18','Order 10');

18 次のモデルは、関心領域のダイナミクスによく一致します。しかし 10 次モデルでは、一致の劣化が発生します。

モデルの低次元化において、関心領域に焦点を絞ることで低次近似との良好な一致を取得します。最初にその周波数範囲内のみの状態エネルギーの寄与を調べます。hsvdOptions を使用して hsvd の周波数範囲を指定します。

hopt = hsvdOptions('FreqIntervals',[10,22]);
hsvd(G,hopt)

このプロットを以前のハンケル特異値プロットと比較すると、この周波数範囲では、ダイナミクス全体に寄与するというよりも、そのダイナミクスに大きく寄与する状態はさらに少なくなります。

同じ低次元化されたモデルを再度試します。今回は、周波数範囲への寄与のみに基づいて削除する状態を選択します。balredOptions を使用して balred の周波数範囲を指定します。

bopt = balredOptions('StateElimMethod','Truncate','FreqIntervals',[10,22]);
GLim18 = balred(G,18,bopt);
GLim10 = balred(G,10,bopt);

bodeplot(G,GLim18,GLim10,logspace(0.5,1.5,100));
legend('Original','Order 18','Order 10');

周波数を制限したエネルギー計算では、関心領域での 10 次近似は、周波数制限なしに計算された 18 次近似と同程度によく合います。

参考

アプリ

関数

関連するトピック