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}

と行列とベクトルの積に変換できます。

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

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-04-18
Pythonによる科学技術計算 基礎編
固定版:1.5版、リフロー版:1.2版への更新が可能になりました。
サポートページはこちら
電子書籍