今回のターゲット:調和振動子(単振動)の運動
前回は物体の放物運動をアニメーションにしてみました。
今回は調和振動子(単振動)の微分方程式を解いてみます。
調和振動子の微分方程式
調和振動子とは、ある点からの距離 $x$ 比例した力を受けて運動する質点のことを言います。
2つの意味で古典的な調和振動子は、理想的な”ばね”に接続された質点の運動=単振動があります。
今回は、下のようにばね定数$k$のばねに接続された、質量$m$の物体について考えます。
今、物体を $x_{0}$ mほど$x$軸の正方向に引っ張り、手を離すことを考えます。ただし、ばねが自然長の時の物体の位置を$x = 0.0$とします。
このとき、物体の運動方程式は以下のようになります。
$$
\begin{eqnarray}
\begin{array}{l}
m\cfrac{d^{2}x}{dt^{2}} = -kx\\
\end{array}
\end{eqnarray}
$$
この微分方程式は2階の常微分方程式です。しかし、pythonのodeintライブラリでは1階の微分方程式しか計算できません。そこで、以下のように1階の常微分方程式に書き直す必要があります。ただし、$v = dx/dt$です。
$$
\begin{eqnarray}
\begin{array}{l}
m\cfrac{dv}{dt} = -kx\\
\end{array}
\end{eqnarray}
$$
ここまで来たら、この微分方程式をPythonで計算をしてみます。
Pythonで計算する
コードは以下のようにしました。あまりコメントを書きすぎるのはよくないですが、初期値などの詳細はコメントアウトして記載しました。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
#諸々の条件設定
m = 1.0 #物体の重さを m = 1.0 kgとしておきます
k = 100 #ばね定数は k = 100 N/mとしておきます
ini = [0.1, 0.0]#バネを 0.1 m伸ばした状態をt=0として、初速v0 = 0.0 m/sとしておきます
t = np.arange(0, 2, 0.001) #時間は2.0秒程度に設定しておきます
#計算に必要な関数(微分方程式)の定義
#vとdvdtの計算(戻り値は速度vと加速度dvdt)
def func(cond, t, m, k):
x, v = cond
dvdt = (-k/m) * x
return [v, dvdt]
#x座標とy座標の計算 1階微分方程式を解く
#注意:odeintは微分方程式(おそらく1階微分方程式のみ?)を解くライブラリ
#引数は(解きたい微分方程式, 初期値, 変数, args = (パラメータ1, パラメータ2))
#なお、パラメータはタプルで渡して、1つしかない場合は、args = (パラメータ1, )とする
condition = odeint(func, ini, t, args = (m, k))
#以下は可視化のためにグラフを書くコード
fig, ax = plt.subplots()
#今回はx座標の時間変化を見たいので、x[:, 0]とする
#vを見たい場合はx[:, 0]とする
ax.plot(t, condition[:,0], color='crimson', label='x')
ax.set_xlabel('t [sec]')
ax.set_ylabel('x [m]')
ax.tick_params(direction='in', axis='x')
ax.tick_params(direction='in', axis='y')
ax.set_xlim(0, 2)
#ax.set_ylim(-0.001, 0.001)
plt.show()
実行結果
それでは実行結果を見てみましょう。下のようなグラフになると思います。
確かに初期位置は設定した 0.1 mになっており、三角関数のようなグラフになっています。(三角関数なんですが、微分方程式を解いたわけではないのであえて”のような”と表現しています。)
最後に
いかがでしたでしょうか。今回は調和振動子の1つである単振動を計算してみました。意外に簡単でしたが、間違った解釈がないか少々不安ですね。もし、間違いを見つけたからはぜひコメントください!
それでは今回はこのあたりで終わりにします。
他にも色々な記事があるのでぜひご覧ください。
コメント