Python NumPy サンプルコード: 3 次元ベクトルを歪対称行列に変換

今回は機械屋さんは剛体力学の計算でよく使う、 歪対称行列 を紹介します。

3 次元ベクトルの外積

歪対称行列は英語だとだいたい skew-symmetric matrx と呼ばれていますが、日本語だと反対称行列とかチルダマトリックスとか外積パラメータなんて呼ばれたりもします。
剛体力学などでは 3 次元ベクトルの外積を、行列とベクトルの積に変換するのに使われます。

外積の計算は NumPy では cross 関数 が用意されているので、単純に外積をしたいときはこちらを使います。
しかし、歪対称行列を用いて外積を行列表現にすると、数式が単純になり、読みやすく、プログラミングするのにも便利になります。
また、歪対称行列の性質自体も利用して式変形すると、複雑な式が単純になったりします。

\(\boldsymbol{a}=[{a}_1,{a}_2,{a}_3]^T\), \(\boldsymbol{b}=[{b}_1,{b}_2,{b}_3]^T\) として、歪対称行列により 3 次元ベクトルの外積は

\begin{equation} \boldsymbol{a} \times \boldsymbol{b} = \left[\boldsymbol{a}\right]_\times \boldsymbol{b} = \begin{bmatrix} {0} & {-a_3} & {a_2}\\ {a_3} & {0} & {-a_1}\\ {-a_2} & {a_1} & {0} \end{bmatrix}\begin{bmatrix} {b_1}\\ {b_2}\\ {b_3} \end{bmatrix} \end{equation}

と行列とベクトルの積に変換できます。
上記の LaTex のコードはこちら(上記の数式を右クリックしてもコードが見られます).

\begin{equation}
       \boldsymbol{a} \times \boldsymbol{b} =
       \left[\boldsymbol{a}\right]_\times \boldsymbol{b}  =
       \begin{bmatrix}
              {0} & {-a_3} & {a_2}\\ 
              {a_3} & {0} & {-a_1}\\ 
              {-a_2} & {a_1} & {0} 
       \end{bmatrix}\begin{bmatrix} 
              {b_1}\\ 
              {b_2}\\ 
              {b_3} 
       \end{bmatrix}
\end{equation}

3 次元ベクトルを歪対称行列に変換する関数の Python のコードは以下のようになります。

# coding: utf-8
import numpy as np


def skew(p):
    #  3次元ベクトルを歪対称行列に変換
    V = np.array([[0, -p[2], p[1]],
		  [p[2], 0, -p[0]],
		  [-p[1], p[0], 0]])
    return V

まあ単純なコードですけど、剛体力学の計算には必須の関数です。
NumPy, SciPy のライブラリにはないので自前で定義する必要があります。

コメント

Comments powered by Disqus
書籍更新情報
2017-01-16
Pythonによる科学技術計算 基礎編
1.3版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストアで販売中です
Pythonによる科学技術計算 基礎編
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share