pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

Maximaでベクトル解析その1(内積、外積、それらの公式)

数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。

今回はMaximaを使ってベクトル解析をしてみたいと思います。

ベクトルの内積外積を定義し、その性質やいくつかの公式をみてみます。

Maximaのごく基本的な使い方については以下の記事を参照してください:

pianofisica.hatenablog.com



ベクトルの入力

ベクトル

 \displaystyle{\vec{A}=\left(\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right) \qquad \vec{B}=\left(\begin{array}{c} B_x \\ B_y \\ B_z \end{array}\right) \qquad \vec{C}=\left(\begin{array}{c} C_x \\ C_y \\ C_z \end{array}\right)}

Maximaに入力するには

A:matrix([Ax],[Ay],[Az]);
B:matrix([Bx],[By],[Bz]);
C:matrix([Cx],[Cy],[Cz]);

とします。あるいは組み込みパッケージ"eigen"を読み込んで

/* load(eigen)$ */
/* A:columnvector([Ax, Ay, Az])$ */

として入力することもできます。

以下では、前者の方法で入力したベクトルに対してさまざまな演算を定義していきます。

ベクトルの内積

ベクトルの内積

 \displaystyle{\vec{A}\cdot\vec{B}= A_xB_x + A_yB_y + A_zB_z }

Maximaでは

inn(a,b):=transpose(a).b$

で定義できます。

あるいは、Kroneckerのデルタ(同じ添え字のときだけ1でその他はゼロ)を使った

 \displaystyle{\vec{A}\cdot\vec{B}=\sum_{i,j=1}^3 \delta_{ij}A_iB_j \qquad \text{(ただし $A_1=A_x,\ A_2=A_y,\ A_3=A_z$ などとします)} }

という書き方もMaximaで表すことができて

Inn(a,b):=sum(sum( kron_delta(i,j)*a[i][1]*b[j][1], i, 1, 3 ), j, 1, 3)$

となります。

もちろん、どちらで定義しても同じです:

is(inn(A,B)=Inn(A,B));

内積の性質

ベクトル  \vec{A} の長さ  |\vec{A}|内積によって

 \displaystyle{ |\vec{A}|=\sqrt{\vec{A}\cdot\vec{A}} }

と求められます:

leng(a):=sqrt(inn(a,a))$

2つのベクトル  \vec{A} \vec{A} のなす角  \varphi_{\vec{A}\vec{B}}内積によって

 \displaystyle{ \varphi_{\vec{A}\vec{B}}=\arccos\left(\frac{\vec{A}\cdot\vec{B}}{|\vec{A}|\,|\vec{B}|}\right) }

と定められます:

angl(a,b):=acos(inn(a,b)/(leng(a)*leng(b)))$

例えば

E1:matrix([1],[0],[0]);
E2:matrix([cos(theta)],[sin(theta)],[0]);

とするとき

trigsimp(angl(E1,E2)); /* 三角関数の簡略化のためにtrigsimpを使っています */

と入力すると

 \arccos(\cos(\theta))

と出力します。 \arccos の多価性がありますが、いまの場合  \theta としてよいでしょう。

ベクトルの外積

ベクトルの外積

 \displaystyle{\vec{A}\times\vec{B}= \left(\begin{array}{c} A_yB_z-A_zB_y \\ A_zB_x-A_xB_z \\ A_xB_y-A_yB_x \end{array}\right) }

Maximaでは

ext(a,b):=matrix(
[a[2][1]*b[3][1]-a[3][1]*b[2][1]],
[a[3][1]*b[1][1]-a[1][1]*b[3][1]],
[a[1][1]*b[2][1]-a[2][1]*b[1][1]])$

で定義できます。

あるいはLevi-Civita記号を使った

 \displaystyle{(\vec{A}\times \vec{B})_i= \sum_{j,k=1}^3  \epsilon_{ijk}A_jB_k }

によっても定義できます:

load("itensor")$ /* levi_civita を使うためにパッケージ"itensor" を読み込んでいます */
Ext(a,b):=matrix(
[sum(sum(levi_civita([1,j,k])*a[j][1]*b[k][1], k, 1, 3), j, 1, 3)],
[sum(sum(levi_civita([2,j,k])*a[j][1]*b[k][1], k, 1, 3), j, 1, 3)],
[sum(sum(levi_civita([3,j,k])*a[j][1]*b[k][1], k, 1, 3), j, 1, 3)])$

ここでLevi-Civita記号とは

 1=\epsilon_{123}=\epsilon_{231}=\epsilon_{312}=-\epsilon_{213}=-\epsilon_{132}=-\epsilon_{321}

で、その他の場合はすべてゼロとなる量です。

つまり3つの添え字の入れ替えに対して完全反対称です:

 \epsilon_{ijk}=-\epsilon_{jik}=\epsilon_{jki}

Levi-Civita記号の関わる有用な公式として

 \displaystyle{\sum_{i=1}^3\epsilon_{ijk}\epsilon_{ilm}=\delta_{jl}\delta_{km}-\delta_{jm}\delta_{kl}}

があります:

Lhs[j,k,l,m]:=sum(levi_civita([i,j,k])*levi_civita([i,l,m]), i, 1, 3)$
Rhs[j,k,l,m]:=kron_delta(j,l)*kron_delta(k,m)-kron_delta(j,m)*kron_delta(k,l)$
E[j,k,l,m]:=Lhs[j,k,l,m]-Rhs[j,k,l,m]$
makelist(makelist(makelist(makelist(
E[j,k,l,m], m, 1, 3), l, 1, 3), k, 1, 3), j, 1, 3);

2通りの外積の入力方法を書きましたが、もちろん、どちらを使っても同じ結果を与えます:

is(ext(A,B)=Ext(A,B));

外積の性質

線型性: b c を実数として

 \displaystyle{\vec{A}\times(b\vec{B}+c\vec{C})=b\vec{A}\times\vec{B}+c\vec{A}\times\vec{C} }

is(expand(ext(A,b*B+c*C)=b*ext(A,B)+c*ext(A,C)));  /* 式を展開するために expand を使っています */

反対称性:

 \displaystyle{\vec{A}\times\vec{B}=-\vec{B}\times\vec{A} }

is(expand(ext(A,B)=-ext(B,A)));

Jacobi律:

 \displaystyle{\vec{A}\times(\vec{B}\times\vec{C})+\vec{B}\times(\vec{C}\times\vec{A})+\vec{C}\times(\vec{A}\times\vec{B})=0 }

expand(ext(A,ext(B,C))+ext(B,ext(C,A))+ext(C,ext(A,B)));

また等式

 \displaystyle{\vec{A}\cdot(\vec{A}\times\vec{B})=\vec{B}\cdot(\vec{A}\times\vec{B})=0 }

expand(inn(A,ext(A,B)));
expand(inn(B,ext(A,B)));

 \displaystyle{|\vec{A}\times\vec{B}|=|\vec{A}|\,|\vec{B}| \sin\varphi_{\vec{A}\vec{B}} }

is(expand(leng(ext(A,B))^2)=factor(expand((leng(A)*leng(B)*sin(angl(A,B)))^2)));

が成り立ちます。

これらの2性質から、外積ベクトル  \vec{A}\times\vec{B} \vec{A} とも  \vec{B} とも直交し、

 \vec{A} \vec{B} で作られる平行四辺形の面積に等しい長さをもったベクトルであることがわかります。



いくつかの公式

ベクトルの内積外積について以下の公式が成り立ちます:

 \displaystyle{\vec{A}\cdot(\vec{B}\times\vec{C})=\vec{B}\cdot(\vec{C}\times\vec{A})=\vec{C}\cdot(\vec{A}\times\vec{B}) }

AinBexC:inn(A,ext(B,C))$
BinCexA:inn(B,ext(C,A))$
CinAexB:inn(C,ext(A,B))$ 
expand(AinBexC-BinCexA); 
expand(AinBexC-CinAexB);

 \displaystyle{\vec{A}\times(\vec{B}\times\vec{C})=\vec{B}(\vec{A}\cdot\vec{C})-\vec{C}(\vec{A}\cdot\vec{B}) }

AexBexC:ext(A,ext(B,C))$
expand(AexBexC-inn(A,C)*B+inn(A,B)*C);

 \displaystyle{(\vec{A}\times\vec{B})\cdot(\vec{C}\times\vec{D})=(\vec{A}\cdot\vec{C})\,(\vec{B}\cdot\vec{D})-(\vec{A}\cdot\vec{D})\,(\vec{B}\cdot\vec{C}) }

D:matrix([Dx],[Dy],[Dz])$
AexB:ext(A,B)$
CexD:ext(C,D)$
expand(inn(AexB,CexD)-inn(A,C)*inn(B,D)+inn(A,D)*inn(B,C));


裳華房の『解析学概論』(矢野・石原)は、ベクトル解析(だけでなく、常微分方程式複素解析フーリエ解析)に関してよくまとめられた解説と例題、さまざまな練習問題が載っており、効率よく応用数学が学べて理工系学部生におすすめのテキストです:


引き続き

pianofisica.hatenablog.com

では、演算子  \vec{\nabla} に関する種々の演算やその公式を見ていきます。


キーワード:ベクトル解析、内積外積Maxima

プライバシーポリシー