next up previous contents index
Next: 謝辞 Up: 連続系システムのシミュレーション Previous: 動的フィードバック制御のシミュレーション

複雑なシステムのシミュレーション

ここでは,もっと複雑なシステムのシミュレーションを行なう方法を紹介する。 システムが複雑になると,微分方程式を記述する関数diff_eqs()や 各システムの接続関係を記述する関数link_eqs()の先頭において, 拡大された状態Xから各システムの状態を取り出す作業が複雑になる。 この作業を簡単にする関数VecCont()VecChop()の 使い方を下図に示すシステムのシミュレーションを通して説明する。    

図に示す各ブロックP,D,C,Fはプラント,プラントの不確定要素, 前置コントローラ,フィードバックコントローラを表し,各ブロックは線形状態 方程式と線形出力方程式で記述され,その係数は (Ap, Bp, Cp), (Ad, Bd, Cd), (Ac, Bc, Cc), (Af, Bf, Cf)であるとする。

 
図 17.2: 複雑なシステムのシミュレーション
¥includegraphics[width=0.8¥linewidth]{Fig/simu-system2.eps}



Matrix Ap, Bp, Cp; // 制御器のパラメータ
Matrix Ad, Bd, Cd; // 不確定要素のパラメータ
Matrix Ac, Bc, Cc; // 制御器1のパラメータ
Matrix Af, Bf, Cf; // 制御器2のパラメータ
List state_idx;    // 状態の指数のリスト
List input_idx;    // 入力の指数のリスト

Func void main()
{
  Matrix xp0, xd0, xc0, xf0, x0;
  Matrix up0, ud0, uc0, uf0, u0;
  Array TC, XC, UC;
   
  void diff_eqs(), link_eqs();
  
  read Ap, Bp, Cp <- "plant";
  read Ad, Bd, Cd <- "uncertainty";
  read Ac, Bc, Cc <- "controller-1";
  read Af, Bf, Cf <- "controller-2";
  read xp0, xd0, xc0, xf0 <- "init-states";
  read up0, ud0, uc0, uf0 <- "init-inputs";

  {x0, state_idx} = VecCont({xp0, xd0, xc0, xf0});
  {u0, input_idx} = VecCont({up0, ud0, uc0, uf0});
  {TC, XC, UC} =
     Ode45Auto(0.0, 20.0, x0, diff_eqs, link_eqs);

  print [[TC][XC][UC]] >> "cont.mat";
}




Func void diff_eqs(DX, t, X, U)
  Real t;
  Matrix X, DX, U;
{
  Matrix xp, xd, xc, xf;
  Matrix dxp, dxd, dxc, dxf;
  Matrix up, ud, uc, uf;

  {xp, xd, xc, xf} = VecChop(X, state_idx);
  {up, ud, uc, uf} = VecChop(U, input_idx);

  dxp = Ap*xp + Bp*up;
  dxd = Ad*xd + Bd*ud;
  dxc = Ac*xc + Bc*uc;
  dxf = Af*xf + Bf*uf;
  DX = [[dxp][dxd][dxc][dxf]];
}

Func void link_eqs(U, t, X)
  Real t;
  Matrix U, X;
{
  Matrix xp, xd, xc, xf;
  Matrix up, ud, uc, uf;
  Matrix yp, yd, yc, yf;

  {xp, xd, xc, xf} = VecChop(X, state_idx);

  yp = Ap*xp;
  yd = Ad*xd;
  yc = Ac*xc;
  yf = Af*xf;

  up = yc - yf;
  ud = up;
  uc = u;
  uf = yp + yd;
  U = [[up][ud][uc][uf]]';
}


List 8:    複雑なシステムのシミュレーション


Masanobu KOGA 平成10年8月19日