next up previous contents index
Next: 線形システムの伝達関数行列 Up: 例題 Previous: 連続系リカッティ方程式

   
離散系リカッティ方程式

離散時間の線形システムのリカッティ方程式の解を繰り返しにより 求めるプログラムの例をに示す。実際の問題には一般化固有値問題に 帰着する方法が有効である。 解行列Pと一時変数行列PPは,行列Aと同じ大きさの単位行列で 初期化される。 解行列Pと1回前の解行列PPの差のフロベニウス・ノルムが epsより小さくなるまで離散時間系のリカッティ方程式の計算が 繰り返される。以下は,リストの説明である。  



   Func void main()
   {
     Matrix A, B, C, Q, R, P, PP;
     Matrix DRiccati();
05:     
     A = [[0 1][-3, 4]];       // システム行列
     B = [0 1]';
     C = [-2, 1];
     Q = C'*C;
10:  R = I(1);
   
     P = DRiccati(A, B, Q, R); // DRiccati()を呼ぶ
     print P;                  // Pを表示
   }
15:
   Func Matrix DRiccati(A, B, Q, R)
     Matrix A, B, Q, R;
   {
     Matrix P, PP;
20:  Real eps;
   
     P = PP = I(A);          // 解 P の初期値
     eps = 1.0E-7;
   
25:  // 解が収束するまで繰り返す
     while (frobnorm(P - PP) > eps) {
         PP = P;
         P = Q + A'*P*A - A'*P*B*(R + B'*P*B)~ * B'*P*A;
         P = (P' + P)/2.0;   // P の対称性を回復
30:  }
   
     return P;               // 解 P を返す
   }


List 2:    離散時間リカッティ方程式の解



Masanobu KOGA 平成10年8月19日