≪スタイルシートを使用しています≫
[ トップページ ] > [ tmd.mm ]

tmd.mm

制振時と非制振時における波形計算で,同調調和減衰器(TMD)の制振効果を比較するMaTXプログラムです.
なお,本プログラムは,MaTX公式サイトMaTXユーザーズマニュアル例題プログラムを参考にしています.

グラフは,gnuplotにより以下のように出力されます.緑線が制振なしの場合の変位波形,青線が制振ありの場合の変位波形です.


// tmd.mm

Matrix Ap, bp, cp;     // 制御対象のパラメータ
Matrix As, bs, cs;     // 制御対象(非制御時)のパラメータ
Real f_s, d_s, m_s, f_d, d_d, m_d;

Func void init_params()
{
  Matrix MM, CC, KK;

  f_s=2*PI/2.70;
  d_s=0.0005;
  m_s=1200;
  f_d=2*PI/2.72;
  d_d=0.0660;
  m_d=15.4;
  
  MM = [[m_s, 0]
        [0, m_d]];
  CC = [[2*m_s*d_s*f_s+2*m_d*d_d*f_d, -2*m_d*d_d*f_d]
        [-2*m_d*d_d*f_d, 2*m_d*d_d*f_d]];
  KK = [[m_s*f_s^2+m_d*f_d^2, -m_d*f_d^2]
        [-m_d*f_d^2, m_d*f_d^2]];

  // 制御対象のパラメータ
  Ap = [[Z(2), diag(1.0, 1.0)]
        [-MM~*KK, -MM~*CC]];
  bp = [[Z(2)]
        [MM~]];
  cp = [[0, 0, 0, 0]
        [0, 0, 0, 0]];
  // 制御対象のパラメータ(非制御時)
  As = [[0, 1]
        [-f_s^2, -2*d_s*f_s]];
  bs = [0, 1/m_s]';
  cs = [0, 0];
}

Func void main()
{
  Matrix x0;
  Array TC, XC, UC;
   
  void diff_eqs(), link_eqs(), init_params();

  init_params();

  print Ap;
  print eigval(Ap);
  print As;
  print eigval(As);

  x0 = [0 0 0 0 0 0]';
  {TC, XC, UC} =
     Ode(0.0, 100.0, x0, diff_eqs, link_eqs, 0.1);
  mgplot(1, TC, [[XC(1:1,:)][XC(5:5,:)]], {"with TMD", "without TMD"});
  pause;
}

Func void diff_eqs(DX, t, X, UY)
  Real t;
  Matrix X, DX, UY;
{
  Matrix dxp, dxs, xp, xs, up, us;

  xp = X(1:4,1);          // 制御対象の状態
  xs = X(5:6,1);          // 制御対象の状態(非制御時)
  up = UY(1:2,1);         // 制御対象への入力
  us = UY(3:3,1);         // 制御対象への入力(非制御時)

  dxp = Ap*xp + bp*up;    // 制御対象の状態方程式
  dxs = As*xs + bs*us;    // 制御対象の状態方程式(非制御時)

  DX = [[dxp][dxs]];
}

Func void link_eqs(UY, t, X)
  Real t;
  Matrix UY, X;
{
  Matrix xp, up, yp, xs, us, ys, vp, vs;
  Real noise;

  xp = X(1:4,1);          // 制御対象の状態
  xs = X(5:6,1);          // 制御対象の状態(非制御時)

  noise = (rand() - 0.5)*2;

  vp = [noise 0]';        // 外乱
  vs = [noise];
  yp = cp*xp;             // 出力
  ys = cs*xs;
  up = yp+vp;             // 入力
  us = ys+vs;

  UY = [[up][us]];
}


Copyright (C) 2001-2002, "Su"
mailto:SNC46908@nifty.com