メインコンテンツ

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

care

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

care は推奨されません。代わりに icare を使用してください。詳細については、バージョン履歴を参照してください。

説明

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

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

X とともに、care はゲイン行列 G と閉ループ固有値のベクトル L を返します。

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

ATX+XAXBBTX+Q=0

[X,L,G,report] = care(___) は、診断レポートも返します。

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

[X1,X2,D,L] = care(___,'factor') は、リカッチ方程式の因数分解した解を返します。

すべて折りたたむ

この例では、次のリカッチ方程式を解く方法を示します。

ATX+XAXBR1BTX+CTC=0

以下の場合、

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

行列を定義し、方程式を解きます。

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

    0.5895    1.8216
    1.8216    8.8188


l =

   -1.4370
   -3.5026


g =

    0.6072    2.9396

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

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

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

この例では、H のようなリカッチ方程式を解く方法を示します。

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)

入力引数

すべて折りたたむ

入力行列。行列として指定します。RS、および E を省略すると、関数は既定値の R = IS = 0、および E = I を使用します。

出力引数

すべて折りたたむ

連続時間代数リカッチ方程式の解。行列として返されます。

関連するハミルトニアン行列が虚軸上に固有値をもつ場合、careX[] を返します。

閉ループ固有値。行列として返されます。

閉ループ固有値 L は次のように計算されます。

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

状態フィードバック ゲイン。行列として返されます。

状態フィードバック ゲイン G は次のように計算されます。

G=R1(BTXE+ST)

関連するハミルトニアン行列が虚軸上に固有値をもつ場合、careG[] を返します。

診断レポート。次のいずれかの値をもつスカラーとして返されます。

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

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

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

因数分解した解の行列。行列として返されます。関数は、X1 および X2 と、X = D(X1/X2)D であるような対角のスケーリング行列 D を返します。

関連するハミルトニアン行列が虚軸上に固有値をもつ場合、careX1X2、および D を空として返します。

制限

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

[QSSTR]>0

アルゴリズム

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

参照

[1] Arnold, W.F., and A.J. Laub. “Generalized Eigenproblem Algorithms and Software for Algebraic Riccati Equations.” Proceedings of the IEEE 72, no. 12 (1984): 1746–54. https://doi.org/10.1109/PROC.1984.13083.

バージョン履歴

R2006a より前に導入

すべて折りたたむ

参考