Main Content

care

(非推奨) 連続時間代数リカッチ (Riccati) 方程式の解

care は推奨されません。代わりに icare を使用してください。詳細については、互換性についての考慮事項を参照してください。

構文

[X,L,G] = care(A,B,Q)
[X,L,G] = care(A,B,Q,R,S,E)
[X,L,G,report] = care(A,B,Q,...)
[X1,X2,D,L] = care(A,B,Q,...,'factor')

説明

[X,L,G] = care(A,B,Q) は、連続時間代数リカッチ (Riccati) 方程式の一意の解 X を計算します。

ATX+XAXBBTX+Q=0

関数 care は、ゲイン行列 G=R1BTXE も返します。

[X,L,G] = care(A,B,Q,R,S,E) は、より一般的なリカッチ (Riccati) 方程式を解きます

ATXE+ETXA(ETXB+S)R1(BTXE+ST)+Q=0

RS、および E が省略されると、既定値 R=IS=0、および E=I が設定されます。解 X とともに、care はゲイン行列 G=R1(BTXE+ST) と閉ループ固有値のベクトル L を返します。ただし、

L=eig(A-B*G,E)

[X,L,G,report] = care(A,B,Q,...) は、診断 report を返します。report の値の意味は、次のとおりです。

  • -1 関連付けられたハミルトニアン ペンシルが、虚軸の上または近傍に固有値をもつ場合 (失敗)

  • -2 有限の安定化解 X が存在しない場合

  • X が存在しかつ有限である場合には、相対残差のフロベニウス ノルム

この構文は、X が存在しない場合、エラー メッセージを出力しません。

[X1,X2,D,L] = care(A,B,Q,...,'factor') は、2 つの行列 X1X2 と、X = D*(X2/X1)*D であるような対角のスケーリング行列 D を返します。

ベクトル L は、閉ループ固有値を含みます。関連するハミルトニアン行列が虚軸上に固有値をもつ場合、すべての出力は空になります。

例 1

代数リカッチ (Riccati) 方程式の解

以下の場合、

A=[3211]B=[01]C=[11]R=3

リカッチ (Riccati) 方程式を解くことができます。

ATX+XAXBR1BTX+CTC=0

以下の場合、

a = [-3 2;1 1]
b = [0 ; 1]
c = [1 -1]
r = 3
[x,l,g] = care(a,b,c'*c,r)

以下の解が出力されます。

x

x =
    0.5895    1.8216
    1.8216    8.8188

aa-b*g の固有値を比較すると、この解が確かに安定であることを確認できます。

[eig(a)   eig(a-b*g)]
 
ans =
   -3.4495   -3.5026
    1.4495   -1.4370

最後に、変数 l が、閉ループ固有値 eig(a-b*g) を格納することに注意してください。

l

l =
   -3.5026
   -1.4370

例 2

H のようなリカッチ方程式の解

H のようなリカッチ (Ricatti) 方程式を解くには、

ATX+XA+X(γ2B1B1TB2B2T)X+CTC=0

care 形式で次のように書き直します。

ATX+XAX[B1,B2]B[γ2I00I]R1[B1TB2T]X+CTC=0

これで、次のようにして安定化解 X を計算できるようになります。

B = [B1 , B2]
m1 = size(B1,2)
m2 = size(B2,2)
R = [-g^2*eye(m1) zeros(m1,m2) ; zeros(m2,m1) eye(m2)]

X = care(A,B,C'*C,R)

制限

(A,B) のペアは可安定 (つまり、不安定なモードがすべて制御可能) でなければなりません。さらに、関連付けられたハミルトニアン行列またはハミルトニアン ペンシルは、虚軸上に固有値をもつことはできません。これが成立するための十分条件は、S=0 かつR>0 の場合に (Q,A) が検出可能であるか、次が成り立つ場合です。

[QSSTR]>0

アルゴリズム

関数 care は、[1] に記述されているアルゴリズムを実装しています。R が良い条件 (well-conditioned) であり、かつ E=I であれば、これはハミルトニアン行列に対して有効です。それ以外の場合は、拡張されたハミルトニアン ペンシルと QZ アルゴリズムを使用します。

参考文献

[1] Arnold, W.F., III and A.J. Laub, "Generalized Eigenproblem Algorithms and Software for Algebraic Riccati Equations," Proc. IEEE®, 72 (1984), pp. 1746-1754

バージョン履歴

R2006a より前に導入

すべて折りたたむ

R2019a: care は非推奨

R2019a からは、icare コマンドを使用して連続時間リカッチ方程式を解きます。このアプローチでは、優れたスケーリングによって精度が向上し、care と比べて R が悪条件の場合に K の計算がより正確になります。さらに、icare には、リカッチ方程式の陰的な解のデータを収集する、オプションの info 構造体が含まれます。

次の表に、care の一般的な用法と、代わりに icare を使用するためにコードを更新する方法を示します。

非推奨推奨

[X,L,G] = care(A,B,Q,R,S,E)

[X,K,L] = icare(A,B,Q,R,S,E,G) は、連続時間代数リカッチ方程式の安定化解 X、状態フィードバック ゲイン K、および閉ループ固有値 L を計算します。詳細については、icare を参照してください。

[X,L,G,report] = care(A,B,Q,R,S,E)

[X,K,L,info] = icare(A,B,Q,R,S,E,G) は、連続時間代数リカッチ方程式の安定化解 X、状態フィードバック ゲイン K、閉ループ固有値 L を計算します。info 構造体には陰的な解のデータが含まれます。詳細については、icare を参照してください。

現時点で care を削除する予定はありません。

参考