Return to ベクトルの演算

参考:Maxima-Jupyter でベクトルの演算

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

Maxima では,リスト([] の間に成分をカンマで区切って並べたもの)で表すことができます。(matrix() を使った表し方もありますが,ここでは省略。)

Maxima のリストでは,$x$ 成分,$y$ 成分… のように指定するよりも,1番目の成分,2番目の成分… のように指定したほうが便利です。

[a1, a2, a3] のように書くと添字として表示してくれますし。

In [1]:
a: [a1, a2, a3];
b: [b1, b2, b3];
c: [c1, c2, c3];
Out[1]:
\[\tag{${\it \%o}_{1}$}\left[ a_{1} , a_{2} , a_{3} \right] \]
Out[1]:
\[\tag{${\it \%o}_{2}$}\left[ b_{1} , b_{2} , b_{3} \right] \]
Out[1]:
\[\tag{${\it \%o}_{3}$}\left[ c_{1} , c_{2} , c_{3} \right] \]

ベクトルの演算

足算,引き算

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

In [2]:
a + b;
Out[2]:
\[\tag{${\it \%o}_{4}$}\left[ b_{1}+a_{1} , b_{2}+a_{2} , b_{3}+a_{3} \right] \]
In [3]:
a - b;
Out[3]:
\[\tag{${\it \%o}_{5}$}\left[ a_{1}-b_{1} , a_{2}-b_{2} , a_{3}-b_{3} \right] \]

ベクトルの定数倍

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

In [4]:
C * a;
Out[4]:
\[\tag{${\it \%o}_{6}$}\left[ C\,a_{1} , C\,a_{2} , C\,a_{3} \right] \]

ベクトルの内積

Maxima では,ベクトルの内積は .(ドット,ピリオド)です。

In [5]:
a . b;
Out[5]:
\[\tag{${\it \%o}_{7}$}a_{3}\,b_{3}+a_{2}\,b_{2}+a_{1}\,b_{1}\]

ベクトルの大きさ

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

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

In [6]:
norm(v):= sqrt(v . v);
Out[6]:
\[\tag{${\it \%o}_{8}$}{\it norm}\left(v\right):=\sqrt{v\cdot v}\]

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

In [7]:
norm(a);
Out[7]:
\[\tag{${\it \%o}_{9}$}\sqrt{a_{3}^2+a_{2}^2+a_{1}^2}\]

ベクトルの外積

ベクトルの外積を計算する関数 cross() を以下のように,自分で定義してみます。

In [8]:
cross(u, v):=
           [u[2]*v[3] - u[3]*v[2],
            u[3]*v[1] - u[1]*v[3],
            u[1]*v[2] - u[2]*v[1]];
Out[8]:
\[\tag{${\it \%o}_{10}$}{\it cross}\left(u , v\right):=\left[ u_{2}\,v_{3}-u_{3}\,v_{2} , u_{3}\,v_{1}-u_{1}\,v_{3} , u_{1}\,v_{2}-u_{2}\,v_{1} \right] \]

$\boldsymbol{c} = \boldsymbol{a}\times \boldsymbol{b}$ の計算。

In [9]:
c: cross(a, b);
Out[9]:
\[\tag{${\it \%o}_{11}$}\left[ a_{2}\,b_{3}-a_{3}\,b_{2} , a_{3}\,b_{1}-a_{1}\,b_{3} , a_{1}\,b_{2}-a_{2}\,b_{1} \right] \]

$\boldsymbol{c}$ の成分ごとに表示させます。

In [10]:
'c[1] = c[1];
'c[2] = c[2];
'c[3] = c[3];
Out[10]:
\[\tag{${\it \%o}_{12}$}c_{1}=a_{2}\,b_{3}-a_{3}\,b_{2}\]
Out[10]:
\[\tag{${\it \%o}_{13}$}c_{2}=a_{3}\,b_{1}-a_{1}\,b_{3}\]
Out[10]:
\[\tag{${\it \%o}_{14}$}c_{3}=a_{1}\,b_{2}-a_{2}\,b_{1}\]

外積は「反交換」

$\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]:
cross(a, b) + cross(b, a);
Out[11]:
\[\tag{${\it \%o}_{15}$}\left[ 0 , 0 , 0 \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$ を示してみます。

Maxima の簡略表記で,1行で(直前の結果を)ratsimp による簡単化まで行います。

In [12]:
a . cross(b, c) - b . cross(c, a), ratsimp;
Out[12]:
\[\tag{${\it \%o}_{16}$}0\]

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

In [13]:
b . cross(c, a) - c . cross(a, b), ratsimp;
Out[13]:
\[\tag{${\it \%o}_{17}$}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 [14]:
cross(a, cross(b, c)) - ((a.c) * b - (a.b) * c), ratsimp;
Out[14]:
\[\tag{${\it \%o}_{18}$}\left[ 0 , 0 , 0 \right] \]