next up previous contents
Next: プログラミングにおける問題点と対策 Up: 準備 Previous: 現象のモデル化の文献案内

運動方程式とプログラミング言語の選択

モデルを記述するプログラミング言語をどうするか.これはモデル自体がある程 度まで最適な言語を決定してしまう.今回は,常微分方程式で記述されるモデル であるから,使われている数学の抽象性を素直に表現できる言語が望ましい.どの程度の抽象 能力が要求されるかを見てみよう.

力学のラグランジアン形式を用いて剛体の運動を記述するためには,剛体の方向 を指定する3つの独立なパラメータが必要である.文献には,このようなパラメー タの組がいくつも述べられているが,もっと普通に用いられ,しかも有用なのは Eulerの角 $ \alpha,\beta,\gamma$である.Eulerの角を用いた剛体の自由運動, すなわち無重力状態での回転運動の方程式を,以下に述べる[2].

$\displaystyle \frac{d\alpha}{dt}$ $\displaystyle = \frac{\sin\gamma}{\sin\beta}\omega_a + \frac{\cos\gamma}{\sin\beta}\omega_b$ (1.1)
$\displaystyle \frac{d\beta}{dt}$ $\displaystyle = \omega_a\cos\gamma-\omega_b\sin\gamma$ (1.2)
$\displaystyle \frac{d\gamma}{dt}$ $\displaystyle = -\frac{\cos\beta\sin\gamma}{\sin\beta}\omega_a-\frac{\cos\beta \sin\gamma}{\sin\beta}\omega_b + \omega_c$ (1.3)

次に,静止直交座標系から回転座標系への変換行列がEulerの角でどうのように表される か示しておこう.

$\displaystyle \mathbf A=\begin{pmatrix}
\cos\alpha\cos\gamma-\sin\alpha\cos\bet...
...\gamma \\
\sin\alpha\sin\beta & -\cos\alpha\sin\beta & \cos\beta
\end{pmatrix}$

主軸回りの慣性モーメントは

$\displaystyle \begin{pmatrix}
I_a\\
I_b\\
I_c
\end{pmatrix}=\begin{pmatrix}
2...
...elta +K\cos^2\delta)\\
2(J\cos^2\delta +(K+M\ell^2)\sin^2\delta)
\end{pmatrix}$

である.ペンチは剛体の二つのパーツからなり,これが要で固定されている.$ M$は各パー ツの質量,$ \ell$は各パーツの重心と要との距離である.また$ I,J,K$は各パー ツの慣性モーメントを表す.角度$ \delta$はペンチの開き角の半分で$ 46^\circ$ に固定してある.

角速度ベクトル $ \boldsymbol \omega$と角運動量ベクトル$ \mathbf L$との関係は $ \mathbf L=\mathbf I\cdot\boldsymbol \omega$である.ここで$ \mathbf I$は 慣性テンソルである.したがって

$\displaystyle \mathbf L=\begin{pmatrix}
L_x\\
L_y\\
L_z
\end{pmatrix}$

とおけば, $ \boldsymbol\omega={\mathbf I}^{-1}\cdot \mathbf A\cdot \mathbf L$と表され る.ここで$ \mathbf L$は運動のあいだじゅう初期条件から決まる一定の値をも つ.

運動方程式をベクトル形式で表現するためにベクトルとその内積が必要で ある.勿論座標系の変換行列のためには行列とその逆行列が定義されなければな らない.このためにはオブジェクト指向言語を使ったほうが,そうでない言語を 使うよりずっと簡潔にプログラムができる.そこで C++ で書くことにした.特 にC++の演算子の多重定義を使えばベクトルや,行列を表現しやすく,使いやす いものにすることができる.


Kawabata Shigetoku
平成15年4月28日