pythonでバネマスダンパ系のシミュレーションを行い、グラフを描画します。今回はオイラー法を用います。
リンク
バネマス系
まずバネの運動方程式を立てます。加速度は \(a=\ddot{x}\) なので \(m\ddot{x} = f,f=-kx \) より、
$$m\ddot{x} +kx=0$$
これを\(v=\dot{x}\)を用いて1階の微分方程式で表すと
\[ \begin{eqnarray} \left\{ \begin{array}{l} \dot{x}=v \\ \dot{v}=-\frac{k}{m}x \end{array} \right. \end{eqnarray} \]
となる。時間がdtだけ進めばxの値はdt\(\times\dot{x}\), vの値はdt\(\times\dot{v}\) だけ増加する。つまり、tをdtずつ増加させたとき、xを dt\(\times v\) 、vを dt\(\times(-\frac{k}{m})x\) ずつ増加させれば良い。
import matplotlib.pyplot as plt
x_list = []
t_list = []
dt = 0.1
m = 1.0 #質量[kg]
k = 0.3 #ばね定数[N/m]
x = 1 #初期位置[m]
v = 0 #初速度[m/s]
for i in range(int(50/dt)):
t = i*dt #tをdtずつ増加
x += dt*(v) #xをdxずつ増加
v += dt*(-k/m*x) #vをdvずつ増加
x_list.append(x)
t_list.append(t)
plt.plot(t_list,x_list,color ='b')
plt.title('mass_spring')
plt.xlabel('t[s]')
plt.ylabel('x[m]')
plt.show()

バネマスダンパ系
運動方程式は
$$m\ddot{x} + c\dot{x} + kx=0$$
これを\(v=\dot{x}\)を用いて1階の微分方程式で表すと
\[ \begin{eqnarray} \left\{ \begin{array}{l} \dot{x}=v \\ \dot{v}=-\frac{1}{m}(kx + cv) \end{array} \right. \end{eqnarray} \]
import matplotlib.pyplot as plt
x_list = []
t_list = []
dt = 0.1
m = 1.0 #質量[kg]
k = 0.3 #ばね定数[N/m]
c = 0.1 #ダンパの減衰係数[N・s/s]
x = 1 #初期位置
v = 0 #初速度
for i in range(int(50/dt)):
t = i*dt #tをdtずつ増加
x += dt*(v) #xをdxずつ増加
v += dt/m*(-k*x -c*v) #vをdvずつ増加
x_list.append(x)
t_list.append(t)
plt.plot(t_list,x_list,color ='b')
plt.title('mass_spring_damper')
plt.xlabel('t[s]')
plt.ylabel('x[m]')
plt.show()

リンク

コメント