21/Apr/2025 MATLABを用いたシミュレーション・数値積分

ode45関数を用いた1自由度系シミュレーション

運動方程式は微分方程式です。微分方程式をコンピュータを用いて解く際には、数値積分を用います。
MATLAB では、様々なアルゴリズムの数値積分を実行することが可能です。

微分方程式を記述したファイル (func_1dof.m)

function xdot = func_1dof(t,x)
% function for 1DOF Simulation

xdot=zeros(2,1);

% System Definition
m=1; c=1; k=10;

% Force Input
% u=sin(10*t);
u=0;

A=[0 1; -k/m -c/m];
B=[0; 1/m];

xdot=A*x+B*u;

end

実行するためのスクリプトファイル (sim_1dof.m)

x0 =[1;0];
time =[0:0.01:10];

% [t,x] = ode45(@func_1dof,time,x0);
[t,x] = ode45(@(t,x) func_1dof(t,x),time,x0);

% グラフのプロット
clf;
subplot(2,1,1)
plot(t,x(:,1));
% xlabel('time[s]');
ylabel('Displacement[m]');

subplot(2,1,2)
plot(t,x(:,2));
xlabel('time[s]');
ylabel('Velocity[m/s]');

線形システムとして考える

上では数値積分を用いた時刻歴応答シミュレーションにより系の特徴を把握する方法を取り扱ったが、対象を定量的・定性的に理解するためには、線形システムとしての一般的な考え方が有効である。

線形システムに関連するコマンド

  1. 1自由度系(力入力)を対象に、入力:力、出力:変位とした伝達関数を求め、上のコマンドを用いて特性を評価せよ。
  2. 1自由度系(変位入力)を対象に、入力:変位、出力:変位とした伝達関数を求め、上のコマンドを用いて特性を評価せよ。

1/4車体モデルによる時系列シミュレーション

上に示した1自由度系のサンプルプログラムをベースに、以下をパラメータとした1/4車体モデルの運動を検討する。時刻t=1.0(s)のときに、20mmの変位入力がステップ状に加わった際の系の応答を求めよ。
  1. ばね上質量の変位の応答を示せ
  2. ばね上質量の加速度の応答を示せ
m1 = 30.0;   m2 = 300.0;
             c2 = 2500;
k1 = 180000; k2 = 30000;

補足説明: MATLABによる関数定義 (詳しい人はスキップしてください)

実際のシミュレーションでは、ユーザ定義関数を作る機会が多いと思います。ユーザ定義関数の作り方は、
  1. 関数を定義するファイルを作成しておく
  2. カレントディレクトリに関数を定義したファイルを置く or 関数を定義したファイルの場所にパスを通しておく
といった手順になります。

例1 2倍するだけの関数

ファイル名: func1.m
    function ans = func1(x)
        ans = 2*x;
    end
    
実行方法
    
    >> func1(2)
     ans  =
    
        4
    

例2 二つの関数を一つのファイルに定義

    function ans = func1(x)
        ans = 2*func2(x);
    end
    
    function ans=func2(x)
        ans = 2*x;
    end