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
を計算します。
関数 care
は、ゲイン行列 も返します。
[X,L,G] = care(A,B,Q,R,S,E)
は、より一般的なリカッチ (Riccati) 方程式を解きます
R
、S
、および E
が省略されると、既定値 R=I
、S=0
、および E=I
が設定されます。解 X
とともに、care
はゲイン行列 と閉ループ固有値のベクトル 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 つの行列 X1
、X2
と、X = D*(X2/X1)*D
であるような対角のスケーリング行列 D
を返します。
ベクトル L は、閉ループ固有値を含みます。関連するハミルトニアン行列が虚軸上に固有値をもつ場合、すべての出力は空になります。
例
例 1
代数リカッチ (Riccati) 方程式の解
以下の場合、
リカッチ (Riccati) 方程式を解くことができます。
以下の場合、
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
a
と a-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
のようなリカッチ方程式の解
のようなリカッチ (Ricatti) 方程式を解くには、
care
形式で次のように書き直します。
これで、次のようにして安定化解 を計算できるようになります。
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)
制限
のペアは可安定 (つまり、不安定なモードがすべて制御可能) でなければなりません。さらに、関連付けられたハミルトニアン行列またはハミルトニアン ペンシルは、虚軸上に固有値をもつことはできません。これが成立するための十分条件は、 かつ の場合に が検出可能であるか、次が成り立つ場合です。
アルゴリズム
関数 care
は、[1] に記述されているアルゴリズムを実装しています。R が良い条件 (well-conditioned) であり、かつ であれば、これはハミルトニアン行列に対して有効です。それ以外の場合は、拡張されたハミルトニアン ペンシルと 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