next up previous contents index
Next: 線形システムのボードとナイキスト周波数応答 Up: 例題 Previous: 離散系リカッティ方程式

   
線形システムの伝達関数行列

線形システム

\begin{displaymath}\begin{array}{rcl}
\dot{x} & = & A x + B u \\
y & = & C x
\end{array}\end{displaymath}

の伝達関数行列

\begin{displaymath}\begin{array}{rcl}
G(s) & = & C (s I - A)^{-1} B \\
& = & C...
...}s^{n-1} + \alpha_{n-2}s^{n-2}
+ \cdots + \alpha_0
\end{array}\end{displaymath}

ファディーブのアルゴリズムにより求める。   ファディーブのアルゴリズムにより$\Gamma_i$$\alpha_i$は,

\begin{displaymath}\begin{array}{ll}
\Gamma_{n-1} = I
& \alpha_{n-1} = - {\rm t...
...1 + \alpha_1 I
& \alpha_0 = - {\rm tr}(A\Gamma_0)/n
\end{array}\end{displaymath}

と与えられる。 ただし, ${\rm tr}(X)$は,行列Xの対角成分の和を意味する。



   Func void main()
   {
     Matrix A, B, C, G;    // 変数の宣言
     Matrix Faddeev();
05:
     read A, B, C;         // 行列の読み込み
     G = Faddeev(A, B, C); // Faddeev()を呼ぶ
     print G;              // G を表示
   }
10:
   Func Matrix Faddeev(A, B, C)
     Matrix A, B, C;
   {
     Matrix Gamma, N;
15:  Polynomial s, ch;
     Integer i, n;
   
     s = $;            // 多項式の変数
     n = Rows(A);      // システムの次数
20:
     Gamma = Z(n,A);
     ch = Polynomial(Z(1,n+1)); 
                       // 特性多項式
     ch(n) = 1.0;      // 最高次の係数は 1
25:
     Gamma(n-1,A) = I(n);
     ch(n-1) = - trace(A);
   
     for (i = n-2; i >= 0; i--) {
30:      Gamma(i,A) = A*Gamma(i+1,A) + ch(i+1)*I(n);
         ch(i) = - trace(A*Gamma(i,A))/(n - i);
     }
   
     N = Z(Rows(C), Cols(B));   
35:  for (i = 0; i < n; i++) {
         N = N + C*Gamma(i,A)*B * s^i;
     }
   
     return N/ch;      // 伝達関数を返す
40:}


List 3:    ファディーブのアルゴリズムによる伝達関数の計算



Masanobu KOGA 平成10年8月19日