運動方程式の簡単な数値計算
物体に働く力がどのようなものかわかれば運動方程式によって、その物体の加速度を求めることができる。 たとえば、その運動が等加速度運動であれば、等加速度運動の式を使って、物体の速度や位置を計算することもできる。 したがって、基本的には加速度がわかれば物体の運動がわかったと考えてよい。 しかし、実際には加速度が少し複雑な形をしていると、加速度の式から運動状態を直感的にとらえるのは難しくなる。(解析的に解くことができない場合もある。) このようなとき、数値的に運動の様子を計算することも行われる。 ここでは、もっとも簡単な方法で運動を数値的に計算してみることにする。
【目的】
物体の加速度は物体の1秒あたりの速度変化を表わしている。 したがって、ごく短い時間Δt秒の間加速度はほぼ一定と考えられるとすれば、この間の物体の速度変化はであり、現在の速度がわかれば、Δt秒後の物体の速度は、と近似できる。
同じように、速度は物体の1秒あたりの位置の変化を表わすので、ごく短い時間Δt秒の間速度がほぼ一定と考えられるとすれば、この間の位置の変化はである。 したがって、現在の物体の位置にをたせば、Δt秒後の物体の位置が求まる。
【方法】
図のように物体がA点からB点まで動いたとする。
このとき、A点での物体の速度を、B点での速度をとすると物体の変位はそのどちらでもなく、中間の速度(中央時刻の速度と呼ぶことにする)に時間をかけたものに近いと考えられる。 そこで、A点での加速度を求め、それから中央時刻の速度を求め、それを使って物体をB点に動かし、B点での加速度を求める… というプログラムを使うことにする。 計算機はベクトルをそのまま計算することはできないので、実際はx成分とy成分に分けて計算する。 ここではx成分について説明する。
具体的には、プログラムでは(どの言語でも基本的には同じ)
@運動方程式(物理法則)から加速度のx成分を求め、axに代入する。
ax=(物理法則から計算した加速度のx成分)
A現在の速度のx成分axにaxと時間間隔DTとかけたものをたして、その結果をもとのvxに代入する。(等加速度運動と近似して計算する。)
vx = ax * DT + vx; 注、一般に、*は×を表わす。
このとき、最初だけDTを半分(例えば計算に使う時間間隔dtをdt=0.01にするとすれば、DT = 0.005)にしておき、速度の時間を半分だけずらす。
B現在の位置xにvxとdt(例えば0.01)をかけたものをたして、その結果をxに代入する。
x = vx * dt + x;
vxが最初半分ずれた時刻で計算してあるので、速度は常に中央時刻の速度になる。
C現在の時刻tにdtをたしたものをtに代入する。(時刻をdtすすめる)
t += dt; 注、t = t + dtをこのように書く。
D計算結果を表示して、最初に既に半分ずれているので、DT = dt; とし、これ以上ずれないようにした上で、@に戻る。
という手順で計算をすすめる。