数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。
今回はMaximaを使ってベクトル解析をしてみたいと思います。
ベクトルの内積や外積を定義し、その性質やいくつかの公式をみてみます。
Maximaのごく基本的な使い方については以下の記事を参照してください:
ベクトルの入力
ベクトル
をMaximaに入力するには
A:matrix([Ax],[Ay],[Az]); B:matrix([Bx],[By],[Bz]); C:matrix([Cx],[Cy],[Cz]);
とします。あるいは組み込みパッケージ"eigen"を読み込んで
/* load(eigen)$ */ /* A:columnvector([Ax, Ay, Az])$ */
として入力することもできます。
以下では、前者の方法で入力したベクトルに対してさまざまな演算を定義していきます。
ベクトルの内積
ベクトルの内積
はMaximaでは
inn(a,b):=transpose(a).b$
で定義できます。
あるいは、Kroneckerのデルタ(同じ添え字のときだけ1でその他はゼロ)を使った
という書き方も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));
内積の性質
ベクトル の長さ が内積によって
と求められます:
leng(a):=sqrt(inn(a,a))$
2つのベクトル と のなす角 は内積によって
と定められます:
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を使っています */
と入力すると
と出力します。 の多価性がありますが、いまの場合 としてよいでしょう。
ベクトルの外積
ベクトルの外積
は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記号を使った
によっても定義できます:
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記号とは
で、その他の場合はすべてゼロとなる量です。
つまり3つの添え字の入れ替えに対して完全反対称です:
Levi-Civita記号の関わる有用な公式として
があります:
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));
外積の性質
線型性: と を実数として
is(expand(ext(A,b*B+c*C)=b*ext(A,B)+c*ext(A,C))); /* 式を展開するために expand を使っています */
反対称性:
is(expand(ext(A,B)=-ext(B,A)));
Jacobi律:
expand(ext(A,ext(B,C))+ext(B,ext(C,A))+ext(C,ext(A,B)));
また等式
expand(inn(A,ext(A,B))); expand(inn(B,ext(A,B)));
と
is(expand(leng(ext(A,B))^2)=factor(expand((leng(A)*leng(B)*sin(angl(A,B)))^2)));
が成り立ちます。
これらの2性質から、外積ベクトル は とも とも直交し、
と で作られる平行四辺形の面積に等しい長さをもったベクトルであることがわかります。
いくつかの公式
AinBexC:inn(A,ext(B,C))$ BinCexA:inn(B,ext(C,A))$ CinAexB:inn(C,ext(A,B))$ expand(AinBexC-BinCexA); expand(AinBexC-CinAexB);
AexBexC:ext(A,ext(B,C))$ expand(AexBexC-inn(A,C)*B+inn(A,B)*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));
裳華房の『解析学概論』(矢野・石原)は、ベクトル解析(だけでなく、常微分方程式、複素解析、フーリエ解析)に関してよくまとめられた解説と例題、さまざまな練習問題が載っており、効率よく応用数学が学べて理工系学部生におすすめのテキストです:
引き続き
では、演算子 に関する種々の演算やその公式を見ていきます。