pythonでバネマスダンパ系のシミュレーション(オイラー法)

スポンサーリンク
スポンサーリンク

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()
バネダンパ

コメント