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

   
状態フィードバック制御のシミュレーション (2)

前と同じ連続システムに対して,4次のルンゲ−クッタの公式を直接使って ハイブリッド制御(きざみを小さくすれば,連続時間制御と考えることもできる) のシミュレーションを行なう。  



Func void main()
{
  Integer i, ii;
  Real dt, t, t1, t2;
  Matrix x, u, controller();
  Array X, U;
  void plant();

  t1 = 0.0;      // 初期時刻
  t2 = 5.0;      // 終端時刻
  dt = 0.01;     // きざみ
  ii = Integer((t2 - t1) / dt);

  x = [1 1 1]';  // 初期状態
  u = [0];

  X = Z(1, ii, x);
  U = Z(1, ii, u);

  t = t1;
  X(0, 0, x) = x;

  for (i = 1; i < ii; i++) {
    u = controller(t, x);
    x = rngkut4(t, x, plant, u, dt);

    U(0, i-1, u) = u;
    X(0, i, x) = x;
    t = t + dt;
  }
  u = controller(t, x);
  U(0, ii-1, u) = u;

  print [[X][U]] >> "cont.mat";
}




Func void plant(dx, t, x, u)
  Real t;
  Matrix x, dx, u;
{
  Matrix A, b;

  A = [[ 0   1   0]   // システム行列
       [ 0   0   1]
       [-2, -3, -4]];

  b = [0 0 1]';       // 入力行列

  dx = A*x + b*u;     // 状態方程式
}

Func Matrix controller(t, x)
  Real t;
  Matrix x;
{
  Matrix f, u;

  f = [-1, -1, -1];   // 状態フィードバック則
  u = f*x;
  return u;
}


List 6:    状態フィードバックのシミュレーション (2)


Masanobu KOGA 平成10年8月19日