必要なモジュールの import
from sympy.abc import *
from sympy import *
init_printing()
SymPy におけるベクトルの表記
Matrix()
を使ってベクトルを表記します。
# ベクトルの成分
var('a1:4, b1:4, c1:4');
a = Matrix([a1, a2, a3])
b = Matrix([b1, b2, b3])
c = Matrix([c1, c2, c3])
ベクトルの演算
足算,引き算
ベクトルの足算引き算をしてみると,成分同士の足算引き算になっていることがわかります。
a + b
a - b
ベクトルの定数倍
ベクトルの定数倍は,各成分をそれぞれ定数倍したものになっています。
C * a
ベクトルの内積
ベクトルの内積は $\boldsymbol{a}\cdot\boldsymbol{b} = $a.dot(b)
です。
a.dot(b)
ベクトルの大きさ
ベクトル $\boldsymbol{a}$ の大きさ $|\boldsymbol{a}|$ は自分自身との内積の平方根として定義されます。
$$|\boldsymbol{a}| \equiv \sqrt{\boldsymbol{a}\cdot\boldsymbol{a}}$$
ベクトルの大きさを返す関数 norm()
を以下のように定義します。
def norm(v):
return sqrt(v.dot(v))
今定義した norm()
を使って,ベクトル $\boldsymbol{a}$ の大きさ $|\boldsymbol{a}|$ を計算してみます。
norm(a)
ベクトルの外積
ベクトルの外積は $\boldsymbol{a}\times\boldsymbol{b} = $a.cross(b)
です。
a.cross(b)
外積は「反交換」
$\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}$ となることを示せばいいです。
a.cross(b) + b.cross(a)
ベクトルの三重積
スカラー三重積
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$ を示してみます。
a.dot(b.cross(c)) - b.dot(c.cross(a))
# カッコをはずして展開する
expand(_)
同様にして,$\boldsymbol{b} \cdot (\boldsymbol{c}\times\boldsymbol{a}) -\boldsymbol{c} \cdot (\boldsymbol{a}\times\boldsymbol{b}) = 0$ を示してみます。
b.dot(c.cross(a)) - c.dot(a.cross(b))
expand(_)
ベクトル三重積
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} $$
一挙に証明するには,
a.cross(b.cross(c)) - (a.dot(c) * b - a.dot(b) * c)
expand(_)