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]');
線形システムとして考える
上では数値積分を用いた時刻歴応答シミュレーションにより系の特徴を把握する方法を取り扱ったが、対象を定量的・定性的に理解するためには、線形システムとしての一般的な考え方が有効である。
線形システムに関連するコマンド
- tf; ss; tf2ss; ss2tf; step; bode; eig; damp;
- 1自由度系(力入力)を対象に、入力:力、出力:変位とした伝達関数を求め、上のコマンドを用いて特性を評価せよ。
- 1自由度系(変位入力)を対象に、入力:変位、出力:変位とした伝達関数を求め、上のコマンドを用いて特性を評価せよ。
1/4車体モデルによる時系列シミュレーション
上に示した1自由度系のサンプルプログラムをベースに、以下をパラメータとした1/4車体モデルの運動を検討する。時刻t=1.0(s)のときに、20mmの変位入力がステップ状に加わった際の系の応答を求めよ。
- ばね上質量の変位の応答を示せ
- ばね上質量の加速度の応答を示せ
m1 = 30.0; m2 = 300.0;
c2 = 2500;
k1 = 180000; k2 = 30000;
補足説明: MATLABによる関数定義 (詳しい人はスキップしてください)
実際のシミュレーションでは、ユーザ定義関数を作る機会が多いと思います。ユーザ定義関数の作り方は、
- 関数を定義するファイルを作成しておく
- 一つの関数は、function から始まり、end で終わる
- 関数名と引数および戻り値を一行目に記載する (C言語とかと同じですね)
- カレントディレクトリに関数を定義したファイルを置く 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