Return to ベクトルの演算

参考:SymPy でベクトルの演算

必要なモジュールの import

In [1]:
from sympy.abc import *
from sympy import *

init_printing()

SymPy におけるベクトルの表記

Matrix() を使ってベクトルを表記します。

In [2]:
# ベクトルの成分
var('a1:4, b1:4, c1:4');
In [3]:
a = Matrix([a1, a2, a3])
b = Matrix([b1, b2, b3])
c = Matrix([c1, c2, c3])

ベクトルの演算

足算,引き算

ベクトルの足算引き算をしてみると,成分同士の足算引き算になっていることがわかります。

In [4]:
a + b
Out[4]:
$\displaystyle \left[\begin{matrix}a_{1} + b_{1}\\a_{2} + b_{2}\\a_{3} + b_{3}\end{matrix}\right]$
In [5]:
a - b
Out[5]:
$\displaystyle \left[\begin{matrix}a_{1} – b_{1}\\a_{2} – b_{2}\\a_{3} – b_{3}\end{matrix}\right]$

ベクトルの定数倍

ベクトルの定数倍は,各成分をそれぞれ定数倍したものになっています。

In [6]:
C * a
Out[6]:
$\displaystyle \left[\begin{matrix}C a_{1}\\C a_{2}\\C a_{3}\end{matrix}\right]$

ベクトルの内積

ベクトルの内積は $\boldsymbol{a}\cdot\boldsymbol{b} = $a.dot(b) です。

In [7]:
a.dot(b)
Out[7]:
$\displaystyle a_{1} b_{1} + a_{2} b_{2} + a_{3} b_{3}$

ベクトルの大きさ

ベクトル $\boldsymbol{a}$ の大きさ $|\boldsymbol{a}|$ は自分自身との内積の平方根として定義されます。
$$|\boldsymbol{a}| \equiv \sqrt{\boldsymbol{a}\cdot\boldsymbol{a}}$$

ベクトルの大きさを返す関数 norm() を以下のように定義します。

In [8]:
def norm(v):
    return sqrt(v.dot(v))

今定義した norm() を使って,ベクトル $\boldsymbol{a}$ の大きさ $|\boldsymbol{a}|$ を計算してみます。

In [9]:
norm(a)
Out[9]:
$\displaystyle \sqrt{a_{1}^{2} + a_{2}^{2} + a_{3}^{2}}$

ベクトルの外積

ベクトルの外積は $\boldsymbol{a}\times\boldsymbol{b} = $a.cross(b) です。

In [10]:
a.cross(b)
Out[10]:
$\displaystyle \left[\begin{matrix}a_{2} b_{3} – a_{3} b_{2}\\- a_{1} b_{3} + a_{3} b_{1}\\a_{1} b_{2} – a_{2} b_{1}\end{matrix}\right]$

外積は「反交換」

$\boldsymbol{a}\times\boldsymbol{b} {\color{red}{\neq}} \boldsymbol{b}\times\boldsymbol{a}$ であること,具体的には以下のように「反交換」であることを確認します。
$$\boldsymbol{a}\times\boldsymbol{b} = – \boldsymbol{b}\times\boldsymbol{a}$$

$\boldsymbol{a}\times\boldsymbol{b} + \boldsymbol{b}\times\boldsymbol{a} = \boldsymbol{0}$ となることを示せばいいです。

In [11]:
a.cross(b) + b.cross(a)
Out[11]:
$\displaystyle \left[\begin{matrix}0\\0\\0\end{matrix}\right]$

ベクトルの三重積

スカラー三重積

3つのベクトル $\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c}$ によるスカラー三重積は $\boldsymbol{a} \cdot (\boldsymbol{b}\times\boldsymbol{c})$ であり,これは結局はスカラーとなります。スカラー三重積には,以下のような公式があります。

$$\boldsymbol{a} \cdot (\boldsymbol{b}\times\boldsymbol{c})
= \boldsymbol{b} \cdot (\boldsymbol{c}\times\boldsymbol{a})
= \boldsymbol{c} \cdot (\boldsymbol{a}\times\boldsymbol{b}) $$

$\boldsymbol{a} \cdot (\boldsymbol{b}\times\boldsymbol{c})
= \boldsymbol{b} \cdot (\boldsymbol{c}\times\boldsymbol{a})$ つまり,
$\boldsymbol{a} \cdot (\boldsymbol{b}\times\boldsymbol{c}) -\boldsymbol{b} \cdot (\boldsymbol{c}\times\boldsymbol{a}) = 0$ を示してみます。

In [12]:
a.dot(b.cross(c)) - b.dot(c.cross(a))
# カッコをはずして展開する
expand(_)
Out[12]:
$\displaystyle \left[\begin{matrix}0\\0\\0\end{matrix}\right]$

同様にして,$\boldsymbol{b} \cdot (\boldsymbol{c}\times\boldsymbol{a}) -\boldsymbol{c} \cdot (\boldsymbol{a}\times\boldsymbol{b}) = 0$ を示してみます。

In [13]:
b.dot(c.cross(a)) - c.dot(a.cross(b))
Out[13]:
$\displaystyle b_{1} \left(- a_{2} c_{3} + a_{3} c_{2}\right) + b_{2} \left(a_{1} c_{3} – a_{3} c_{1}\right) + b_{3} \left(- a_{1} c_{2} + a_{2} c_{1}\right) – c_{1} \left(a_{2} b_{3} – a_{3} b_{2}\right) – c_{2} \left(- a_{1} b_{3} + a_{3} b_{1}\right) – c_{3} \left(a_{1} b_{2} – a_{2} b_{1}\right)$
In [14]:
expand(_)
Out[14]:
$\displaystyle 0$

ベクトル三重積

3つのベクトル $\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{c}$ によるベクトル三重積は $\boldsymbol{a} \times (\boldsymbol{b}\times\boldsymbol{c})$ であり,これは結局はベクトルをつくります。ベクトル三重積には,以下のような公式があります。

$$\boldsymbol{a} \times (\boldsymbol{b}\times\boldsymbol{c})
= (\boldsymbol{a}\cdot\boldsymbol{c})\,\boldsymbol{b}
-(\boldsymbol{a}\cdot\boldsymbol{b})\,\boldsymbol{c} $$

一挙に証明するには,

In [15]:
a.cross(b.cross(c)) - (a.dot(c) * b - a.dot(b) * c)
Out[15]:
$\displaystyle \left[\begin{matrix}a_{2} \left(b_{1} c_{2} – b_{2} c_{1}\right) – a_{3} \left(- b_{1} c_{3} + b_{3} c_{1}\right) – b_{1} \left(a_{1} c_{1} + a_{2} c_{2} + a_{3} c_{3}\right) + c_{1} \left(a_{1} b_{1} + a_{2} b_{2} + a_{3} b_{3}\right)\\- a_{1} \left(b_{1} c_{2} – b_{2} c_{1}\right) + a_{3} \left(b_{2} c_{3} – b_{3} c_{2}\right) – b_{2} \left(a_{1} c_{1} + a_{2} c_{2} + a_{3} c_{3}\right) + c_{2} \left(a_{1} b_{1} + a_{2} b_{2} + a_{3} b_{3}\right)\\a_{1} \left(- b_{1} c_{3} + b_{3} c_{1}\right) – a_{2} \left(b_{2} c_{3} – b_{3} c_{2}\right) – b_{3} \left(a_{1} c_{1} + a_{2} c_{2} + a_{3} c_{3}\right) + c_{3} \left(a_{1} b_{1} + a_{2} b_{2} + a_{3} b_{3}\right)\end{matrix}\right]$
In [16]:
expand(_)
Out[16]:
$\displaystyle \left[\begin{matrix}0\\0\\0\end{matrix}\right]$