next up previous contents index
Next: 離散系リカッティ方程式 Up: 例題 Previous: 例題

   
連続系リカッティ方程式

連続時間の線形システムのリカッティ方程式の解法は ハミルトン行列の固有値問題に帰着され[6], そのプログラムの例を以下に示す。 関数eigvec()は固有値の実部の大きさの降順 に固有ベクトルを並べて返すので, 20-21行目は,安定な固有値に対応する固有ベクトルを取り出す。 以下は,リストの説明である。  

   

   Func void main()
   {
     Matrix A, B, Q, R, P;     // 局所変数の宣言
     Matrix CRiccati();        // 関数の宣言
05:
     read A, B, Q, R;          // 行列エディタを起動
     P = CRiccati(A, B, Q, R); // CRiccati()を呼ぶ
     print P;                  // Pを表示
   }
10:
   Func Matrix CRiccati(A, B, Q, R)
     Matrix A, B, Q, R;
   {
     Integer n;
15:  Matrix H, U, V, vec, P;

     n = Rows(A);
     H = [[ A  , -B*R~*B#]      // ハミルトン行列
          [-Q  , -A#     ]];
20:   
     vec = eigvec(H);           // H の固有ベクトル
     U = vec(    1:n, n+1:2*n); // 安定な固有値に対応
     V = vec(n+1:2*n, n+1:2*n); // する固有ベクトルを
                                // 取り出す
25:  if (isreal(A) && isreal(B) &&
         isreal(Q) && isreal(R)) {
         P = Re(V*U~);
     } else {
         P = V*U~;
30:  }
   
     return P;
   }


List 1:    連続時間の線形システムのリカッティ方程式の解



Masanobu KOGA 平成10年8月19日